Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
Power BI - Wydajność modelu i raportu
Kolumna obliczeniowa spowalnia odświeżanie - kiedy miara albo krok Power Query
Kolumna obliczeniowa zapisuje wynik w każdym wierszu tabeli, a miara liczy go dopiero w zapytaniu wizualizacji. Model, do którego tabel faktów przez lata dopisywano kolumny DAX, płaci za tę różnicę wolniejszym odświeżaniem. Wyjaśniamy, kiedy kolumna obliczeniowa czy miara daje lepszą wydajność, kiedy wynik warto przenieść do kroku Power Query, i pokazujemy, jak znaleźć wszystkie kolumny obliczeniowe modelu jednym zapytaniem.
Odświeżanie trwa dłużej po każdej nowej kolumnie DAX, a plik rośnie szybciej niż dane. W lekcji o wydajności VertiPaq Analyzer pokazał na pierwszym miejscu kolumnę obliczeniową z lekcji 7, która liczyła wartość brutto w FaktSprzedaz: 96 887 różnych wartości, 4 052 372 bajty i 42,19% modelu. Źródłowa kolumna WartoscBrutto o podobnej kardynalności zajmowała w tym samym zestawieniu 8,55%, bo silnik kodował ją wartościowo, a kolumnę obliczeniową słownikiem. Żadna wizualizacja nie korzystała z tej kolumny.
Ten sam wynik daje miara. Kolumna liczona wiersz po wierszu formułą miary brutto, którą dopisaliśmy na próbę w zapytaniu DAX na modelu Nordvelli, ma 97 783 różne wartości (formuła z lekcji 7 była inna, stąd inna liczba) i sumę 566 064 985,73 zł, dokładnie tyle, co miara [Sprzedaż brutto], która niczego nie zapisuje w tabeli.

Zobacz też: Szkolenie Analiza Power BI - DAX + M
Kolumna obliczeniowa jest liczona przy przetwarzaniu modelu i zapisywana w każdym wierszu tabeli. Według dokumentacji Microsoft jej struktury powstają dopiero wtedy, gdy wszystkie tabele z Power Query są już wczytane, co wydłuża odświeżanie, a kompresja zwykle wychodzi słabsza niż przy kolumnie z Power Query. Dokumentacja kolumn obliczeniowych dodaje, że kolumny zapisane w modelu obciążają odświeżanie, bo ich wartości trzeba wyliczyć w jego trakcie. Miara nie zajmuje miejsca w tabeli i liczy się dopiero w zapytaniu wizualizacji, w jej kontekście filtra, czyli zestawie warunków z osi, fragmentatorów i filtrów. Różnicę omawiamy w lekcji o miarach i kolumnach obliczeniowych.
Kolumna obliczeniowa może też zależeć od innej tabeli. W modelu Nordvelli DimSklepy[Sprzedaż sklepu] sumuje FaktSprzedaz[WartoscNetto], a FaktZwroty[DataZakupu] szuka funkcją LOOKUPVALUE daty w FaktSprzedaz po SprzedazID. Obie zależności pokazuje funkcja INFO.CALCDEPENDENCY. Według dokumentacji wartości kolumn są przeliczane, gdy zmienią się dane, z których korzystają, więc nowe dane sprzedaży oznaczają też pracę w tabelach sklepów i zwrotów.
PierwszyDzienMiesiaca w DimKalendarz, dwie kolumny sprzedaży w DimSklepy, DataID w FaktBudzet i DataZakupu w FaktZwroty.EVALUATE
SELECTCOLUMNS(
FILTER(INFO.VIEW.COLUMNS(), [Type] = "Calculated"),
"Tabela", [Table],
"Kolumna", [Name]
)FaktZwroty[DataZakupu] (z FaktSprzedaz[SprzedazID] i FaktSprzedaz[DataID]) oraz obie kolumny sprzedaży w DimSklepy (z FaktSprzedaz[WartoscNetto]). Razem to sześć wierszy, bo przy kolumnach DimSklepy pojawia się też wewnętrzna kolumna RowNumber tabeli FaktSprzedaz.EVALUATE
SELECTCOLUMNS(
FILTER(
INFO.CALCDEPENDENCY(),
[OBJECT_TYPE] = "CALC_COLUMN"
&& [REFERENCED_TABLE] <> [TABLE]
&& [REFERENCED_OBJECT_TYPE] = "COLUMN"
),
"Kolumna", [TABLE] & "[" & [OBJECT] & "]",
"Korzysta z", [REFERENCED_TABLE] & "[" & [REFERENCED_OBJECT] & "]"
)Sprzedaż brutto =
SUMX(
FaktSprzedaz,
FaktSprzedaz[WartoscNetto] * ( 1 + RELATED( DimProdukty[StawkaVAT] ) )
)DataID w FaktBudzet, czyli Rok * 10000 + Miesiac * 100 + 1.FaktZwroty[DataZakupu] na scalenie w Power Query wymagałaby odwołania do zapytania FaktSprzedaz, a według dokumentacji Microsoft zapytanie z odwołaniem wykonuje kroki zapytania bazowego od nowa. W Nordvelli oznaczałoby to drugie uruchomienie skryptu Python z zapytania sprzedaży. Mechanizm opisujemy w poście o zapytaniach liczonych wiele razy. Tu lepsza jest data zakupu zapisana w źródle zwrotów albo pozostawienie kolumny.Sprzedaż sklepu z CALCULATE leży w DimSklepy, która ma 15 wierszy, więc jej koszt jest pomijalny. W tabeli faktów para takich kolumn kończy się zależnością cykliczną, o czym piszemy w poście o zależności cyklicznej.Po zamianie porównaj sumy. Miara musi dać tę samą kwotę co usunięta kolumna, na modelu Nordvelli 566 064 985,73 zł. Rozmiar sprawdzisz w VertiPaq Analyzer: w lekcji o wydajności usunięcie jednej kolumny obliczeniowej zmniejszyło FaktSprzedaz z 8 412 166 do 4 359 794 bajtów, a plik .pbix z 8,4 MB do 7,1 MB. Czas odświeżania porównuj w tych samych warunkach, najlepiej z dwóch odświeżeń przed zmianą i dwóch po niej.
Żeby kolumny nie wracały, przed każdą nową kolumną DAX w tabeli faktów zadaj dwa pytania: czy wynik musi być zapisany w każdym wierszu i czy da się go policzyć w Power Query albo w źródle. Gdy pierwsza odpowiedź brzmi nie, wybierz miarę, a gdy druga brzmi tak, krok zapytania.
Zachowanie programu sprawdziliśmy w Power BI Desktop 2.157 (wydanie z sierpnia 2026 r.) z polskim interfejsem, a przykłady na modelu sieci Nordvella z bezpłatnego kursu Power BI. Microsoft wydaje nową wersję Power BI Desktop co miesiąc, więc nazwy przycisków i limity usługi mogą się zmieniać. Aktualne wartości podaje dokumentacja Microsoft Learn.
Wróć do listy: 131 najczęstszych pytań i problemów związanych z Power BI
Komentarze (0)
Brak komentarzy...