Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
Power BI - Wydajność modelu i raportu
Plik .pbix rośnie do setek megabajtów - kolumny o dużej kardynalności
Liczba wierszy rośnie wolniej niż rozmiar pliku, a raport po kilku miesiącach waży setki megabajtów. Za tak duży plik Power BI odpowiadają zwykle pojedyncze kolumny o dużej kardynalności, czyli z wieloma różnymi wartościami. Pokazujemy, jak je wskazać, na pomiarach z modelu Nordvelli, i jak zmniejszyć model tak, żeby raport pokazywał te same liczby.
Plik .pbix rośnie z każdym odświeżeniem, zapis i publikacja trwają coraz dłużej, a model zajmuje coraz więcej pamięci. W lekcji o wydajności VertiPaq Analyzer w DAX Studio pokazał, że tabela FaktSprzedaz zajmuje 87,58% modelu Nordvelli, a jedna kolumna obliczeniowa z lekcji 7 waży 4 052 372 bajty, czyli 42,19% całego modelu. Po jej usunięciu plik zmalał z 8,4 MB do 7,1 MB, a liczby w raporcie się nie zmieniły.
W gotowym modelu z końca kursu zmierzyliśmy kolumny FaktSprzedaz zapytaniem DAX. Pięć najcięższych to kwoty WartoscBrutto i WartoscNetto (po 434 832 bajty danych) oraz CenaNetto, MarzaNetto i identyfikator SprzedazID (po 289 936 bajtów). Razem to 74% danych tabeli. Kolumna KanalSprzedazy z trzema wartościami zajmuje 136 bajtów.
Power BI trzyma dane w silniku kolumnowym VertiPaq, który kompresuje każdą kolumnę osobno. O rozmiarze decyduje kardynalność, czyli liczba różnych wartości w kolumnie. Według dokumentacji Microsoft najlepiej kompresują się liczby kodowane wartościowo, a tekst silnik koduje przez słownik, w którym każda unikatowa wartość dostaje własny identyfikator. Kodowanie wybiera silnik: w Nordvelli kwoty i SprzedazID mają kodowanie wartościowe, a liczbowy klucz DataID słownik o rozmiarze 39 488 bajtów. Kolumna z kilkoma wartościami kosztuje prawie nic, a kolumny, w których prawie każdy wiersz jest inny, należą do najcięższych.
Zobacz też: Szkolenie Analiza Power BI - DAX + M
W FaktSprzedaz (108 675 wierszy) SprzedazID ma 108 675 różnych wartości, WartoscNetto 96 723, DataID 1 612, a FormaPlatnosci 5. Szczególnie dużo różnych wartości dają znaczniki daty z godziną. Model Nordvelli trzyma samą datę, a klucz DataID ma 1 612 wartości. W teście dopisaliśmy w zapytaniu DAX kolumnę, która każdej transakcji przypisuje inną godzinę między 8:00 a 20:00. Data z godziną miała wtedy 108 675 różnych wartości, tyle co wierszy, a sama godzina zaokrąglona do minuty 721. Kolumna z samą godziną co do minuty nie przekroczy 1 440 wartości, bo tyle minut ma doba. Kolumny obliczeniowe kompresują się gorzej niż źródłowe, co rozwijamy w poście o kolumnie obliczeniowej, która spowalnia odświeżanie.

WartoscBrutto i WartoscNetto po 434 832 bajty.EVALUATE
SELECTCOLUMNS(
FILTER(
INFO.STORAGETABLECOLUMNSEGMENTS(),
LEFT([TABLE_ID], 12) = "FaktSprzedaz"
),
"Kolumna", [COLUMN_ID],
"Bajty", [USED_SIZE]
)
ORDER BY [Bajty] DESCRowNumber, którą silnik dodaje do każdej tabeli, a za nią są SprzedazID (108 675), WartoscNetto (96 723) i WartoscBrutto (96 652). Na dole listy są CzyZwrot i CzyAnomalia z dwiema wartościami.EVALUATE FILTER(COLUMNSTATISTICS(), [Table Name] = "FaktSprzedaz") ORDER BY [Cardinality] DESC
SprzedazID wygląda na zbędny identyfikator, ale korzysta z niego kolumna obliczeniowa DataZakupu w tabeli zwrotów, co pokazuje funkcja INFO.CALCDEPENDENCY. Samo Ukryj w widoku raportu nie zmniejsza modelu ani o bajt.// Power Query (M): wzór kroku, PoprzedniKrok i DataGodzina zastąp swoimi nazwami
Table.TransformColumns(
PoprzedniKrok,
{{"DataGodzina", each DateTime.Date(_), type date}}
)WartoscNetto do pełnych złotych zmniejsza liczbę różnych wartości z 96 723 do 14 923, ale suma sprzedaży rośnie o 772,83 zł (467 775 782 zł zamiast 467 775 009,17 zł). W Nordvelli kwoty mają dwa miejsca po przecinku i tak zostają, bo raport liczy do grosza. Kod zamówienia z prefiksem tekstowym, na przykład SO123456, według dokumentacji Microsoft lepiej zapisać jako liczbę całkowitą i ustawić mu podsumowanie Nie sumuj.Po zmianach jeszcze raz uruchom View Metrics albo zapytanie z kroku 1 i porównaj rozmiary kolumn. Zapisz plik i sprawdź jego rozmiar na dysku. Na koniec otwórz strony raportu i porównaj główne sumy, na przykład [Łączna sprzedaż] Nordvelli musi dać 467 775 009,17 zł przed zmianami i po nich. Gdy plik ma trafić do usługi, sprawdź też limity rozmiaru, które opisujemy w poście o pliku za dużym do publikacji.
Żeby model nie rósł z powrotem, dodawaj kolumnę tylko wtedy, gdy służy raportowi albo strukturze modelu, czyli relacjom, miarom i rolom zabezpieczeń. Dokumentacja Microsoft zwraca uwagę, że kolumnę łatwiej dodać później, niż usunąć, bo usunięcie potrafi zepsuć raport.
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...