Przejdź do treści

Power BI

CALCULATE w DAX – najważniejsza funkcja Power BI wyjaśniona po ludzku

Marcin Słupikowski · · 8 min czytania

Jeśli miary w Power BI „czasem się nie zgadzają”, prawie zawsze chodzi o kontekst filtra. A najważniejszą funkcją, która go zmienia, jest CALCULATE. Gdy ją zrozumiesz, reszta DAX zaczyna mieć sens.

Najpierw: kontekst filtra

Każda wartość w wizualizacji jest liczona w jakimś kontekście – zestawie filtrów pochodzących z wierszy tabeli, fragmentatorów, osi wykresu i filtrów raportu. Ta sama miara:

Sprzedaż = SUM ( Sprzedaz[Kwota] )

w wierszu „Polska” policzy sprzedaż tylko dla Polski, a w wierszu „Niemcy” – tylko dla Niemiec. Miara jest jedna, kontekst się zmienia.

CALCULATE zmienia kontekst

CALCULATE liczy wyrażenie (pierwszy argument) w zmienionym kontekście filtra (kolejne argumenty):

Sprzedaż PL =
CALCULATE ( [Sprzedaż], Klienci[Kraj] = "Polska" )

Ta miara pokaże sprzedaż dla Polski niezależnie od tego, jaki kraj jest wybrany w wierszu – bo CALCULATE zastępuje filtr na kolumnie Klienci[Kraj]. Filtry na innych kolumnach (np. rok, produkt) nadal działają.

Udział w całości: ALL

Żeby policzyć udział produktu w sprzedaży, potrzebujesz mianownika, który ignoruje filtr produktu:

Udział % =
DIVIDE (
    [Sprzedaż],
    CALCULATE ( [Sprzedaż], ALL ( Produkty ) )
)

ALL ( Produkty ) usuwa filtry z tabeli Produkty, więc mianownik to sprzedaż wszystkich produktów – w tym samym roku czy regionie, bo te filtry zostają. DIVIDE zabezpiecza przed dzieleniem przez zero.

Rok do roku

Sprzedaż RR =
CALCULATE ( [Sprzedaż], SAMEPERIODLASTYEAR ( Kalendarz[Data] ) )

Funkcje analizy czasowej wymagają poprawnej tabeli kalendarza: ciągłych dat bez luk, połączonej relacją z tabelą faktów i oznaczonej jako tabela dat.

Najczęstsze pułapki

  • Filtr nadpisuje wybór użytkownika – jeśli chcesz zawęzić, a nie zastąpić filtr, użyj KEEPFILTERS.
  • Brak tabeli kalendarza – funkcje czasowe na kolumnie dat z tabeli faktów dają dziwne wyniki.
  • Kolumna obliczeniowa zamiast miary – kolumny liczą się raz przy odświeżeniu i nie reagują na filtry raportu.

Kontekst filtra, CALCULATE i analizę w czasie omawiam szczegółowo w kursie DAX i modelowanie danych. Zapisz się na listę oczekujących – dam znać, gdy ruszy.

Lista oczekujących

Bądź na liście, gdy ruszą kursy

Zostaw e-mail – napiszę, gdy otworzę zapisy na pierwszy kurs.