Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
W skrócieDAX (Data Analysis Expressions) to język formuł Power BI, w którym liczysz miary takie jak sprzedaż netto czy marża procentowa. W tej lekcji odróżniasz miarę od kolumny obliczeniowej, budujesz pierwsze miary na danych Nordvelli, poznajesz kontekst wiersza i kontekst filtra oraz najczęstsze błędy na początku.
Lekcja 7 z 28 bezpłatnego kursu Power BI, od pierwszego raportu do Fabric i Copilota, na jednym zestawie danych sieci Nordvella.
<-- Spis wszystkich lekcjiMasz już w Nordvella S.A. gotowy model gwiazdy: tabelę faktów FaktSprzedaz otoczoną wymiarami DimKalendarz, DimProdukty, DimSklepy i DimPracownicy. Model sam w sobie nie odpowie jednak na pytanie zarządu: ile sprzedaliśmy netto, ile wyniosła marża procentowa i jak to wygląda w podziale na miasta. Do tego służy DAX (Data Analysis Expressions), język formuł Power BI. W tym rozdziale zbudujesz pierwsze miary na danych Nordvelli, zrozumiesz pojęcie, na którym opiera się cały DAX, czyli kontekst, i nauczysz się rozpoznawać błędy, które mylą prawie każdego na początku.
Z tej lekcji dowiesz się:
Pliki do tej lekcji
Gotowy efekt: plik Power BI Desktop w stanie z końca tej lekcji, z tymi samymi zapytaniami, modelem i stronami raportu, które widać na zrzutach.
Pobierz nordvella_07_dax_podstawy.pbix
Plik startowy: stan z końca poprzedniej lekcji. Otwórz go, jeśli chcesz wykonywać kroki tej lekcji od razu, bez odtwarzania wcześniejszych.
Pobierz nordvella_06_model.pbix
Dane źródłowe:
Nordvella_
Nordvella.bak.gz - te same dane jako baza MS SQL Server (odtwarzasz poleceniem RESTORE DATABASE), do ćwiczeń z połączeniem z bazą SQL.
Co chcemy osiągnąć. Zarząd Nordvelli będzie oglądać sprzedaż w podziale na miasta, regiony i miesiące, a każda liczba na wykresie ma się przeliczać po kliknięciu fragmentatora. Chcemy wiedzieć, kiedy taki wynik liczyć miarą, a kiedy kolumną obliczeniową, bo zły wybór daje raport wolny albo błędny.
Zanim wpiszesz choćby jedną literę DAX, musisz rozstrzygnąć jedną rzecz: czy tworzysz miarę, czy kolumnę obliczeniową. To częsta pomyłka początkujących i źródło raportów, które liczą się wolno albo pokazują bezsens. Wyjaśnimy różnicę na przykładzie Nordvella, żeby nie zostało to definicją ze słownika.
Miara (ang. measure) to wzór, który liczy się na żywo, w momencie gdy patrzysz na wizual. Nie ma zapisanej wartości, ma tylko formułę. Gdy klikniesz fragmentator z miastem Kraków, miara przelicza się od nowa dla Krakowa. Miara zawsze zwraca jedną liczbę dla bieżącego kontekstu, na przykład sumę WartoscNetto dla widocznego wycinka danych.
Kolumna obliczeniowa (ang. calculated column) to nowa kolumna dopisana do tabeli. Liczy się raz, przy odświeżeniu danych, dla każdego wiersza z osobna, i zajmuje pamięć w modelu. Dla 108 675 wierszy FaktSprzedaz oznacza to 108 675 policzonych i zapisanych wartości. Kolumna ma sens tam, gdzie potrzebujesz etykiety na poziomie pojedynczego wiersza, na przykład pełnego imienia i nazwiska pracownika albo przypisania transakcji do przedziału wartości.
| Cecha | Miara | Kolumna obliczeniowa |
|---|---|---|
| Kiedy się liczy | Na żywo, przy renderowaniu wizualu | Raz, przy odświeżaniu danych |
| Zajmuje pamięć | Nie, przechowuje tylko wzór | Tak, wartość na każdym wierszu |
| Reaguje na fragmentatory | Tak, przelicza się dla wycinka | Nie, wartość jest stała |
| Zwraca | Jedną wartość dla kontekstu | Wartość dla każdego wiersza |
| Przykład Nordvella | Suma sprzedaży netto, marża procentowa | Imię plus Nazwisko, przedział wartości transakcji |
Wskazówka: gdyby ktoś kazał Ci wybrać jedną zasadę, brzmi ona tak. Jeśli wynik ma się sumować i zmieniać po kliknięciu w raporcie, buduj miarę. Jeśli wynik ma być stałą etykietą na tym samym wierszu tabeli, buduj kolumnę. Sumę WartoscNetto policzoną jako kolumna obliczeniowa rozdmuchasz model o setki tysięcy zbędnych wartości i i tak nie zsumujesz jej sensownie.
Co chcemy osiągnąć. Łączna sprzedaż netto to liczba, od której zaczyna się prawie każdy raport Nordvelli: na kartach, na wykresach i w porównaniu z budżetem. Chcemy zbudować ją jako pierwszą miarę i sprawdzić jej wynik.
Zbudujmy pierwszą miarę Nordvella od zera. Chcemy policzyć łączną sprzedaż netto, czyli sumę kolumny WartoscNetto z tabeli faktów. Wykonaj to krok po kroku, obserwując co dzieje się na ekranie. Najpierw przygotuj miejsce na wizuale, które zbudujemy w drugiej połowie lekcji: w widoku raportu kliknij plus na pasku stron u dołu okna. Power BI doda pustą Stronę 3 i od razu ją otworzy, dlatego na zrzutach poniżej strona raportu jest pusta.
Krok 1. W panelu Dane po prawej kliknij prawym przyciskiem tabelę FaktSprzedaz. Otworzy się menu, w którym druga pozycja to Nowa miara. Kliknij ją. Ważne, żeby miara powstała w tabeli faktów, bo tam mieszkają dane liczbowe. Zamiast menu możesz też zaznaczyć tabelę i na wstążce kliknąć przycisk Nowa miara.
Tuż pod wstążką otwiera się pasek formuły z zaznaczonym tekstem Miara =. W panelu Dane, w tabeli FaktSprzedaz, pojawia się robocza pozycja Miara z ikoną kalkulatora, a wstążka przełącza się na kartę Narzędzia miar.
Krok 2. W pasku formuły wpisz nazwę miary, znak równości i pierwsze litery funkcji: Łączna sprzedaż = SUM. Już w trakcie pisania Power BI pokazuje listę funkcji, których nazwa zaczyna się od wpisanych liter. To podpowiedzi IntelliSense, czyli lista funkcji i kolumn wyświetlana na bieżąco.
Dopisz nawias otwierający, nazwę tabeli FaktSprzedaz i nawias kwadratowy otwierający, czyli SUM(FaktSprzedaz[. Lista zawęża się do kolumn tej jednej tabeli, a nad paskiem formuły pojawia się podpowiedź składni.
Dokończ wpisywanie nazwy kolumny WartoscNetto (albo kliknij ją na liście) i zamknij oba nawiasy. Cała formuła wygląda tak:
Łączna sprzedaż = SUM(FaktSprzedaz[WartoscNetto])Krok 3. Naciśnij Enter. Robocza pozycja Miara w panelu Dane zmienia nazwę na Łączna sprzedaż i nadal ma ikonę kalkulatora. Ta ikona odróżnia miarę od zwykłej kolumny, która ma symbol sumy albo nie ma żadnej ikony. Miara nie pokazuje jeszcze żadnej liczby, bo nie ma jej gdzie policzyć. Potrzebuje wizualu albo zapytania, które nada jej kontekst.
Krok 4. Miara jest nadal zaznaczona, a na wstążce widać kartę Narzędzia miar. Kliknij w pole Format, wpisz własny ciąg #,0 "zł" i naciśnij Enter. To liczba całkowita z separatorem tysięcy i dopiskiem zł. Od tej chwili każda wartość tej miary w raporcie wyświetli się jako czytelna kwota, na przykład 467 775 009 zł zamiast surowego ciągu cyfr. Formatowanie ustawiasz raz na mierze, a nie osobno w każdym wizualu, co jest jedną z największych zalet miar.
Zobacz też: Szkolenie Power BI - Desktop, DAX i Online + Copilot
Krok 5. Wynik miary możesz sprawdzić bez wstawiania wizuala. Kliknij czwartą ikonę na pionowym pasku po lewej stronie okna, Widok zapytań języka DAX. W edytorze jest przykładowe zapytanie z komentarzami. Zaznacz cały tekst (Ctrl+A), wpisz w to miejsce EVALUATE ROW("Łączna sprzedaż", [Łączna sprzedaż]) i kliknij zielony przycisk Uruchom nad edytorem.
Tą samą metodą dołóż resztę bazowych miar, których użyjesz w całym kursie. Nazwy z polskimi znakami i spacjami są dozwolone, byle brać je w nawias kwadratowy przy odwołaniu. Zrzuty w dalszej części lekcji nagraliśmy przed dodaniem tych miar, dlatego w panelu Dane widać na nich tylko Łączna sprzedaż. U Ciebie lista w tabeli FaktSprzedaz będzie dłuższa.
Łączna sprzedaż = SUM(FaktSprzedaz[WartoscNetto])
Liczba transakcji = COUNTROWS(FaktSprzedaz)
Średnia wartość transakcji = AVERAGE(FaktSprzedaz[WartoscNetto])
Łączna marża = SUM(FaktSprzedaz[MarzaNetto])
Marża % = DIVIDE([Łączna marża], [Łączna sprzedaż], 0)
Liczba sklepów = DISTINCTCOUNT(FaktSprzedaz[SklepID])Dwie rzeczy warto tu wychwycić. Po pierwsze, miara Marża % odwołuje się do dwóch wcześniejszych miar w nawiasach kwadratowych, a nie do surowych kolumn. To dobra praktyka, bo zmiana definicji sprzedaży czy marży w jednym miejscu propaguje się wszędzie. Po drugie, użyliśmy DIVIDE zamiast zwykłego dzielenia. DIVIDE ma trzeci argument, wartość zwracaną przy dzieleniu przez zero, dzięki czemu przy sprzedaży równej zero raport nie pokaże błędu, tylko 0. Sklep bez żadnej sprzedaży dostanie pustą komórkę: DIVIDE z pustym licznikiem i mianownikiem zwraca pustą wartość (sprawdziliśmy zapytaniem DAX).
Plik do pobrania: arkusz Nordvelli do odtworzenia demo, Nordvella_
Co chcemy osiągnąć. Ta sama miara Łączna sprzedaż pokazuje na karcie sumę całej sieci Nordvelli, a w tabeli osobną kwotę dla każdego regionu. Chcemy rozumieć, skąd bierze się ta różnica, bo od niej zależy poprawność każdej bardziej złożonej formuły w raporcie.
Kontekst to podstawa DAX: od niego zależy, co policzy każda trudniejsza formuła. W DAX istnieją dwa rodzaje kontekstu, czyli otoczenia, w którym liczy się formuła.
Kontekst wiersza odpowiada na pytanie „w którym wierszu jestem?”. Powstaje wtedy, gdy formuła liczy się osobno dla każdego wiersza tabeli, na przykład w kolumnie obliczeniowej: przy wierszu jednej transakcji formuła widzi wartości tylko tej transakcji. Kontekst filtra odpowiada na pytanie „które wiersze biorę pod uwagę?”. Tworzą go fragmentatory, wiersze i kolumny macierzy, filtry oraz relacje: ta sama miara w wierszu macierzy z Krakowem liczy się tylko na transakcjach z Krakowa. W skrócie: kontekst wiersza wskazuje jeden wiersz, kontekst filtra wybiera zbiór wierszy, na którym liczy się miara. Poniżej najpierw kontekst wiersza na kolumnie obliczeniowej, potem kontekst filtra na jednej mierze pokazanej w karcie i w macierzy.
Kontekst wiersza (ang. row context) to sytuacja, w której DAX zna wartości wszystkich kolumn dokładnie jednego wiersza. Powstaje sam z siebie w kolumnie obliczeniowej, bo kolumna liczy się osobno dla każdego wiersza. Powstaje też wewnątrz funkcji iterujących, o których piszemy w kolejnych rozdziałach. Prześledź to na kolumnie obliczeniowej dopisanej do FaktSprzedaz.
Wartosc Brutto Sprawdzenie =
FaktSprzedaz[Ilosc] * FaktSprzedaz[CenaNetto] * 1.23Żeby zobaczyć to na ekranie, przejdź do widoku Dane (druga ikona na lewym pasku) i w panelu Dane kliknij tabelę FaktSprzedaz. Na wstążce kliknij kartę Narzędzia tabel, a w niej Nowa kolumna. W pasku formuły pojawi się zaznaczony szablon Kolumna = . Wpisz w to miejsce formułę z ramki powyżej i naciśnij Enter.
W tej kolumnie DAX dla każdego z 108 675 wierszy bierze Ilosc i CenaNetto tego właśnie wiersza i mnoży. Nie musisz wskazywać, o który wiersz chodzi: formuła zawsze liczy się dla wiersza, który akurat przetwarza. Dlatego w kolumnie obliczeniowej odwołujesz się do kolumn bezpośrednio, a nie przez SUM, bo w danym momencie formuła widzi jedną wartość z jednego wiersza, a nie zbiór wartości do zsumowania.
Kontekst filtra (ang. filter context) to zestaw wszystkich filtrów, które w danym momencie zawężają dane. Składają się na niego: wybór we fragmentatorze, kliknięcie w inny wizual, wiersz i kolumna macierzy oraz filtry przenoszone przez relacje w modelu. Miara zawsze liczy się w bieżącym kontekście filtra. Weź miarę Łączna sprzedaż. Wrzucona do karty bez żadnego podziału widzi wszystkie wiersze i pokazuje sumę całości. Wrzucona do macierzy z miastem na wierszach dostaje na każdy wiersz dodatkowy filtr po tym mieście i liczy się osobno dla Warszawy, osobno dla Krakowa, i tak dalej.
| Miasto (kontekst filtra) | Łączna sprzedaż |
|---|---|
| Warszawa | 222,8 mln zł |
| Kraków | 50,5 mln zł |
| Katowice | 33,0 mln zł |
| Suma (brak filtra miasta) | 467,78 mln zł |
Wskazówka: zapamiętaj jedno zdanie. Kolumna obliczeniowa działa w kontekście wiersza, miara działa w kontekście filtra. Dlatego kolumna nie reaguje na fragmentator (jest już policzona), a miara reaguje zawsze. To jedno rozróżnienie tłumaczy większość pytań w stylu dlaczego moja liczba się nie zmienia albo dlaczego nagle liczy się dla całości.
Co chcemy osiągnąć. Chcemy zobaczyć na stronie raportu, jak jedna miara Łączna sprzedaż daje na karcie wynik całej sieci Nordvelli, a w macierzy osobne kwoty dla regionów.
Najlepiej poczuć kontekst filtra na jednej mierze pokazanej w dwóch wizualach na tej samej stronie. Zbudujemy to na Nordvelli. Weź miarę Łączna sprzedaż i wrzuć ją najpierw do karty, a potem do macierzy z podziałem na region. Wróć do widoku raportu (pierwsza ikona na lewym pasku) i sprawdź, czy na pasku stron u dołu okna zaznaczona jest Strona 3, którą dodałeś na początku lekcji. Na niej zbudujemy oba wizuale.
Karta. W panelu Wizualizacje najedź kursorem na ikonę z kartą. Podpowiedź pokazuje jej nazwę: Karta. Kliknij ją.
W lewym górnym rogu strony pojawia się pusta karta z napisem Zaznacz lub przeciągnij pola, aby wypełnić tę wizualizację. Pod ikonami panelu Wizualizacje widać trzy obszary na pola: Wartość, Kategorie i Etykietki.
Przeciągnij miarę Łączna sprzedaż z panelu Dane (tabela FaktSprzedaz) do obszaru Wartość. Nie ma żadnego podziału, więc kontekst filtra jest pusty, a miara widzi wszystkie transakcje. Karta pokazuje jedną liczbę: łączną sprzedaż netto całej sieci, zaokrągloną do 468 mln zł. Pełną kwotę zobaczysz za chwilę w wierszu Suma macierzy.
Macierz. Kliknij puste miejsce strony, żeby odznaczyć kartę. W panelu Wizualizacje najedź kursorem na ikonę z podpowiedzią Macierz i kliknij ją.
Pod kartą pojawia się pusta macierz, a obszary w panelu zmieniają się na Wiersze, Kolumny i Wartości.
W panelu Dane rozwiń tabelę DimSklepy i przeciągnij pole Region do obszaru Wiersze. Macierz wypisuje sześć regionów, na razie bez liczb.
Rozwiń z powrotem FaktSprzedaz i przeciągnij tę samą miarę Łączna sprzedaż do obszaru Wartości. Teraz każdy wiersz macierzy nakłada filtr po swoim regionie, więc jedna definicja miary daje różne wyniki. Wiersz Suma na dole macierzy nie ma filtra regionu, dlatego pokazuje tę samą kwotę co karta.
| Wizual | Kontekst filtra | Wynik miary |
|---|---|---|
| Karta | Brak podziału | 467,78 mln zł (całość) |
| Macierz, wiersz Region Południe | Filtr Region = Południe | tylko sprzedaż tego regionu |
| Macierz, wiersz Region Północ | Filtr Region = Północ | tylko sprzedaż tego regionu |
| Macierz, wiersz sumy | Brak filtra regionu | 467,78 mln zł (całość) |
Kontekst filtra dokłada też fragmentator. Poniższy zrzut pochodzi z naszego pliku demonstracyjnego: taki sam układ karty i macierzy, a pod nimi fragmentator z polem Miasto z tabeli DimSklepy, w którym zaznaczyliśmy Kraków. Fragmentatory budujemy krok po kroku w następnej lekcji (tam na polu Rok), więc tutaj patrzymy tylko na efekt.
Nie piszesz osobnej formuły dla każdego regionu ani dla całości. Piszesz raz Łączna sprzedaż, a Power BI wykonuje ten sam wzór tyle razy, ile jest komórek wizualu, za każdym razem w innym kontekście filtra. Kolumna obliczeniowa nie potrafi tego zrobić, bo jej wartości są zamrożone przy odświeżaniu i nie znają fragmentatorów.
Wskazówka: gdy raport pokazuje w każdym wierszu tę samą liczbę zamiast rozbicia, prawie zawsze przyczyną jest użycie kolumny obliczeniowej tam, gdzie powinna być miara, albo pole użyte jako suma bez agregacji. Wróć do panelu Dane i sprawdź ikonę: kalkulator oznacza miarę, ikona kolumny oznacza kolumnę.
Co chcemy osiągnąć. Zarząd Nordvelli chce widzieć przy każdym sklepie nie tylko kwoty, ale też jego segment wielkości i ocenę marży. Chcemy zbudować takie miary funkcjami IF, SWITCH i DIVIDE.
Same sumy to za mało. W raportach Nordvella chcesz klasyfikować sklepy i oceniać realizację planu. Do tego służą funkcje logiczne. IF zwraca jedną z dwóch wartości w zależności od warunku, SWITCH zastępuje długi łańcuch zagnieżdżonych IF, a DIVIDE bezpiecznie dzieli. Zacznij od miary, która dzieli sklepy na segmenty według sprzedaży.
Segment Sklepu =
IF(
[Łączna sprzedaż] > 5000000, "Duży",
IF([Łączna sprzedaż] > 2000000, "Średni", "Mały")
)Wrzuć tę miarę do nowej, tymczasowej macierzy z polem Nazwa z tabeli DimSklepy na wierszach, obok macierzy z regionami (po obejrzeniu możesz ją usunąć). Każdy wiersz liczy się w kontekście filtra jednego sklepu, więc etykieta powstaje osobno dla każdego z nich. Na danych Nordvelli zobaczysz jednak wszędzie Duży: najmniejszy sklep, Nordvella Białystok, sprzedał za 12,3 mln zł, czyli ponad dwa razy więcej niż górny próg 5 mln zł. Progi trzeba dobrać do danych, a nie wpisać z głowy. Gdy dochodzi przy tym trzeci i czwarty poziom, zagnieżdżone IF stają się nieczytelne. Wtedy sięgasz po SWITCH z argumentem TRUE, który sprawdza warunki po kolei i zwraca pierwszy pasujący. Tak wygląda miara Klasa sklepu z progami ustawionymi na podstawie sprzedaży sklepów Nordvelli. Pokazujemy ją na naszym pliku demonstracyjnym, w pliku efektu tej lekcji jej nie ma:
Klasa sklepu =
SWITCH(
TRUE(),
[Łączna sprzedaż] >= 100000000, "Bardzo duży",
[Łączna sprzedaż] >= 30000000, "Duży",
[Łączna sprzedaż] >= 18000000, "Średni",
"Mały"
)
Ten sam zapis sprawdza się przy ocenie marży. Miara poniżej przypisuje każdej kategorii produktów słowną ocenę na podstawie miary Marża %. Wrzucona do macierzy z polem Kategoria z tabeli DimProdukty pokaże, które grupy trzymają marżę, a które ją zjadają.
Ocena Marzy =
SWITCH(
TRUE(),
[Marża %] >= 0.30, "Bardzo dobra",
[Marża %] >= 0.20, "Dobra",
[Marża %] >= 0.10, "Przeciętna",
"Niska"
)Zostaje DIVIDE. Na zrzucie poniżej, także z naszego pliku demonstracyjnego, porównujemy dwie miary średniej oceny z ankiet satysfakcji (to ilustracja, w swoim pliku ich nie zakładasz). Liczą to samo, różnią się tylko sposobem dzielenia:
Ocena ukośnikiem = SUM(FaktSatysfakcja[OcenaOgolna]) / COUNTROWS(FaktSatysfakcja)
Ocena przez DIVIDE = DIVIDE(SUM(FaktSatysfakcja[OcenaOgolna]), COUNTROWS(FaktSatysfakcja))
Co chcemy osiągnąć. Przy pisaniu miar dla Nordvelli łatwo o pomyłkę w składni. Chcemy rozpoznawać pięć błędów, które łapią prawie każdego początkującego, i wiedzieć, jak każdy z nich poprawić.
Na koniec pięć błędów, które łapią prawie każdego początkującego. Poniższy blok pokazuje wersję błędną i poprawioną obok siebie, żeby rozpoznać wzorzec pomyłki, a nie tylko pojedynczy przypadek.
// 1. SUM na dwóch kolumnach naraz (nie zadziała)
// BŁĄD: SUM oczekuje JEDNEJ kolumny
Iloczyn kolumn bez SUMX = SUM(FaktSprzedaz[Ilosc] * FaktSprzedaz[CenaNetto])
// DOBRZE: iterator liczy wiersz po wierszu, potem sumuje
Iloczyn kolumn przez SUMX = SUMX(FaktSprzedaz, FaktSprzedaz[Ilosc] * FaktSprzedaz[CenaNetto])
// 2. Odwołanie do kolumny wprost w mierze (bez agregacji)
// BŁĄD: miara nie ma kontekstu wiersza, nie wie który wiersz
Kolumna bez agregacji = FaktSprzedaz[WartoscNetto]
// DOBRZE: opakuj w funkcję agregującą
Kolumna z agregacją = SUM(FaktSprzedaz[WartoscNetto])
// 3. Mylenie nawiasów: kolumna [ ], miara [ ], funkcja ( )
// BŁĄD: kolumna w nawiasach okrągłych
Nawias okrągły zamiast kwadratowego = SUM(FaktSprzedaz(WartoscNetto))
// DOBRZE: kolumna zawsze w nawiasach kwadratowych z nazwą tabeli
Poprawne odwołanie do kolumny = SUM(FaktSprzedaz[WartoscNetto])
// 4. Dzielenie zwykłym / (dzielenie przez zero psuje raport)
// BŁĄD: sklep bez sprzedaży zwróci nieskończoność lub błąd
Dzielenie ukośnikiem = [Łączna marża] / [Łączna sprzedaż]
// DOBRZE: DIVIDE z trzecim argumentem na wypadek zera
Dzielenie przez DIVIDE = DIVIDE([Łączna marża], [Łączna sprzedaż], 0)
// 5. Odwołanie do miary z nazwą tabeli (działa, ale myli)
// ZŁA PRAKTYKA: zapis wygląda jak odwołanie do kolumny
Miara z nazwą tabeli = FaktSprzedaz[Łączna sprzedaż] * 1.23
// DOBRZE: miarę bierzesz w nawias kwadratowy BEZ nazwy tabeli
Miara bez nazwy tabeli = [Łączna sprzedaż] * 1.23Reguła, która porządkuje pierwsze cztery przypadki, jest prosta. Kolumnę zapisujesz jako Tabela w nawiasie kwadratowym z nazwą kolumny, na przykład FaktSprzedaz w nawiasie z WartoscNetto. Miarę zapisujesz w samym nawiasie kwadratowym, bez nazwy tabeli. Zapis z nazwą tabeli Power BI przyjmie, ale miara wygląda wtedy jak kolumna i łatwo je pomylić. Gdy potrzebujesz policzyć coś wiersz po wierszu i dopiero zsumować, zamiast SUM użyj wersji z X na końcu, czyli SUMX, która tworzy kontekst wiersza i iteruje.
Wskazówka: gdy pasek formuły podkreśla fragment na czerwono i pokazuje komunikat, przeczytaj go dosłownie. Komunikat w stylu kolumna WartoscNetto nie została znaleziona najczęściej oznacza literówkę w nazwie albo odwołanie do kolumny, która jest w innej tabeli. Napisz nazwę tabeli i pozwól, żeby IntelliSense sam podpowiedział poprawną kolumnę, zamiast wpisywać ją z pamięci.
Masz komplet podstaw. Umiesz odróżnić miarę od kolumny, zbudować miarę krok po kroku, rozumiesz różnicę między kontekstem wiersza a kontekstem filtra i widzisz, dlaczego jedna miara daje różne liczby w karcie i w macierzy. W następnej lekcji użyjesz tych miar w wizualizacjach. Na tym fundamencie opierają się też dwie późniejsze lekcje o DAX: DAX: CALCULATE i kontekst filtrów, gdzie celowo zmieniasz kontekst filtra, oraz DAX: iteratory i miary zaawansowane, gdzie wraca SUMX z błędu numer jeden.
Komentarze (0)
Brak komentarzy...