10 pułapek w Power BI, przez które Twoje miary DAX i raporty działają gorzej niż powinny
Poznaj 10 najczęstszych pułapek w Power BI, które spowalniają raporty i psują wyniki miar DAX. Sprawdź, jak poprawić model danych, kontekst filtrowania, Power Query i wydajność bez zgadywania.
Jak tworzyć bardziej zaawansowane miary DAX, żeby były czytelne i odporne na błędy?
Zaawansowana miara DAX powinna być jednocześnie jednoznaczna w logice i przewidywalna w różnych kontekstach filtrowania. W praktyce oznacza to, że nie wystarczy, aby „zwracała poprawny wynik” w jednym wizualu. Musi też zachowywać się poprawnie po zmianie filtrów, poziomu agregacji, relacji i zakresu dat. Czytelność i odporność na błędy osiąga się przede wszystkim przez rozbijanie logiki na małe, nazwane elementy oraz jawne kontrolowanie kontekstu.
Najważniejszą techniką jest używanie VAR do wydzielania kroków obliczeń. Zamiast budować jedną długą formułę z wieloma zagnieżdżeniami, lepiej zapisać pośrednie wyniki w zmiennych, a na końcu zwrócić wynik przez RETURN. Dzięki temu łatwiej sprawdzić, co dokładnie jest liczone, ograniczyć wielokrotne przeliczanie tych samych wyrażeń i zmniejszyć ryzyko pomyłki przy modyfikacjach.
Dobrą praktyką jest także rozdzielanie miar bazowych od miar końcowych. Miara bazowa powinna liczyć prosty, pojedynczy wskaźnik, na przykład sumę sprzedaży czy liczbę transakcji. Dopiero kolejne miary powinny budować bardziej złożoną logikę na tych podstawach. Taki układ upraszcza testowanie i ogranicza sytuacje, w których ten sam fragment logiki jest kopiowany do wielu miejsc, a potem rozwija się niespójnie.
Kluczowe jest jawne zarządzanie kontekstem filtrowania. Jeśli miara ma ignorować część filtrów, trzeba to zapisać wprost, na przykład przez odpowiednie użycie funkcji modyfikujących kontekst w CALCULATE. Jeśli wynik ma zależeć od pojedynczej wartości, należy sprawdzić, czy taki warunek rzeczywiście jest spełniony. Wiele błędów wynika z założenia, że użytkownik zawsze wybierze jeden rok, jeden produkt albo jeden dział, podczas gdy raport działa też przy wielu zaznaczeniach lub bez żadnego filtra.
- Stosuj zmienne
VARdo wydzielania etapów obliczeń i nadawaj im nazwy opisujące sens biznesowy, nie techniczny skrót. - Buduj miary warstwowo: najpierw proste miary bazowe, potem dopiero bardziej złożone zależności.
- Jawnie obsługuj przypadki brzegowe, takie jak dzielenie przez zero, brak jednej wybranej wartości, pusty kontekst lub brak danych.
- Unikaj nadmiarowego zagnieżdżania; jeśli formuła staje się trudna do przeczytania, zwykle wymaga podziału na mniejsze części.
Odporność na błędy oznacza też obsługę sytuacji wyjątkowych bez zwracania mylących rezultatów. Przy obliczeniach procentowych lub wskaźnikach opartych na dzieleniu należy używać konstrukcji, które bezpiecznie reagują na pusty lub zerowy mianownik. Podobnie tam, gdzie logika wymaga jednej wybranej wartości, warto zweryfikować to warunkiem zamiast zakładać, że kontekst zawsze będzie poprawny.
Czytelna miara powinna również unikać niejawnych skrótów myślowych. Jeżeli wynik zależy od konkretnego poziomu agregacji, kalendarza, aktywnej relacji albo usunięcia filtra z wybranego wymiaru, to powinno to być widoczne w formule. Im mniej domysłów musi robić osoba czytająca kod, tym łatwiej tę miarę utrzymać i bezpiecznie rozwijać.
W praktyce dobrze napisana zaawansowana miara DAX ma trzy cechy: jedną odpowiedzialność, kontrolowany kontekst i obsłużone przypadki brzegowe. Jeśli da się ją przeczytać krok po kroku i przewidzieć jej wynik po zmianie filtrów, to zwykle jest zarówno czytelna, jak i odporna na typowe błędy modelu i raportu.
Czym różni się calculated column od measure w Power BI i kiedy którą opcję wybrać?
Calculated column to kolumna wyliczana raz podczas odświeżania danych i zapisywana w modelu. Każdy wiersz tabeli dostaje własną wartość, tak jak w zwykłej kolumnie. Measure nie zapisuje wartości w wierszach; oblicza wynik dopiero w momencie użycia w wizualizacji, zależnie od bieżącego kontekstu filtrowania, grupowania i selekcji użytkownika.
Najważniejsza różnica praktyczna jest taka, że calculated column działa w kontekście wiersza, a measure w kontekście filtra. Jeśli chcesz wyliczyć coś dla każdego rekordu osobno, na przykład marżę dla pojedynczej transakcji, flagę statusu albo klucz pomocniczy do relacji czy sortowania, używasz calculated column. Jeśli chcesz policzyć agregat, na przykład sumę sprzedaży, średnią, udział procentowy, wynik narastająco albo wartość zależną od filtrów na raporcie, właściwym wyborem jest measure.
W kontekście wydajności i jakości modelu measure jest zwykle lepszym wyborem wszędzie tam, gdzie nie potrzebujesz fizycznie zapisanej kolumny. Calculated column zwiększa rozmiar modelu, bo przechowuje dane w pamięci dla wszystkich wierszy. Measure jest obliczane dynamicznie i nie powiększa modelu w ten sam sposób, dlatego lepiej sprawdza się w analizie i raportowaniu. To jeden z częstszych błędów w Power BI: tworzenie kolumn wyliczanych do obliczeń, które powinny być miarami.
Dobrą zasadą jest więc: jeśli wynik ma być zależny od tego, co użytkownik wybierze na raporcie, wybierz measure. Jeśli wynik ma być stałą cechą każdego wiersza i ma zachowywać się jak normalna kolumna danych, wybierz calculated column. Jeżeli to możliwe, najpierw rozważ measure, a po calculated column sięgaj tylko wtedy, gdy naprawdę potrzebujesz wartości zapisanej na poziomie wiersza.
| Cecha | Calculated column | Measure |
|---|---|---|
| Moment obliczenia | Podczas odświeżania danych | W czasie działania raportu |
| Gdzie istnieje wynik | W każdym wierszu tabeli | Tylko jako wynik obliczenia |
| Zależność od filtrów | Nie zmienia się od wyborów użytkownika po odświeżeniu | Zmienia się wraz z kontekstem raportu |
| Wpływ na rozmiar modelu | Zwiększa pamięć modelu | Zwykle nie zwiększa modelu w ten sposób |
| Typowe użycie | Kategorie, flagi, sortowanie, logika per wiersz | Sumy, średnie, KPI, udziały, kalkulacje dynamiczne |
Jak poprawić wydajność raportów i modeli danych w Power BI bez zgadywania?
Najważniejsza zasada brzmi: wydajność poprawia się na podstawie pomiaru, a nie intuicji. W Power BI trzeba najpierw ustalić, co dokładnie jest wolne: ładowanie modelu, odświeżanie danych, pojedyncze miary DAX czy renderowanie konkretnego wizualu. Bez tego łatwo optymalizować niewłaściwy element i nie uzyskać realnej poprawy.
W praktyce oznacza to analizę zapytań i czasu wykonania przy użyciu narzędzi diagnostycznych, takich jak Performance Analyzer w Power BI Desktop oraz DAX Studio. Performance Analyzer pozwala sprawdzić, który wizual generuje największe opóźnienie i ile czasu zajmuje zapytanie DAX, renderowanie oraz inne operacje. DAX Studio umożliwia głębszą analizę: pokazuje plan zapytania, rozdział pracy między silnik magazynowy i formuł oraz ujawnia, czy problem wynika z kosztownych iteracji, nadmiarowych przejść po tabelach albo zbyt dużej liczby danych przetwarzanych w kontekście zapytania.
Drugi krok to zawężenie źródła problemu w modelu. Jeśli raport jest wolny, często przyczyną nie jest sam wykres, ale model danych: zbyt wysoka kardynalność kolumn, niepotrzebne kolumny tekstowe, relacje o nieoptymalnym kierunku filtrowania, nadmiar tabel lub zły schemat modelu. Dobrze zaprojektowany model gwiazdy zwykle działa szybciej niż model z wieloma tabelami pośrednimi i niejednoznacznymi relacjami, ponieważ uproszcza propagację filtrów i zmniejsza koszt obliczeń.
Trzeci obszar to same miary DAX. Jeśli analiza pokaże, że koszt generują obliczenia, trzeba sprawdzić, czy miary nie używają niepotrzebnie iteratorów, złożonych warunków wykonywanych dla dużych zbiorów danych albo funkcji wymuszających drogie przekształcenia kontekstu. Często poprawa polega nie na „sprytniejszym” wzorze, lecz na tym, by obliczać mniej danych, wcześniej agregować dane albo oprzeć logikę na prostszej strukturze modelu.
Ważne jest też odróżnienie problemów warstwy danych od problemów warstwy prezentacji. Jeżeli jedno zapytanie działa szybko, ale strona raportu nadal ładuje się wolno, przyczyną może być liczba wizuali, interakcji między nimi, niestandardowych elementów lub złożonych filtrów na stronie. Tego nie da się rzetelnie ocenić bez pomiaru czasu każdego komponentu osobno.
Najbardziej praktyczne podejście to cykl: zmierz stan wyjściowy, zmień jeden konkretny element, zmierz ponownie i porównaj wynik. Tylko wtedy wiadomo, czy zmiana rzeczywiście przyspieszyła raport. Wydajności w Power BI nie poprawia się „na oko”, tylko przez diagnozę wąskiego gardła i potwierdzenie efektu po wdrożeniu poprawki.
Jak działa kontekst filtrowania w DAX i dlaczego psuje wyniki miar?
Kontekst filtrowania w DAX to zestaw ograniczeń, które w danym momencie decydują, jakie wiersze danych są widoczne dla miary. Te ograniczenia mogą pochodzić z filtrów raportu, segmentatorów, relacji między tabelami, nagłówków wierszy i kolumn w macierzy oraz z samej definicji miary, na przykład przez CALCULATE. Miara nie liczy więc „na całej tabeli”, tylko na tym wycinku danych, który został aktualnie przefiltrowany.
To właśnie dlatego wyniki często wydają się błędne. Sama formuła może być poprawna, ale działa w innym kontekście, niż zakłada autor. Jeśli użytkownik wybierze rok, kategorię albo region, miara automatycznie przeliczy się tylko dla tych danych. Gdy dodatkowo wizualizacja ma wiersze według produktu lub miesiąca, każdy wiersz dostaje własny kontekst filtrowania, więc ta sama miara może zwracać inną wartość w każdym miejscu raportu.
Najczęstszy problem polega na tym, że autor oczekuje jednej logiki obliczenia, a DAX wykonuje ją w kontekście narzuconym przez raport. Przykładowo, prosta miara SUM(Sales[Amount]) zwróci inną wartość dla całego raportu, inną dla wybranego kraju i jeszcze inną dla pojedynczego produktu w tabeli. To nie jest błąd silnika, tylko naturalne działanie kontekstu filtrowania.
Wyniki „psują się” także wtedy, gdy miara nieświadomie dziedziczy filtry, których autor nie brał pod uwagę, albo przeciwnie, usuwa je zbyt agresywnie. Funkcje takie jak ALL, REMOVEFILTERS czy ALLEXCEPT zmieniają kontekst filtrowania i przez to mogą diametralnie zmienić wynik. Jeśli użyjesz ich bez pełnego zrozumienia, łatwo otrzymać wartości, które wyglądają dobrze w jednym widoku, ale są błędne w innym.
Szczególnie mylące są sumy końcowe. W DAX suma całkowita nie zawsze jest prostym dodaniem wartości widocznych w wierszach, ponieważ dla totalu miara liczona jest ponownie w innym kontekście filtrowania. Jeśli logika miary zależy od poziomu szczegółowości, na którym jest liczona, wynik w totalu może różnić się od intuicyjnego oczekiwania.
Kluczowa zasada jest prosta: jeśli miara zwraca zły wynik, najpierw sprawdź nie sam wzór, lecz w jakim kontekście filtrowania jest liczona. W DAX poprawność obliczenia zależy nie tylko od formuły, ale też od tego, jakie filtry aktywnie ograniczają dane w danym miejscu raportu.
Jak łączyć dane z wielu źródeł w Power Query, żeby nie rozjechały się klucze i typy danych?
Najważniejsza zasada jest prosta: zanim wykonasz scalanie tabel, ujednolić trzeba klucze łączenia i typy danych po obu stronach. W Power Query dwa pola mogą wyglądać tak samo, ale jeśli jedno jest liczbą, a drugie tekstem, albo jedno zawiera spacje, zera wiodące czy inną wielkość liter, to merge zwróci błędne dopasowania albo ich brak. Dlatego kluczy nie należy używać „tak jak przyszły ze źródła”, tylko najpierw przygotować je do wspólnego standardu.
W praktyce oznacza to, że kolumny używane do łączenia powinny mieć ten sam typ i tę samą logikę zapisu. Jeśli identyfikator w jednym źródle ma postać 00123, a w drugim 123, to konwersja do liczby usunie zera wiodące i zmieni semantykę klucza. W takim przypadku bezpieczniej traktować oba pola jako tekst i jawnie oczyścić wartości, na przykład przez usunięcie zbędnych spacji, znaków niedrukowalnych oraz ujednolicenie wielkości liter. Jeśli klucz jest liczbowy z definicji i nie ma znaczących zer wiodących, wtedy oba pola warto jawnie ustawić jako ten sam typ liczbowy przed scaleniem.
Bezpieczny schemat pracy w Power Query to najpierw wykonanie transformacji czyszczących na każdej tabeli osobno, potem ustawienie typów danych, a dopiero na końcu merge. Nie warto polegać na automatycznym wykrywaniu typów, bo może ono inaczej zinterpretować tę samą kolumnę w różnych źródłach, zwłaszcza przy danych mieszanych, pustych wartościach albo lokalnych formatach dat i liczb. Typ powinien być nadany świadomie i możliwie wcześnie, ale już po podstawowym oczyszczeniu surowych wartości, jeśli to oczyszczenie wpływa na zawartość klucza.
Jeżeli łączysz dane z systemów o różnej jakości, dobrym rozwiązaniem jest utworzenie pomocniczego, znormalizowanego klucza technicznego, zamiast łączyć po kolumnie źródłowej bez zmian. Taki klucz może być zbudowany na bazie oczyszczonego tekstu albo z kilku kolumn połączonych w jeden identyfikator, jeśli pojedyncze pole nie gwarantuje unikalności. Ważne, aby ten sam proces normalizacji był zastosowany po obu stronach relacji lub merge.
Po scaleniu trzeba sprawdzić wynik, a nie zakładać, że dopasowanie zadziałało poprawnie. Jeśli po merge nagle rośnie liczba wierszy, pojawiają się duplikaty albo wiele rekordów zostaje bez dopasowania, to zwykle sygnał, że klucz nie jest unikalny, został źle oczyszczony albo ma inny typ niż oczekiwany. Warto też kontrolować puste wartości w kolumnach kluczowych, bo one często powodują pozornie losowe braki połączeń.
Najkrócej: żeby klucze i typy danych się nie rozjechały, trzeba traktować przygotowanie kolumn do łączenia jako osobny etap modelowania danych. W Power Query poprawne scalanie zaczyna się nie od samej operacji merge, tylko od świadomego ustalenia, czym jest klucz, jak ma wyglądać i w jakim typie ma występować w każdym źródle.
Jak tworzyć dynamiczne dashboardy i interaktywne raporty, które użytkownicy naprawdę klikają?
Dynamiczny dashboard w Power BI nie polega na dodaniu jak największej liczby filtrów, przycisków i wizualizacji, tylko na takim zaprojektowaniu interakcji, aby użytkownik szybko przechodził od pytania biznesowego do odpowiedzi. Jeśli raport ma być naprawdę używany, musi prowadzić odbiorcę przez analizę: pokazać najważniejsze wskaźniki na starcie, umożliwić zawężenie kontekstu i pozwolić wejść poziom niżej bez gubienia sensu danych.
Najważniejsza zasada to projektowanie pod konkretne scenariusze użycia. Użytkownik zwykle chce sprawdzić odchylenie, porównać okresy, znaleźć przyczynę zmiany albo zidentyfikować problematyczny segment. Dlatego interaktywność powinna wspierać właśnie te działania: sensowne slicery, drill-through, hierarchie, dynamiczne tytuły, przełączanie miar lub widoków oraz dobrze ustawione interakcje między wizualizacjami. Jeśli kliknięcie nie zmienia decyzji ani nie zawęża analizy, jest zbędne.
Kluczowe jest też ograniczenie chaosu. Zbyt wiele elementów interaktywnych obniża użyteczność, bo użytkownik nie wie, od czego zacząć i co wpływa na wynik. Lepszy jest jeden spójny układ z jasno określoną logiką: filtry globalne na górze, KPI w pierwszym rzędzie, analiza trendu i struktury niżej, a szczegóły dostępne po kliknięciu lub przejściu do osobnej strony. Interakcje powinny być przewidywalne, a stan raportu czytelny, na przykład przez dynamiczne nagłówki pokazujące wybrany okres, segment lub metrykę.
Żeby raport był faktycznie „klikalny”, użytkownik musi od razu widzieć efekt działania. Dobrze działają przełączniki miar, parametrów i perspektyw analizy, o ile zmiana jest natychmiastowa i zrozumiała. W praktyce oznacza to również dbałość o model danych i wydajność DAX: nawet najlepszy dashboard przestaje być interaktywny, jeśli po każdym kliknięciu czeka się kilka sekund na odświeżenie wizualizacji. Interaktywność bez płynności działania zwykle kończy się porzuceniem raportu.
Warto też pamiętać, że użytkownicy klikają częściej wtedy, gdy raport daje im poczucie kontroli, ale nie zmusza do samodzielnego odkrywania logiki. Dlatego należy ograniczać liczbę wizualizacji na stronie, usuwać niejednoznaczne elementy, stosować konsekwentne kolory i etykiety oraz pokazywać tylko te dane, które wspierają decyzję. Dobrze zaprojektowany dashboard nie zachęca do klikania dla samego efektu, tylko sprawia, że każde kliknięcie ma cel analityczny i prowadzi do konkretnego wniosku.
Jakie są najczęstsze błędy w modelowaniu danych w Power BI i jak ich unikać w praktyce?
Najczęstsze błędy w modelowaniu danych w Power BI nie wynikają z samego DAX-a, tylko z niewłaściwej struktury modelu. To właśnie model decyduje o tym, czy miary liczą się poprawnie, czy filtry działają zgodnie z oczekiwaniem i czy raport pozostaje wydajny. W praktyce najwięcej problemów powodują: mieszanie różnych poziomów szczegółowości w jednej tabeli, nieprawidłowe relacje, nadmiar kolumn oraz brak spójnego układu faktów i wymiarów.
- Brak modelu gwiazdy – dane są trzymane w jednej szerokiej tabeli albo w wielu tabelach połączonych przypadkowo. Skutek to trudne filtrowanie, duplikacje i niejednoznaczne wyniki miar. W praktyce warto rozdzielać tabele faktów (np. sprzedaż, transakcje) od tabel wymiarów (np. data, produkt, klient) i budować relacje głównie w układzie 1:*.
- Nieprawidłowe relacje – szczególnie relacje wiele-do-wielu, relacje dwukierunkowe używane bez potrzeby albo relacje aktywne między tabelami, które powinny być rozdzielone logicznie. To często daje poprawny wygląd wizualizacji, ale błędne agregacje. Dobrą praktyką jest ustawianie jednokierunkowego filtrowania tam, gdzie to możliwe, unikanie relacji wiele-do-wielu jako rozwiązania domyślnego i pilnowanie unikalnych kluczy po stronie wymiaru.
- Zły poziom szczegółowości danych – w jednej tabeli łączone są dane dzienne, miesięczne i zagregowane, albo do faktu trafiają atrybuty opisowe, które powinny być w wymiarach. To utrudnia liczenie miar i może zawyżać wyniki po złączeniach. Należy zachować jeden poziom ziarnistości w tabeli faktów i przenosić opisy, kategorie oraz cechy do oddzielnych tabel wymiarów.
- Ładowanie wszystkiego bez selekcji – pozostawianie nieużywanych kolumn, technicznych identyfikatorów, duplikatów i zbędnych tabel zwiększa rozmiar modelu i pogarsza wydajność. W praktyce warto usuwać kolumny, które nie są potrzebne do relacji, filtrowania, grupowania lub obliczeń, a typy danych ustawiać jak najoszczędniej.
Warto też unikać tworzenia relacji „na skróty”, tylko po to, aby wizualizacja zaczęła działać. Jeśli dane nie mają poprawnego klucza biznesowego albo wymagają tabeli pośredniej, problem należy rozwiązać na poziomie modelu, a nie maskować go dodatkowymi miarami. Podobnie, jeśli kilka tabel daty pełni różne role, zwykle lepiej świadomie zarządzać relacjami niż używać jednej tabeli w sposób niespójny.
Najprostsza zasada praktyczna jest taka: model ma być czytelny, przewidywalny i oparty na jednoznacznych relacjach. Jeżeli użytkownik nie potrafi szybko wskazać, która tabela jest faktem, która wymiarem i jak przepływa filtr, to zwykle znak, że model będzie generował błędy lub problemy z wydajnością.
Jak wykorzystać funkcje time intelligence w DAX, gdy kalendarz i relacje nie są idealne?
Funkcje time intelligence w DAX, takie jak TOTALYTD, SAMEPERIODLASTYEAR, DATEADD czy DATESYTD, działają poprawnie tylko wtedy, gdy model spełnia ich podstawowe założenia: istnieje spójna tabela dat, zawiera pełny ciąg dni bez luk, jest oznaczona jako tabela dat i ma aktywną, jednoznaczną relację z tabelą faktów po kolumnie daty. Jeśli którykolwiek z tych warunków nie jest spełniony, wyniki bywają błędne albo nieprzewidywalne.
W praktyce najważniejsze jest odróżnienie dwóch sytuacji. Jeśli problem dotyczy samego kalendarza, należy najpierw naprawić tabelę dat: powinna obejmować cały analizowany zakres, mieć unikalną kolumnę daty i nie być ograniczona tylko do dni występujących w sprzedaży czy zdarzeniach. Bez tego funkcje przesuwające okresy często zwracają niepełne porównania. Jeśli natomiast problemem są relacje, na przykład masz kilka kolumn dat w faktach albo relacja jest nieaktywna, wtedy standardowe miary time intelligence trzeba budować jawnie, wskazując, z której daty korzystasz w danym obliczeniu.
Typowy przykład to tabela faktów z datą zamówienia i datą wysyłki. W modelu tylko jedna relacja może być aktywna, więc miara oparta na CALCULATE powinna w razie potrzeby aktywować właściwą relację przez USERELATIONSHIP. Dzięki temu logika czasu działa dla właściwej osi dat, zamiast przypadkowo liczyć wyniki według innej kolumny.
Gdy relacji nie da się użyć bezpośrednio albo filtracja jest bardziej złożona, bezpieczniej oprzeć się na filtrowaniu zbioru dat niż na skrótowych funkcjach time intelligence. Wtedy zamiast liczyć na automatyczne przesunięcie okresu, tworzysz zakres dat jawnie, na przykład przez DATESBETWEEN, FILTER lub TREATAS, i dopiero ten zakres nakładasz na miarę bazową. To podejście jest mniej wygodne, ale daje kontrolę tam, gdzie model nie jest idealny.
Jeżeli kalendarz jest nieciągły, oparty na miesiącach zamiast dniach albo zawiera niestandardowe okresy, trzeba uważać szczególnie na funkcje typu SAMEPERIODLASTYEAR i DATEADD, bo zakładają klasyczną oś dat. W takich przypadkach lepiej porównywać okresy przez własne warunki filtrowania niż przez gotowe funkcje, które wymagają poprawnej semantyki kalendarza.
Najważniejsza zasada jest prosta: funkcje time intelligence nie naprawiają modelu. Jeśli kalendarz lub relacje są wadliwe, najpierw trzeba ustalić, jaka data ma sterować analizą i jak ma przebiegać filtracja. Dopiero potem warto używać funkcji czasu; w przeciwnym razie poprawnie zapisany DAX może zwracać merytorycznie błędne wyniki.
Majczęściej zadawane pytania i odpowiedzi odnośnie 10 pułapek w Power BI, przez które Twoje miary DAX i raporty działają gorzej niż powinny
Problem leży w modelu danych, gdy błędy powtarzają się w wielu miarach i wizualach mimo poprawnej logiki obliczeń. Typowe sygnały to niejednoznaczne relacje, złe kierunki filtrowania, mieszanie poziomów szczegółowości oraz trudność w przewidzeniu, jak przepływa filtr. Jeśli ta sama miara daje mylące wyniki w różnych miejscach raportu, najpierw sprawdza się strukturę modelu.
Suma końcowa różni się od sumy wierszy, ponieważ DAX liczy total ponownie w innym kontekście filtrowania. To częsty efekt miar zależnych od poziomu agregacji lub warunków działających inaczej dla pojedynczego wiersza i inaczej dla całości. Najlepiej przetestować miarę w kilku widokach raportu i sprawdzić, jakie filtry działają dla totalu.
Calculated column jest błędem wtedy, gdy używasz jej do obliczeń, które powinny reagować na filtry raportu. Ma sens głównie wtedy, gdy potrzebujesz stałej wartości na poziomie wiersza. Najczęstsze poprawne zastosowania to:
- flagi i klasyfikacje rekordów,
- kolumny pomocnicze do sortowania,
- klucze techniczne i logika potrzebna do relacji.
Najlepiej zacząć od rozbicia jednej długiej miary na krótsze kroki zapisane w VAR i osobne miary bazowe. Dzięki temu łatwiej zobaczyć sens biznesowy każdego fragmentu i szybciej wykryć błąd. Dobrą praktyką jest też jawne zapisanie obsługi przypadków brzegowych, zamiast ukrywania całej logiki w wielu zagnieżdżonych funkcjach.
Źle przygotowane klucze po merge najczęściej widać po brakujących dopasowaniach, duplikatach albo nagłym wzroście liczby wierszy. To zwykle oznacza problem z typem danych, spacjami, wielkością liter lub brakiem unikalności klucza. Przed scaleniem warto sprawdzić:
- czy obie kolumny mają ten sam typ,
- czy wartości są oczyszczone,
- czy klucz naprawdę identyfikuje rekord jednoznacznie.
Funkcje time intelligence zwracają błędne wyniki, gdy model nie spełnia ich założeń dotyczących kalendarza i relacji. Sama poprawna składnia nie wystarczy. Problemem bywa nieciągła tabela dat, brak pełnego zakresu dni, nieaktywna relacja albo użycie niewłaściwej kolumny daty. W takiej sytuacji najpierw trzeba ustalić, która data steruje analizą i jak przebiega filtracja.
Interaktywne dashboardy najczęściej spowalniają zbyt ciężkie wizuale, nadmiar interakcji i kosztowne obliczenia uruchamiane po każdym kliknięciu. Problem nie zawsze leży w jednym wykresie. Opóźnienia mogą wynikać także z dużej liczby elementów na stronie, złożonych filtrów oraz miar liczących zbyt dużo danych. Dlatego wydajność trzeba mierzyć osobno dla zapytań i renderowania.
Błędy w modelu gwiazdy najłatwiej ograniczyć przez jasne rozdzielenie tabel faktów od tabel wymiarów i pilnowanie jednoznacznych relacji. W praktyce oznacza to jeden poziom szczegółowości w faktach, unikalne klucze po stronie wymiarów i unikanie relacji tworzonych tylko po to, by wizual zaczął działać. Jeśli przepływ filtra jest nieczytelny, model zwykle wymaga uproszczenia.