Jakiego efektu szuka analityk: jedna miara, trzy odpowiedzi
Chaos wielu miar w raportach budżetowych
Typowy model w Power Pivot dla raportów budżetowych zawiera przynajmniej kilka miar: [Przychód], [Budżet], [Wariancja], [Wariancja %], a do tego dochodzą wersje „YTD”, „poprzedni rok”, „cel”, „prognoza” i kolejne. Po kilku miesiącach pracy taki model staje się trudny do ogarnięcia. W tabeli przestawnej użytkownik widzi listę kilkudziesięciu miar, z których każda wygląda podobnie, różni się jednym znakiem w nazwie i trzeba pamiętać, która jest która.
Taki bałagan przekłada się na błędy. Ktoś przeciąga do raportu nie tę miarę, którą trzeba. Zarząd patrzy na „wariancję %”, która jest liczona do przychodu zamiast do budżetu. Ktoś inny dodaje nowe miary „na szybko”, bez myślenia o spójności modelu. Z czasem nikt już nie wie, które definicje są aktualne, a które powinny zostać usunięte.
Źródłem problemu nie zawsze jest brak wiedzy z DAX. Częściej chodzi o brak koncepcji na to, jak ujednolicić podejście. Jeśli każda kombinacja „przychód vs budżet, kwota vs %, z komentarzem vs bez” dostaje własną miarę, model zaczyna się rozrastać wykładniczo. Rozwiązaniem jest bardziej architektura miar niż sam kod.
Idea jednej miary na wariancję: liczby i komentarz w jednym miejscu
Efekt, do którego dąży wielu analityków, to jedna, elastyczna miara typu „Przychód vs Budżet – Wskaźnik”, która:
- potrafi zwrócić wartość liczbową wariancji (przychód – budżet),
- może wyświetlić odchylenie procentowe (wariancja / budżet),
- oraz, jeśli tego wymaga odbiorca, zwraca prosty komentarz biznesowy (np. „powyżej celu”, „poniżej celu”, „brak budżetu”).
Taką miarę można przełączać za pomocą prostego slicera (np. „Rodzaj wskaźnika”: Kwota, %, Komentarz). Raport nie potrzebuje wtedy czterech osobnych pól wartości – wystarczy jedno, które zmienia swoją „twarz” w zależności od wybranej opcji. Dzięki temu:
1) Model staje się prostszy – mniej miar, mniej dublowania logiki, mniejsze ryzyko niespójności definicji.
2) Raporty są czytelniejsze – użytkownik wybiera wskaźnik jednym kliknięciem, zamiast przewijać długą listę pól.
3) Łatwiej wprowadzać zmiany – jeśli zmienia się reguła biznesowa (np. definicja komentarza), wystarczy poprawić logikę w jednym miejscu.
Gdzie jedna miara przychód vs budżet ma największy sens
Miara typu „przychód vs budżet: wariancja, odchylenie % i komentarz w jednej miarze” sprawdza się szczególnie dobrze w raportach, które regularnie ogląda zarząd lub menedżerowie biznesowi. Takie osoby nie chcą pamiętać, który wskaźnik jest w której kolumnie – wolą przełączać się między widokami tego samego raportu.
Praktyczne zastosowania:
- Raport P&L (rachunek zysków i strat) – porównanie przychodu, marży, kosztów operacyjnych względem budżetu; przełączanie między kwotą wariancji a odchyleniem % jednym przełącznikiem.
- Raport sprzedaży – analiza realizacji targetów sprzedażowych po regionach, klientach, handlowcach; komentarz „powyżej/poniżej celu” jest szczególnie cenny dla kadry kierowniczej.
- Raport projektowy – kontrola budżetu projektu (przychody, koszty) vs plan; jedna miara pozwala szybko zobaczyć nie tylko liczby, ale też prostą ocenę statusu.
- Centra kosztów – monitorowanie kosztów działów vs budżet; komentarz może od razu wskazać, które jednostki przekroczyły plan.
Obawy przed złożoną miarą i jak je oswoić
Naturalna obawa: „Czy pakowanie całej logiki w jedną miarę nie skończy się nieczytelnym, trudnym do utrzymania potworem DAX?”. To ryzyko faktycznie istnieje, jeśli podejście będzie chaotyczne. Z drugiej strony, utrzymywanie kilkunastu osobnych, częściowo dublujących się miar też jest kosztowne i sprzyja błędom.
Bezpieczne podejście to:
- zbudować proste miary bazowe ([Przychód], [Budżet], [Wariancja kwotowa], [Wariancja %]) w bardzo przejrzysty sposób,
- odpowiedzialność za „logikę biznesową” (np. zasady komentarza tekstowego) przenieść do jednej miary z SWITCH(TRUE()),
- logikę przełączania (co wyświetlamy) oprzeć na prostej tabeli parametrów, którą użytkownik wybiera slicerem.
Z takim podziałem roli miar: bazowe liczą same liczby, zaawansowana miara decyduje, które liczby (lub komentarz) pokazać w danym kontekście. Konstrukcja pozostaje zrozumiała nawet po dłuższym czasie.
Dane wejściowe i założenia biznesowe: przychód i budżet w modelu
Typowe źródła i struktury: sprzedaż vs budżet
Aby miara przychód vs budżet miała sens, najpierw trzeba uporządkować dane źródłowe. Najczęściej w modelu Power Pivot pojawiają się dwie główne tabele faktów:
- Sprzedaż (wykonanie) – szczegółowe transakcje sprzedażowe: faktury, paragony, dokumenty WZ, zamówienia rozliczone.
- Budżet (plan) – planowane wartości przychodu (lub marży, ilości) w rozbiciu na okresy, regiony, produkty, klientów czy kanały sprzedaży.
W niektórych firmach budżet przechowywany jest na wyższym poziomie agregacji niż sprzedaż (np. miesięcznie na poziomie regionu, bez rozbicia na konkretne produkty). Takie sytuacje są normalne, ale wymagają świadomych decyzji, na jakim poziomie chcemy porównywać przychód do budżetu. Nie zawsze ma sens „ciągnąć” budżet z góry na dół struktury.
Minimalny zestaw kolumn do sensownego porównania
Aby porównanie przychodu z budżetem było wiarygodne, obie tabele powinny dać się połączyć przez wspólne wymiary. Minimalny zestaw kolumn, który warto zapewnić:
- Data – w tabeli sprzedaży zazwyczaj data dokumentu; w tabeli budżetu przynajmniej data miesiąca (np. pierwszy dzień miesiąca) lub inny klucz okresu.
- Klient lub region – w prostszych modelach porównujemy po regionach (np. kraj, województwo), w bardziej zaawansowanych po konkretnych klientach (z uwzględnieniem hierarchii: klient → grupa klientów → region).
- Produkt lub kategoria – zależnie od tego, jak budżet jest przygotowany. Często budżet jest po kategoriach, a sprzedaż po produktach, więc przydaje się wspólna tabela wymiaru „Produkt/Kategoria”.
- Waluta – jeśli budżet i sprzedaż występują w różnych walutach, trzeba zdecydować, czy porównujemy w walucie lokalnej, w walucie raportowania, czy przeliczamy wszystko do wspólnej waluty.
- Scenariusz – jeśli dane planu i wykonania znajdują się w jednej tabeli, scenariusz (np. „Plan”, „Wykonanie”, „Prognoza”) będzie kluczową kolumną do filtrowania miar.
Im większa spójność między tymi kolumnami w tabeli sprzedaży i budżetu, tym mniej sztuczek trzeba stosować w DAX. Miary przychód vs budżet działają na bazie relacji fakt–wymiar, a nie „magicznego dopasowania” danych.
Spójność wymiarów: jedna tabela kalendarza, wspólne słowniki
Solidny raport budżetowy opiera się na dobrze zdefiniowanych tabelach wymiarów, które są współdzielone między sprzedażą a budżetem. W praktyce oznacza to:
- Jedna tabela kalendarza – zawiera pełny zestaw dat (lub miesięcy) dla zakresu, który nas interesuje, z kolumnami typu: rok, miesiąc, kwartał, numer tygodnia, okres księgowy itd. Zarówno sprzedaż, jak i budżet powinny być powiązane z tą samą tabelą dat.
- Jedna tabela klientów/regionów – jeśli sprzedaż i budżet opierają się na różnych kodach lub nazwach, pojawią się rozjazdy. Dobrą praktyką jest przygotowanie słownika klientów/regionów i zmapowanie do niego obu tabel.
- Jedna tabela produktów/kategorii – sprzedaż może mieć produkty, budżet tylko kategorie, ale obie tabele powinny prowadzić do wspólnego wymiaru, aby DAX wiedział, jak agregować dane.
Brak spójności w wymiarach prowadzi do frustrujących sytuacji: sprzedaż jest, budżetu nie ma, bo nie dopasował się do wymiaru; albo odwrotnie – budżet istnieje na poziomie kategorii, ale miary sprzedaży nie potrafią się do niego podpiąć. To nie jest błąd DAX, tylko projektowania modelu.
Co dokładnie porównujemy: przychód, marżę, ilości?
Miara „przychód vs budżet” w praktyce często nie ogranicza się tylko do przychodu. Ten sam wzorzec można zastosować do innych wskaźników: marży, ilości, liczby klientów, kosztów marketingu itd. Zanim pojawią się skomplikowane formuły, warto spisać kilka prostych założeń:
- czy raport będzie analizował tylko przychód, czy również inne miary finansowe,
- czy w analizie interesuje nas poziom globalny (firma jako całość), czy także detale (produkt, klient, projekt),
- jakie są granice poziomu szczegółowości – np. czy będziemy schodzić do pojedynczej faktury czy raczej zatrzymamy się na poziomie miesiąca.
Dobra praktyka: zdecydować, dla którego wskaźnika buduje się „wzorzec” miary przychód vs budżet (z wariancją, odchyleniem i komentarzem), a dopiero potem rozszerzać ten szablon na inne miary. To zabezpiecza przed sytuacją, w której każdy wskaźnik ma swoją własną, nieco inną logikę komentarza.

Przygotowanie modelu danych pod wariancję: relacje, scenariusze, kalendarz
Relacje między tabelami faktów a wymiarami
Serce analizy „przychód vs budżet” to poprawnie zdefiniowane relacje. Podstawowy wzorzec to:
- tabele faktów: Sprzedaż, Budżet,
- tabele wymiarów: Kalendarz, Klient/Region, Produkt/Kategoria, Jednostka organizacyjna (np. dział, oddział).
Każda z tabel faktów powinna mieć relacje typu „wiele do jednego” do odpowiednich wymiarów: Sprzedaż → Kalendarz, Sprzedaż → Klient, Sprzedaż → Produkt; Budżet → Kalendarz, Budżet → Klient (lub Region), Budżet → Produkt (lub Kategoria). W Power Pivot relacje te zwykle są jednokierunkowe: filtr przepływa z wymiarów do faktów.
Kiedy relacje są zdefiniowane spójnie, miary [Przychód] i [Budżet] automatycznie „rozumieją” kontekst raportu: po zmianie miesiąca, regionu, produktu czy jednostki obie wartości przeliczają się na ten sam wycinek danych. Dzięki temu wariancja [Przychód] – [Budżet] jest obliczana na spójnych, porównywalnych podstawach.
Jedna tabela faktów ze scenariuszami czy dwie osobne?
W projektowaniu modelu budżetowego w Power Pivot są dwa główne podejścia:
- Jedna tabela faktów ze scenariuszem – plan i wykonanie znajdują się w jednej tabeli, a ich rozróżnienie następuje przez kolumnę [Scenariusz] (np. „Plan”, „Wykonanie”, „Prognoza”).
- Dwie osobne tabele faktów – sprzedaż (wykonanie) w tabeli „Sprzedaż”, a budżet w tabeli „Budżet”.
Każde z podejść ma plusy i minusy:
| Rozwiązanie | Zalety | Wyzwania |
|---|---|---|
| Jedna tabela faktów ze scenariuszem | prostsze relacje, mniej tabel, łatwe filtrowanie po scenariuszu | wymaga tego samego poziomu szczegółowości dla planu i wykonania |
| Dwie osobne tabele faktów | większa elastyczność, można mieć inny poziom agregacji planu i wykonania | potrzeba dwóch miar bazowych i więcej uwagi przy projektowaniu relacji |
Jeśli firma ma kontrolę nad sposobem przechowywania budżetu i może go trzymać w tej samej strukturze co sprzedaż, jedna tabela faktów ze scenariuszem bywa bardzo wygodna. W innych sytuacjach (np. budżet tworzony ręcznie w Excelu, w innym układzie niż sprzedaż) łatwiej jest zbudować osobną tabelę „Budżet” i osobno „Sprzedaż”.
Rola tabeli kalendarza w porównywaniu okresów
Porównanie przychodu do budżetu trudno wyobrazić sobie bez solidnej tabeli kalendarza. Najczęstsze potrzeby:
- porównanie realizacji budżetu miesiąc po miesiącu, kwartał po kwartale, rok do roku,
Dodatkowe wymagania wobec kalendarza przy analizie budżetowej
Przy analizie przychód vs budżet zwykła lista dat często nie wystarcza. Kalendarz powinien pomagać w porównaniach typu „ile realizacji mamy na dziś względem planu na cały okres” czy „jak wygląda wykonanie narastająco”. Przydają się wtedy dodatkowe kolumny:
- Okres budżetowy – może być inny niż rok kalendarzowy (np. rok finansowy startuje w kwietniu). Warto mieć osobne kolumny RokBudżetowy, OkresBudżetowy.
- Początek i koniec okresu – przy porównaniach „stan na dziś vs plan na cały miesiąc/rok” przydaje się informacja, które daty należą do tego samego okresu raportowego.
- Flagi typu „dzień bieżący”, „okres zakończony” – ułatwiają budowę miar, które reagują na aktualną datę (np. czy jesteśmy w trakcie miesiąca, czy już po jego zakończeniu).
Rozsądnie zaprojektowany kalendarz ogranicza ilość złożonego DAX-a. Zamiast budować skomplikowane warunki w miarach, wiele rozróżnień można przenieść do kolumn pomocniczych w wymiarze dat.
Scenariusze i wersje budżetu w modelu
Sama kolumna Scenariusz („Plan”, „Wykonanie”, „Prognoza”) często po chwili okazuje się za mało elastyczna. W realnym procesie budżetowym pojawiają się:
- różne wersje budżetu (B1, B2, „Zarząd”, „Konsolidacja”),
- prognozy aktualizowane w trakcie roku (FC1, FC2, „Latest Estimate”),
- osobne scenariusze do analiz what-if (np. „Scenariusz optymistyczny/pesymistyczny”).
Jeśli budżet i wykonanie są w jednej tabeli, dobrym rozwiązaniem jest dodanie obok kolumny [Scenariusz] drugiej – [Wersja]. W modelu z dwiema tabelami faktów podobną rolę pełni wymiar Scenariusz/Wersja połączony z każdą tabelą odpowiednią kolumną. Dzięki temu:
- miary można parametryzować (np. filtrować konkretną wersję budżetu, nie mieszając jej z roboczymi wariantami),
- panel kontrolny (slicer) pozwala użytkownikowi szybko przełączać się między wersjami planu, bez zmiany logiki DAX.
Przy większej liczbie wersji budżetu pojawia się obawa o wydajność. Lepiej jednak mieć przejrzysty wymiar scenariusza i prosty DAX niż „odchudzoną” tabelę kosztem plątaniny warunków w miarach.
Proste miary bazowe: Przychód, Budżet, Wariancja i % Wariancji
Miara [Przychód] jako punkt wyjścia
Najbezpieczniej zacząć od możliwie najprostszej miary przychodu. Załóżmy, że w tabeli Sprzedaż kolumna wartości nazywa się [Kwota]:
[Przychód] :=
SUM ( Sprzedaż[Kwota] )
Ta miara powinna uwzględniać wszystkie aktywne filtry z wymiarów (data, klient, produkt itd.). Jeśli w modelu są dodatkowe warunki (np. tylko dokumenty zaksięgowane, tylko określone typy faktur), lepiej je wprowadzić raz w miarze bazowej niż powielać w każdej pochodnej formule:
[Przychód] :=
CALCULATE (
SUM ( Sprzedaż[Kwota] ),
Sprzedaż[StatusDokumentu] = "Zaksięgowany"
)
Miara [Budżet] – analogiczny wzorzec
Po stronie budżetu logika powinna być możliwie podobna. Jeśli tabela nazywa się Budżet, a kolumna wartości [KwotaBudżetu]:
[Budżet] :=
SUM ( Budżet[KwotaBudżetu] )
Gdy budżet i wykonanie znajdują się w jednej tabeli ze scenariuszem, [Budżet] będzie filtrowany po scenariuszu:
[Budżet] :=
CALCULATE (
SUM ( Fakty[Kwota] ),
Fakty[Scenariusz] = "Plan"
)
W analogiczny sposób zdefiniujemy [Przychód] jako scenariusz „Wykonanie”. Takie podejście upraszcza później wszystkie miary wariancji – operujemy zawsze na dwóch jasno zdefiniowanych bazach: plan i wykonanie.
Wariancja kwotowa: [Wariancja Przychodu]
Wariancja w najprostszej wersji to różnica między wykonaniem a budżetem. Trzeba tylko jasno ustalić znak: czy wynik dodatni oznacza „lepiej niż plan” czy „gorzej niż plan”. W większości analiz przychodu przyjmuje się wzór:
[Wariancja Przychodu] :=
[Przychód] - [Budżet]
Otrzymujemy wtedy:
- wartości dodatnie – wykonanie powyżej planu (nadwyżka),
- wartości ujemne – wykonanie poniżej planu (niedobór).
Jeśli organizacja ma inne przyzwyczajenia (np. w raportach controllingowych dodatnie wartości mają oznaczać „odchylenie niekorzystne”), lepiej od razu nazwać miarę odpowiednio, np. [Odchylenie Nie-korzystne], niż próbować „odwracać znak” w głowie.
Odchylenie procentowe: [Odchylenie %]
Do rozmów zarządczych częściej używa się odchyleń procentowych niż samych różnic kwotowych. Klasyczna formuła to:
[Odchylenie %] :=
DIVIDE ( [Wariancja Przychodu], [Budżet] )
Funkcja DIVIDE zabezpiecza przed dzieleniem przez zero, zwracając BLANK zamiast błędu. Przy zerowym lub bardzo małym budżecie takie odchylenie trudno sensownie zinterpretować, więc lepiej pokazać pustą komórkę niż przypadkowe „+1200%”.
Warto też z góry przemyśleć formatowanie miary [Odchylenie %]:
- procent z jednym miejscem po przecinku działa dobrze w raportach agregowanych,
- w bardzo szczegółowych tabelach (np. poziom produktu/dnia) duże skoki % mogą bardziej straszyć niż pomagać – tam lepszy bywa widok kwotowy.
Wspólne wariancje dla różnych wskaźników
Kiedy logika wariancji jest już przetestowana na przychodzie, naturalnym krokiem jest przeniesienie jej na inne miary: marżę, wolumen, koszty. Najlepsza praktyka to trzymanie tego samego schematu nazewnictwa:
[Marża],[Budżet Marży],[Wariancja Marży],[Odchylenie Marży %],[Ilość],[Budżet Ilości],[Wariancja Ilości],[Odchylenie Ilości %].
Taka spójność ułatwia zarówno dokumentowanie modelu, jak i rozwijanie późniejszej „jednej miary – trzech odpowiedzi”. Zamiast wymyślać każdą miarę od zera, klonuje się działający wzorzec i podmienia bazową kolumnę wartości.

Kontekst filtrowania i pułapki porównań: kiedy wariancja ma sens
Brak budżetu w kontekście – [Budżet] = BLANK()
Jedna z częstszych frustracji: raport pokazuje przychód, ale miara budżetu (i wariancji) pozostaje pusta. Powodów może być kilka:
- w danym okresie nie zaplanowano budżetu (np. nowo otwarty kraj sprzedaży),
- budżet istnieje na wyższym poziomie agregacji (np. tylko na poziomie regionu, a przeglądamy po poszczególnych klientach),
- kody klienta/produktu w budżecie nie pasują do słowników używanych w sprzedaży.
To nie błąd DAX, tylko naturalna konsekwencja kontekstu filtrowania. Zanim zacznie się „ratować” sytuację kombinacjami w miarach, lepiej odpowiedzieć sobie na dwa pytania:
- Czy na tym poziomie szczegółowości w ogóle istnieje sensowny budżet?
- Jeśli nie – czy chcemy rozlewać budżet z góry (np. z regionu na klientów, z kategorii na produkty), czy raczej zablokować analizę na niższym poziomie?
Rozlewanie budżetu vs blokada szczegółowości
Jeśli budżet jest zapisany miesięcznie na poziomie regionu, a sprzedaż dziennie na poziomie klienta, są dwa skrajne podejścia:
- Rozlewać budżet w dół – np. przypisywać budżet regionu proporcjonalnie do udziału klientów w historycznej sprzedaży albo dzielić równomiernie między produkty.
- Blokować zbyt niski poziom – pokazywać wariancję tylko na poziomie regionu/miesiąca, a przy zejściu niżej pozostawiać [Budżet] pusty lub pokazywać specjalny komunikat.
Rozlewanie budżetu pozwala na szczegółową analizę, ale wprowadza sporo założeń. Raport „widzi” budżet na kliencie, choć w rzeczywistości nikt go tak nie planował. Z drugiej strony blokada poziomu szczegółowości bywa frustrująca dla użytkowników, którzy chcą drążyć dane.
Rozsądny kompromis to zastosowanie obu wariantów równolegle:
- miary standardowe – pokazują wariancję tylko tam, gdzie budżet faktycznie istnieje (bez sztucznego rozlewania),
- miary „analityczne” – korzystają z mechanizmów alokacji, wyraźnie opisanych w legendzie raportu lub w dokumentacji.
Filtry krzyżowe i wiele tabel faktów
Przy dwóch tabelach faktów (Sprzedaż, Budżet) i kilku wymiarach nietrudno o konfigurację, w której filtry nie działają tak, jak odbiorca się spodziewa. Typowe problemy:
- aktywne relacje tylko z jedną tabelą faktów,
- wymiar podłączony do obu faktów, ale z nieprawidłowym kierunkiem filtrowania,
- próba porównania danych przez wymiary pośrednie (np. sprzedaż → Produkt → Kategoria ← Budżet, gdzie relacja Produkt–Kategoria jest niejednoznaczna).
Jeśli w modelu trudno o jednoznaczne relacje, zamiast kombinować z relacjami dwukierunkowymi (które łatwo wprowadzają nieoczekiwane interakcje), lepiej użyć w miarach funkcji typu TREATAS czy CROSSFILTER w kontrolowany sposób. Wzorzec jest prosty: miary bazowe ([Przychód], [Budżet]) posługują się tylko „czystym” modelem, a bardziej skomplikowane przepływy filtrów są zamknięte w osobnych, dobrze opisanych miarach pomocniczych.
Porównania „stan na dziś” – częściowo zrealizowany okres
Analiza wykonania budżetu w trakcie miesiąca czy kwartału często rodzi pytania: „Czy mamy +10% do budżetu, bo naprawdę idzie świetnie, czy po prostu budżet był zaplanowany na końcówkę miesiąca?”. Tu znowu kluczowy jest kontekst daty.
Najczęściej stosuje się dwa podejścia:
- Porównanie do pełnego budżetu okresu – dzisiejszy przychód vs budżet na cały miesiąc. Użyteczne do oceny, czy jesteśmy blisko realizacji celu, ale daje „sztucznie” duże odchylenia na początku okresu.
- Porównanie narastająco dzień po dniu – dzisiejszy przychód vs budżet skumulowany do bieżącego dnia. Wymaga rozpisania budżetu na poziom dnia (np. równomiernie albo wg harmonogramu). Daje spokojniejszy obraz realizacji, ale opiera się na dodatkowych założeniach.
Technicznie druga opcja wykorzystuje najczęściej miary typu „year-to-date” lub „month-to-date” zarówno po stronie przychodu, jak i budżetu, np. z użyciem DATESMTD, DATESYTD, TOTALYTD. Kluczowe jest, aby obie strony – plan i wykonanie – były agregowane tym samym mechanizmem.
Jedna miara – wiele twarzy: projekt struktury logicznej w DAX
Od trzech osobnych miar do jednej „inteligentnej”
Do tej pory budowaliśmy trzy osobne miary: [Wariancja Przychodu], [Odchylenie %] i np. [Komentarz Wariancji]. Często kończy się to sytuacją, w której w każdym raporcie trzeba ręcznie przeciągać kilka kolumn i pilnować, żeby wszędzie pojawiły się te same miary.
Pomysł „jednej miary – trzech odpowiedzi” polega na zbudowaniu miary, która:
- umie zwrócić zarówno wartość kwotową, jak i procentową,
- potrafi dobrać komentarz opisowy (np. „Powyżej planu”, „Pon poniżej planu”, „Brak budżetu”),
- przyjmuje parametr sterujący, co ma zwrócić w danym kontekście (np. „Value”, „Percent”, „Comment”).
Taka miara nie jest „magiczna” – to po prostu dobrze opakowana logika, która powiela się w raportach bez konieczności przepisywania warunków.
Miara sterowana parametrem – prosty szablon
Najprostszy wariant polega na dodaniu do modelu małej tabeli wymiaru, np. WymiarMiary z trzema wierszami:
Tabela wymiaru jako przełącznik logiki
Tabela sterująca pełni rolę prostego „pulpitu” dla użytkownika. Nie musi zawierać nic więcej niż kilka opisowych wierszy. Przykładowa definicja (tabela wprowadzona ręcznie lub przez ENTER DATA):
WymiarMiary
---------------------
[Id] [Typ]
1 Value
2 Percent
3 Comment
W raportach użytkownik wybiera jedną z pozycji tej tabeli (np. jako slicer lub parametr pól), a miara reaguje na filtr z WymiarMiary[Typ].
Prosty szkielet miary sterowanej takim wymiarem może wyglądać tak:
[Miara Wariancji – Uniwersalna] :=
VAR SelectedType =
SELECTEDVALUE ( WymiarMiary[Typ], "Value" )
RETURN
SWITCH (
TRUE (),
SelectedType = "Value", [Wariancja Przychodu],
SelectedType = "Percent", [Odchylenie %],
SelectedType = "Comment", [Komentarz Wariancji],
BLANK ()
)
Jeśli użytkownik nie wybierze nic (lub wybierze kilka opcji naraz), SELECTEDVALUE zwróci domyślnie „Value”, czyli wariancję kwotową. To bezpieczne zachowanie: raport zawsze coś pokaże, bez komunikatów o błędzie.
Miara komentarza – gdzie umieścić „logikę biznesową”
Najwięcej pytań budzi zwykle nie sama liczba, tylko jej interpretacja. Czy +5% do planu to „dobrze”, czy „bardzo dobrze”? Czy -2% to jeszcze „w normie”, czy już „do poprawy”? Te decyzje lepiej zamknąć w jednej, świadomie zaprojektowanej miarze komentarza, zamiast rozrzucać warunki po całym modelu.
Przykładowy szkielet komentarza:
[Komentarz Wariancji] :=
VAR HasBudget =
NOT ISBLANK ( [Budżet] )
VAR VarPct =
[Odchylenie %]
RETURN
IF (
NOT HasBudget,
"Brak budżetu",
SWITCH (
TRUE (),
VarPct >= 0.1, "Znacznie powyżej planu",
VarPct >= 0.02, "Lekko powyżej planu",
VarPct > -0.02, "W granicach planu",
VarPct > -0.1, "Poniżej planu",
"Znacznie poniżej planu"
)
)
Taki wzorzec ma kilka zalet:
- oddziela logikę progów od prezentacji – jeśli controlling zmieni definicję „znacznie powyżej planu”, modyfikacja dotyczy jednej miary,
- obsługuje brak budżetu wprost, bez kombinowania z formatowaniem warunkowym,
- jest zrozumiały dla osób nietechnicznych, bo warunki są opisowe, a nie „rozsiane” po różnych raportach.
W praktyce takie komentarze bywają potem używane w legendach, tooltipach lub jako podstawa do prostych ikon KPI. Ważne, aby nazwy kategorii były krótkie, ale jednoznaczne – mniej „poetyckie”, bardziej operacyjne.
Rozszerzanie uniwersalnej miary o dodatkowe warianty
Z czasem zwykłe „Value/Percent/Comment” przestaje wystarczać. Pojawiają się potrzeby typu: „Chcemy widzieć wariancję narastająco YTD” albo „Potrzebny jest widok tylko dla ostatniego pełnego miesiąca”. Nie trzeba wtedy burzyć całej konstrukcji – wystarczy rozszerzyć wymiar i logikę miary.
Rozbudowana tabela wymiaru może wyglądać tak:
WymiarMiary
--------------------------------------
[Id] [Typ] [PoziomCzasu]
1 Value Bieżący
2 Percent Bieżący
3 Comment Bieżący
4 Value YTD
5 Percent YTD
6 Comment YTD
Do tego dochodzi miara określająca kontekst czasu:
[Wariancja Przychodu – YTD] :=
VAR CurrentDateContext =
MAX ( 'Kalendarz'[Data] )
RETURN
CALCULATE (
[Wariancja Przychodu],
DATESYTD ( 'Kalendarz'[Data] )
)
Następnie uniwersalna miara może zostać rozbudowana o warstwę „PoziomCzasu”:
[Miara Wariancji – Uniwersalna] :=
VAR SelectedType =
SELECTEDVALUE ( WymiarMiary[Typ], "Value" )
VAR SelectedTimeLevel =
SELECTEDVALUE ( WymiarMiary[PoziomCzasu], "Bieżący" )
VAR VarValueCurrent = [Wariancja Przychodu]
VAR VarPercentCurrent = [Odchylenie %]
VAR VarCommentCurrent = [Komentarz Wariancji]
VAR VarValueYTD = [Wariancja Przychodu – YTD]
VAR VarPercentYTD = [Odchylenie % – YTD]
VAR VarCommentYTD = [Komentarz Wariancji – YTD]
RETURN
SWITCH (
TRUE (),
SelectedTimeLevel = "Bieżący" && SelectedType = "Value", VarValueCurrent,
SelectedTimeLevel = "Bieżący" && SelectedType = "Percent", VarPercentCurrent,
SelectedTimeLevel = "Bieżący" && SelectedType = "Comment", VarCommentCurrent,
SelectedTimeLevel = "YTD" && SelectedType = "Value", VarValueYTD,
SelectedTimeLevel = "YTD" && SelectedType = "Percent", VarPercentYTD,
SelectedTimeLevel = "YTD" && SelectedType = "Comment", VarCommentYTD,
BLANK ()
)
Z zewnątrz nadal jest to „jedna miara do przeciągnięcia na raport”, ale pod spodem obsługuje już kilka kombinacji typu/kontekstu czasu, wybranych przez użytkownika jednym kliknięciem.
Parametry pól w Power BI jako wygodny interfejs
Częsta obawa brzmi: „Użytkownicy nie będą chcieli klikać dodatkowych slicerów”. Można im to ułatwić, wykorzystując parametry pól (Field Parameters). Pozwalają one budować rozwijane listy w polu wiersza/kolumny, które jednocześnie sterują filtrami w tle.
Przykładowy schemat:
- Tworzysz parametr pola ParametrWariancji, który zwraca tabelę z odwołaniami do:
- tabeli WymiarMiary (dla wyboru „Value/Percent/Comment”),
- ewentualnie innych wymiarów lub miar (np. różne KPI).
- Parametr umieszczasz w wierszach lub kolumnach wizualizacji jako „oś”,
- uniwersalną miarę wariancji podłączasz jako jedyną miarę wartości.
Efekt: użytkownik zmienia pozycję w parametrze (np. z „Odchylenie %” na „Komentarz”) bez świadomości, że tak naprawdę steruje filtrem na WymiarMiary. Dla niego to tylko zmiana „widoku raportu”, a nie zarządzanie logiką modelu.
Wariant tekstowy i liczbowy w jednym widoku
Nie zawsze da się zmusić użytkowników do przełączania typów miary. W codziennej pracy handlowiec lub dyrektor sprzedaży często chce jednocześnie widzieć liczbę i krótką interpretację – najlepiej obok siebie, w jednej tabeli.
W takiej sytuacji bardziej praktyczne bywa stworzenie dwóch miar opartych na tej samej logice niż jednego, przełączanego wyniku:
- [Wariancja – Liczbowa] – odwołuje się do uniwersalnej logiki, ale zawsze zwraca liczbę (kwotę lub %),
- [Wariancja – Tekstowa] – korzysta z tej samej logiki progów, ale zwraca opis.
Przykład uproszczonego podejścia:
[Wariancja – Liczbowa] := [Wariancja Przychodu]
[Wariancja – Tekstowa] := [Komentarz Wariancji]
Nadmiar kodu? Na pierwszy rzut oka tak. W praktyce to wygodne rozdzielenie odpowiedzialności:
- miary liczbowe służą do wykresów, kart KPI,
- miary tekstowe – do tabel, tooltipów, komentarzy w widokach menedżerskich.
Dzięki temu nie trzeba mieszać typów danych w jednej miarze ani stosować sztuczek z konkatenacją tekstu i liczby, które utrudniają sortowanie i dalsze przeliczenia.
Formatowanie warunkowe oparte na komentarzu
Kiedy komentarz logiczny już istnieje, nader prosto zbudować na nim spójne formatowanie warunkowe. Zamiast powielać progi w wielu miejscach (osobno w regułach kolorów, osobno w ikonach KPI), lepiej oprzeć się na jednej miarze z jasnymi kategoriami.
Prosty przykład dodatkowej miary pomocniczej:
[Klasa Wariancji] :=
VAR Comment = [Komentarz Wariancji]
RETURN
SWITCH (
TRUE (),
Comment = "Znacznie powyżej planu", 3,
Comment = "Lekko powyżej planu", 2,
Comment = "W granicach planu", 1,
Comment = "Poniżej planu", 0,
Comment = "Znacznie poniżej planu", -1,
BLANK ()
)
Następnie w Power BI w regułach formatowania warunkowego:
- odwołujesz się do [Klasa Wariancji],
- przypisujesz zakresom wartości konkretne kolory lub ikony.
W ten sposób zmiana lub dodanie nowej kategorii komentarza wymaga aktualizacji tylko w jednym miejscu – w logice komentarza i klasie – zamiast klikania kilkunastu reguł formatowania w różnych wizualizacjach.
Jedna logika, wiele KPI – parametryzacja miar źródłowych
Jeżeli model zawiera kilka wskaźników o podobnej logice (przychód, marża, ilość, koszty), powielanie całej konstrukcji „Value/Percent/Comment” dla każdego z nich szybko robi się męczące. Zamiast tworzyć osobne miary dla każdego KPI, można dodać kolejny wymiar – np. WymiarKPI – i parametryzować źródłowe miary w DAX.
Przykładowa tabela KPI:
WymiarKPI
-------------------
[Id] [KPI]
1 Przychód
2 Marża
3 Ilość
Następnie budujemy miarę, która w zależności od wybranego KPI zwróci odpowiednie źródło wykonania i budżetu:
[Wykonanie – Wybrane KPI] :=
VAR SelectedKPI =
SELECTEDVALUE ( WymiarKPI[KPI], "Przychód" )
RETURN
SWITCH (
TRUE (),
SelectedKPI = "Przychód", [Przychód],
SelectedKPI = "Marża", [Marża],
SelectedKPI = "Ilość", [Ilość],
BLANK ()
)
[Budżet – Wybrane KPI] :=
VAR SelectedKPI =
SELECTEDVALUE ( WymiarKPI[KPI], "Przychód" )
RETURN
SWITCH (
TRUE (),
SelectedKPI = "Przychód", [Budżet],
SelectedKPI = "Marża", [Budżet Marży],
SelectedKPI = "Ilość", [Budżet Ilości],
BLANK ()
)
Na tej bazie da się zbudować „uniwersalne” miary wariancji:
[Wariancja – Wybrane KPI] :=
[Wykonanie – Wybrane KPI] - [Budżet – Wybrane KPI]
[Odchylenie % – Wybrane KPI] :=
DIVIDE ( [Wariancja – Wybrane KPI], [Budżet – Wybrane KPI] )
A potem podstawić je do logiki komentarza i uniwersalnej miary sterowanej parametrem. Efekt końcowy: jeden slicer KPI, jeden slicer typu miary (Value/Percent/Comment) i jedna wspólna logika progów, wykorzystywana przez cały raport.
Radzenie sobie z brakiem wyboru lub wieloma wyborami
W praktyce użytkownicy czasem odznaczają wszystkie opcje na slicerze albo zaznaczają ich kilka naraz. Jeśli miary zakładają pojedynczy wybór, łatwo wtedy o niespodziewane pustki w raportach. Drobne poprawki w DAX pozwalają miękko obsłużyć takie przypadki.
Typowe podejście:
- ustawić domyślny wybór w miarach (
SELECTEDVALUE(…, "Przychód")zamiast BLANK), - w razie wielu wyborów pokazać prosty komunikat lub zablokować część logiki.
Przykład miary z kontrolą liczby wybranych KPI:
[Wybrany KPI – Kontrolowany] :=
VAR DistinctCountKPI =
DISTINCTCOUNT ( WymiarKPI[KPI] )
VAR SelectedKPI =
SELECTEDVALUE ( WymiarKPI[KPI] )
RETURN
IF (
DistinctCountKPI = 1,
SelectedKPI,
"Wybierz dokładnie jeden KPI"
)
Tę miarę można później wykorzystać w tooltipie lub jako element komentarza informującego użytkownika, dlaczego nie widzi wyników. Zdejmuje to z analityka presję tłumaczenia za każdym razem, „co się stało z liczbami”.
Skalowanie rozwiązania – jak nie utonąć w złożoności
Rozszerzanie uniwersalnej miary o kolejne wymiary (KPI, czas, typ wartości) niesie ryzyko, że kod zrobi się nieczytelny. Kilka prostych nawyków pomaga utrzymać konstrukcję w ryzach:
- dzielenie logiki na małe, wyspecjalizowane miary (np. osobno wykonanie, budżet, wariancja, komentarz),
- używanie zmiennych VAR dla kluczowych kroków (wybór KPI, wybór typu miary, obliczenia pośrednie),
- konsekwentne nazewnictwo – te same fragmenty nazw dla analogicznych ról (– Wybrane KPI, – YTD, – Uniwersalna),
- opisowe komentarze w kodzie DAX tam, gdzie logika biznesowa nie jest oczywista (np. dlaczego próg wynosi 2%, a nie 5%).
Najczęściej zadawane pytania (FAQ)
Jak zrobić jedną miarę DAX, która pokazuje wariancję, odchylenie % i komentarz?
Najprostsze podejście to podział na dwa poziomy: miary bazowe i jedną miarę „sterującą”. Najpierw tworzysz miary bazowe typu: [Przychód], [Budżet], [Wariancja kwotowa] = [Przychód] - [Budżet], [Wariancja %] = DIVIDE( [Wariancja kwotowa], [Budżet] ). One mają być maksymalnie czytelne i bez dodatkowej logiki biznesowej.
Potem dodajesz tabelę parametrów (np. 'RodzajWskaźnika' z wartościami: Kwota, %, Komentarz) i tworzysz miarę, która reaguje na wybór ze slicera, np. z użyciem SWITCH(TRUE()). Ta miara sprawdza, co wybrał użytkownik i na tej podstawie zwraca albo wartość liczbową, albo tekst z komentarzem.
Jak zbudować tabelę parametrów do przełączania między kwotą, % i komentarzem?
Tabela parametrów może być bardzo prosta: jedna kolumna, kilka wierszy. Przykład: kolumna Rodzaj z wartościami „Kwota”, „Procent”, „Komentarz”. Najwygodniej dodać ją ręcznie w Power Pivot (Utwórz tabelę pochodną / Wklej z Excela) albo w Power Query jako małą tabelkę.
Po załadowaniu tabeli do modelu nie łączysz jej relacjami z faktami – służy wyłącznie jako źródło wyboru w slicerze. Twoja miara używa wtedy czegoś w stylu SELECTEDVALUE('RodzajWskaźnika'[Rodzaj]) i na tej podstawie decyduje, co zwrócić. Dla użytkownika końcowego sprowadza się to do prostego przełącznika na raporcie.
Czy łączenie liczb i tekstu w jednej miarze DAX nie utrudni dalszych obliczeń?
To częsta obawa. Jeśli miara ma raz zwracać liczbę, a raz tekst, nie warto jej potem używać jako „źródła” do kolejnych obliczeń. Rozwiązanie jest takie: miary bazowe pozostają czysto liczbowe i to na nich opierasz dalsze kalkulacje, a „miara hybrydowa” (liczby + komentarz) służy wyłącznie do prezentacji w raporcie.
W praktyce wygląda to tak, że w innych miarach odwołujesz się do [Wariancja kwotowa] czy [Wariancja %], a miara typu „Przychód vs Budżet – Wskaźnik” jest używana tylko w polu Wartości w tabeli przestawnej lub macierzy w Power BI. Dzięki temu nie blokujesz sobie dalszych analiz.
Jak poradzić sobie, gdy budżet jest na wyższym poziomie agregacji niż sprzedaż?
W takiej sytuacji kluczowe jest zdefiniowanie poziomu, na którym porównanie ma sens. Jeśli budżet jest miesięczny na poziomie regionu, a sprzedaż dzienna na poziomie klienta, to realnym punktem odniesienia będzie najczęściej „miesiąc–region” lub „miesiąc–kategoria”. Warto świadomie ograniczyć szczegółowość raportu, zamiast na siłę „rozsmarowywać” budżet na pojedyncze transakcje.
Technicznie sprowadza się to do:
- zbudowania wspólnych wymiarów (Data, Region, Produkt/Kategoria),
- użycia relacji fakt–wymiar tak, by obie tabele faktów (sprzedaż, budżet) wpinały się w te same tabele wymiarów,
- projektowania wizualizacji na poziomie, na którym obie tabele faktycznie się spotykają.
Dzięki temu Twoja miara przychód vs budżet nie musi wykonywać ryzykownych przeliczeń „w dół” struktury.
Jak uniknąć bałaganu z dziesiątkami podobnych miar budżetowych w Power Pivot?
Dobry punkt wyjścia to zasada „miary bazowe + miary kompozytowe”. Czyli: ograniczasz liczbę miar bazowych do tych naprawdę niezbędnych (Przychód, Budżet, Wariancja, Wariancja %, ewentualnie wersje YTD), a wszystkie kombinacje „kwota vs %, komentarz, rok poprzedni, plan vs prognoza” budujesz jako logikę w 2–3 bardziej zaawansowanych miarach, sterowanych tabelami parametrów.
Pomaga także spójne nazewnictwo (prefiksy: [bz_] dla baz, [vw_] dla widoków/prezentacji) i regularne przeglądy modelu. Jeśli jakaś miara nie jest używana w raportach, lepiej ją usunąć lub zastąpić parametrem niż utrzymywać „na wszelki wypadek”. To zmniejsza ryzyko, że ktoś przeciągnie do tabeli przestawnej nie tę wersję, którą trzeba.
Jak zaprojektować komentarz biznesowy („powyżej celu”, „poniżej celu”) w DAX?
Najpierw ustal proste, zrozumiałe zasady razem z odbiorcami raportu. Przykład: „Powyżej celu”, jeśli wariancja % >= 5%; „W okolicy celu”, jeśli między -5% a 5%; „Poniżej celu” poniżej -5%; „Brak budżetu”, jeśli budżet = 0. Dopiero potem przekładasz te reguły na miarę z SWITCH(TRUE()) albo zagnieżdżonym IF.
Taka miara może wyglądać tak: dla wyliczonej [Wariancja %] sprawdzasz kolejno warunki i zwracasz odpowiedni tekst. Jeżeli komentarz ma służyć różnym działom, możesz też dodać prostą tabelę parametrów z poziomami progów (np. inne dla sprzedaży, inne dla kosztów) i użyć ich w miarze zamiast „zaszywanych na sztywno” wartości.
Czy jedna miara przychód vs budżet sprawdzi się także w raportach P&L i centrach kosztów?
Tak, szczególnie tam widać z niej korzyść. W raportach P&L oraz centrach kosztów te same osoby często przełączają się między spojrzeniem „ile złotych różnicy?” a „jaki to procent planu?”. Dodanie trzeciej perspektywy w postaci komentarza („przekroczenie budżetu”, „oszczędność względem planu”) jeszcze bardziej ułatwia rozmowę biznesową, bo nie wszyscy patrzą na liczby w ten sam sposób.
W praktyce możesz użyć tej samej logiki miary dla różnych pozycji: przychody, marża, koszty operacyjne, koszty działów. Różnić się będzie jedynie to, jakie miary bazowe podłączasz do logiki wariancji i czy dla danej pozycji dodatnia wariancja oznacza „dobrze” czy „źle” (dla kosztów warto czasem odwrócić znak lub komentarz).
Co warto zapamiętać
- Rozdmuchane modele z dziesiątkami podobnych miar (Przychód, Budżet, Wariancja, Wariancja %, YTD, cel itd.) prowadzą do bałaganu, pomyłek w raportach i trudności w utrzymaniu spójnych definicji.
- Jedna elastyczna miara „Przychód vs Budżet – Wskaźnik” może zwracać kwotę wariancji, odchylenie procentowe i prosty komentarz biznesowy, dzięki czemu nie trzeba tworzyć wielu osobnych miar dla każdej kombinacji.
- Przełączanie typu wskaźnika (Kwota, %, Komentarz) przez slicer sprawia, że raport jest czytelniejszy dla zarządu i menedżerów – zmienia się widok, a nie struktura raportu; użytkownik nie musi polować na „właściwą kolumnę”.
- Kluczem do uniknięcia „potwora DAX” jest podział ról: proste, przejrzyste miary bazowe liczą liczby, a jedna nadrzędna miara, oparta np. na SWITCH(TRUE()), odpowiada za logikę biznesową i wybór tego, co pokazać.
- Taka architektura szczególnie dobrze sprawdza się w P&L, raportach sprzedaży, budżetach projektów i centrach kosztów, gdzie liczy się szybkie przełączanie między liczbą, procentem i oceną typu „powyżej/pod poniżej celu”.
- Porządny model przychód vs budżet wymaga najpierw sensownie zorganizowanych danych źródłowych: dwóch tabel faktów (sprzedaż i budżet) powiązanych przez wspólne wymiary, przede wszystkim czas i klient/region.






