Kurs waluty z poprzedniego dnia roboczego w Power BI

Power BI
Analityka danych

Spis treści:

W analizie danych biznesowych bardzo często zdarza się, że mamy potrzebę przeliczyć wartości z PLN na inną walutę, np. tworząc raporty sprzedaży. Należy jednak pamiętać, że NBP publikuje kursy jedynie w dni robocze – kursy z weekendów i świąt nie są dostępne. Oznacza to, że przy pobieraniu kursów musimy uwzględnić, że ostatni dostępny kurs będzie pochodził z poprzedniego dnia roboczego. W tym artykule przedstawimy w 3 przykładach, jak w Power BI efektywnie zaimportować i przekształcić kursy walut NBP tak, aby pochodziły z odpowiedniego dnia i umożliwiły nam poprawne przeliczanie wartości.

Do każdego ćwiczenia wykorzystamy te same dane, które znajdują się w skoroszycie Excel:

Importujemy nasze przykładowe dane do Power BI ze skoroszytu programu Excel:

W oknie Nawigator zaznaczamy tabelę lub arkusz z danymi:

Dane po załadowaniu trafiły do modelu danych w Power BI.

Przykład 1 – import kursu z dnia poprzedniego przy pomocy PQ

Naszym zadaniem jest przygotowanie raportu, w którym przedstawimy sumę wartości sprzedaży każdego z produktów w złotówkach oraz w Euro, według kursu z poprzedniego dnia roboczego.

Do obliczeń, które wykonamy w języku DAX, wykorzystamy kurs z poprzedniego dnia roboczego, w odniesieniu do dnia bieżącego, wykorzystując do tego edytor Power Query.

Uwaga!

Kursy walut aktualizowane są w okolicy godziny 12:00. Wówczas do pliku dopisywany jest nowy, aktualny kurs z datą dzisiejszą. Dlatego też, gdybyśmy brali tylko kurs ostatni, to jeżeli raport byłby uruchamiany do godziny 12, kurs byłby brany z dnia poprzedniego, a odświeżając raport po godzinie 12, obliczenia dotyczyłyby kursu z dnia bieżącego. Trzeba ten fakt uwzględnić na etapie transformacji danych w Power Query.

Power Query

980  netto

Na szkoleniu nauczymy Cię w jaki sposób wykorzystać Power Query do zautomatyzowania typowych czynn...
Zobacz szkolenie

Do naszych przykładów będziemy posługiwać się danymi, znajdującymi się na stronie Narodowego Banku Polskiego:

https://nbp.pl/statystyka-i-sprawozdawczosc/kursy/archiwum-tabela-a-csv-xls/

Następnie na wybranym roku klikamy prawym przyciskiem i wybieramy Kopiuj link:

Następnie pobieramy kursy walut ze strony NBP, wybierając Pobierz dane – Internet:

Wklejamy link do pliku CSV z kursami:

Strona nie wymaga zalogowania, aby pobrać plik, stąd też do autoryzacji wybierzemy dostęp anonimowy i klikamy Połącz:

Następnie, aby przejść do edytora Power Query, klikamy Przekształć dane:

Zmieniamy nazwę naszego zapytania, np. na Kurs euro:

Na początku musimy oczyścić dane, usuwając pierwszy wiersz oraz ostatnie cztery. Aby to zrobić wchodzimy w filtry, klikając strzałkę przy nagłówku kolumny i odznaczamy niepotrzebne pozycje:

Następnie zmieniamy typ danych w kolumnie data. Klikamy na małą ikonę typu danych kolumny, a następnie wybieramy typ Data:

Interesuje nas jedynie waluta Euro, więc możemy usunąć inne kolumny. Aby szybko to zrobić, zaznaczamy kolumny data1EUR, klikamy prawym przyciskiem myszy na nagłówku i wybieramy Usuń inne kolumny.

**Import i przekształcenia jakie wykonaliśmy dotychczas, wykorzystamy także w przykładzie 2 oraz 3.

Przykład 1 jest specyficzny, gdyż to Power Query dostarczy nam jeden, kluczowy do obliczeń, przelicznik walutowy.

Następnie chcielibyśmy określić datę dnia wczorajszego, ale z uwzględnieniem dni weekendowych, czyli jeśli dniem dzisiejszym jest poniedziałek, to kurs powinien być brany z poprzedniego dnia roboczego (piątku). W tym celu stworzymy kolumnę niestandardową:

Kolumna będzie zawierała formuły języka M:

let
 Dzisiaj = Date.From(DateTime.LocalNow()),
 DzienTygodnia = Date.DayOfWeek(Dzisiaj, Day.Monday),
 PoprzedniRoboczy = 
 // poniedziałek
if DzienTygodnia = 0 then Dzisiaj - #duration(3,0,0,0)
// niedziela
else if DzienTygodnia = 6 then Dzisiaj - #duration(2,0,0,0)
// sobota
else if DzienTygodnia = 5 then Dzisiaj - #duration(1,0,0,0)
// normalne dni
else Dzisiaj - #duration(1,0,0,0) 
 in
  PoprzedniRoboczy

Naszym następnym krokiem będzie stworzenie kolumny warunkowej:

Oznaczy ona nam wiersz z kursem, który nas interesuje. Porównamy kolumnę data z kolumną pomocniczą Poprzedni dzień roboczy:

Na stworzoną kolumnę warunkową nałożymy filtr, w którym wyłączamy usuń mnie:

Dane po przekształceniach wyglądają następująco:

Do dalszych obliczeń, które wykonamy w języku DAX, potrzebujemy tylko wartości kursu.

Typ danych kursu jest teraz tekstowy. Zmienimy go na typ liczbowy dziesiętny:

Następnie należy dane wyodrębnić nasz wynik, klikając prawym przyciskiem myszy komórkę z kursem i wybierając opcje Wyszczególnij:

Nasza wartość kursu jest już gotowa:

Teraz wystarczy ją załadować do modelu w Power BI, klikając Zamknij i zastosuj:

Gdy otrzymaliśmy już kurs, chcielibyśmy obliczyć wartość naszych produktów w Euro. Te obliczenia można wykonać na wiele sposobów, lecz my skorzystamy z miary, pisząc wyrażenie w języku DAX.

Aby to zrobić, w narzędziach głównych wybieramy opcję Nowa miara:

Następnie piszemy miarę, która przeliczy nam ceny produktów:

Cena w € = 
SUMX(
Dane1, 
[Cena sprzedaży [zł]] / MIN('Kurs euro'[1EUR])
)

Pamiętaj!

Power BI zawsze wymaga agregacji wartości, które pobieramy z innych tabel. Nawet jeśli mamy jeden wiersz (w naszym przypadku kurs euro), musimy użyć funkcji agregującej, ponieważ DAX zakłada, że tych danych może pojawić się więcej. Dlatego, gdy mamy jeden wiersz, używamy np. MIN(), MAX(), AVERAGE() itp.

 

Szkolenie Power BI

970  netto

Naucz się tworzyć nowoczesne i dynamiczne raporty w dedykowanym narzędziu ze stajni Microsoft. Dzi...
Zobacz szkolenie

Następnie tworzymy tabelę i zaznaczamy Produkt, Cenę sprzedaży i Cenę w €:

Gotowe!

Przykład 2 – import wszystkich kursów i wybranie odpowiedniego za pomocą formuł DAX

W tym przykładzie zaimportujemy wszystkie kursy z bieżącego roku za pomocą Power Query, lecz wyszukamy kurs z poprzedniego dnia roboczego za pomocą formuł DAX.

Powtarzamy kroki do **

Następnie tworzymy nową miarę, która wyszuka nam kurs z ostatniego dnia roboczego względem dnia dzisiejszego:

Kurs ostatniego dnia roboczego = 
// Pobieramy dzisiejszą datę
VAR Dzisiaj = TODAY() 
// Szukamy największej dostępnej daty w tabeli 'Kurs euro' wcześniejszej niż dzisiaj
VAR OstatniDzien = 
    CALCULATE(
        MAX('Kurs euro'[data]),
        FILTER(
            'Kurs euro',
            'Kurs euro'[data] < Dzisiaj
        )
    )
// Zwracamy kurs z tego dnia
RETURN
    CALCULATE(
        MAX('Kurs euro'[1EUR]),
        'Kurs euro'[data] = OstatniDzien
    )

Mając już miarę, która wyszukuje nam kurs, możemy stworzyć drugą, która przeliczy ceny w złotówkach na euro:

Cena w € = 
SUMX(
  ‘Dane1’,
  'Dane1' [Cena sprzedaży [zł]]]) / 'Dane1' [Kurs ostatniego dnia roboczego]
)

Gdy obie miary są gotowe, możemy stworzyć tabelę i załadować do niej wartości:

Nasz raport jest gotowy:

DAX-Analiza danych

1 500  netto

Dowiedz się jak analizować dane z wykorzystaniem języka DAX (Data Analysis Expressions) w Power BI...
Zobacz szkolenie

Przykład 3 – znajdowanie kursu na podstawie daty sprzedaży

W naszych danych ze skoroszytu Excel zaszły pewne zmiany. Do każdej sprzedaży produktu została dodana data sprzedaży, a co za tym idzie, kurs Euro będzie zależeć od dnia, w którym sprzedano produkt.

Naszym zadaniem jest dopasować do każdej sprzedaży odpowiedni kurs euro, a następnie przeliczyć cenę w złotówkach na cenę w euro.

Powtarzamy kroki importu i przekształceń**

Jeśli Power BI nie zrobił tego automatycznie – ustaw odpowiedni typ danych w kolumnie Data sprzedaży w edytorze Power Query:

Tworzymy nową miarę, która dopasuje nam kurs euro do daty sprzedaży produktu, uwzględniając przypadki, gdy sprzedaż miała miejsce w weekend lub święta:

Kurs Euro Dopasowany = 
// Pobieramy datę sprzedaży z kontekstu filtru naszej wizualizacji (czyli np. 03.07.2025)
VAR DataSprzedazy = SELECTEDVALUE('Dane1'[Data sprzedaży])
// Znajdujemy maksymalną datę kursu, która jest wcześniejsza niż data sprzedaży
VAR OstatniKurs =
    CALCULATE(
        MAX('Kurs Euro'[data]), 
        FILTER(
            'Kurs Euro', 
            'Kurs Euro'[data] < DataSprzedazy
        )
    )
// Na podstawie znalezionej daty zwracamy kurs euro
RETURN
    CALCULATE(
        MAX('Kurs Euro'[1EUR]), 
        'Kurs Euro'[data] = OstatniKurs
    )

Gdy mamy już miarę, która dopasowuje nam kurs do daty sprzedaży, tworzymy kolejną, która przeliczy nam cenę sprzedaży na euro:

Cena w € = 
SUMX(
    Dane1,
    Dane1[Cena sprzedaży [zł]]] / Dane1[Kurs Euro Dopasowany]
)

Następnie tworzymy wizualizację w Power BI, używając stworzonych przez nas miar:

Gotowe! Stworzyliśmy raport, który pobiera odpowiedni kurs w zależności od daty sprzedaży produktu:

Podsumowanie

Na podstawie przedstawionych przykładów, widać, że można pobierać kursy walut z poprzedniego dnia roboczego na kilka sposobów. Nauka metod, które przedstawiliśmy, z pewnością pomoże nam precyzyjniej analizować dane i tworzyć bardziej trafne raporty. Dzięki temu, budowa raportów, w których potrzebne są przeliczniki kursowe walut, stanie się prostsza i bardziej efektywna.

Podobne artykuły

Wszystkie artykuły