Dlaczego kolumny obliczeniowe w Power BI psują wydajność raportów i zwiększają zużycie pamięci modelu
By Mirko Peters ·
Sprawdź, dlaczego nadmierne używanie kolumn obliczeniowych w Power BI zwiększa zużycie pamięci modelu i pogarsza wydajność raportów. Dowiedz się, jak zoptymalizować architekturę modelu danych.
Automatically translated with AI from the original post. Read the English original

Niewłaściwe używanie kolumn obliczeniowych w Power BI może po cichu zwiększać zużycie pamięci modelu danych i spowalniać renderowanie raportów. W przeciwieństwie do dynamicznych miar kolumny obliczeniowe są wyliczane i zapisywane dla każdego wiersza podczas odświeżania danych, zużywając cenną pamięć RAM i zwiększając obciążenie przetwarzania w architekturze obszaru roboczego.
Najważniejsze wnioski
- Kolumny obliczeniowe wyliczają wartości wiersz po wierszu podczas odświeżania danych i trwale przechowują je w pamięci.
- Nadmierne używanie kolumn obliczeniowych znacząco pogarsza współczynniki kompresji silnika VertiPaq, prowadząc do ogromnego wzrostu rozmiaru pliku.
- Kontekst wiersza powoduje, że obliczenia są wykonywane statycznie, całkowicie ignorując wybory filtrów użytkownika w elementach wizualnych.
- Modele danych z nadmierną liczbą kolumn trudno skalować, zwłaszcza po włączeniu ich do dużych środowisk Microsoft Fabric.
- Przeniesienie logiki z kolumn wymagających dużo miejsca do miar obliczanych w czasie zapytania oszczędza pamięć RAM systemu i optymalizuje wydajność raportów.
Ukryty koszt pamięci obliczeń wiersz po wierszu
Podczas tworzenia nowego raportu w Power BI łatwo wpaść w nawyk stosowania kolumn obliczeniowych dla każdej nowej wartości, którą chcesz wyświetlić. Jeśli potrzebujesz marży zysku, połączonego pełnego imienia i nazwiska albo kategorii dla wartości sprzedaży, dodanie kolumny w tabeli wydaje się intuicyjne. W końcu wyniki widać od razu w widoku danych, dokładnie tak jak w arkuszu Excel.
Power BI to jednak silnik analityczny, a nie arkusz kalkulacyjny. Za każdym razem, gdy tworzysz kolumnę obliczeniową, instruujesz silnik bazy danych VertiPaq, aby obliczył tę wartość dla każdego pojedynczego wiersza tabeli podczas odświeżania danych. Jeśli Twoja tabela sprzedaży ma pięć milionów wierszy, nowa kolumna obliczeniowa dodaje do modelu semantycznego pięć milionów odrębnych wpisów.
Co gorsza, kolumny obliczeniowe zakłócają algorytmy kompresji silnika. VertiPaq opiera się na kolumnach o niskiej kardynalności, czyli zawierających powtarzające się, zduplikowane wartości, aby efektywnie kompresować dane. Unikatowa kolumna obliczeniowa często niszczy tę efektywność, mnożąc ilość pamięci RAM potrzebnej do utrzymania modelu w pamięci. Wraz ze wzrostem modelu ten rozrost pamięci może szybko przekroczyć limity pojemności obszaru roboczego w chmurze Microsoft.
Jak statyczny kontekst ogranicza elastyczność raportowania
Poza zużyciem pamięci kolumny obliczeniowe wprowadzają istotne ograniczenia funkcjonalne ze względu na sposób obsługi kontekstu obliczeniowego. Kolumna obliczeniowa działa ściśle w kontekście wiersza. Oblicza bieżące wartości wiersza niezależnie od interakcji użytkownika, filtrów wycinkowych czy wzajemnego filtrowania wyborów na kanwie raportu.
Jeśli utworzysz kolumnę obliczeniową oznaczającą klientów o wysokiej wartości na podstawie stałego progu, ta klasyfikacja zostaje zapisana w warstwie magazynowania. Gdy użytkownik później zmieni filtr wycinkowy, aby zobaczyć dane według regionu, albo zmieni zakres dat, kolumna obliczeniowa pozostaje na to obojętna. Nie może dynamicznie dostosowywać się do zmieniających się stanów agregacji, ponieważ jej wartość została już obliczona i zapisana godziny temu podczas ostatniego odświeżenia.
Ta sztywność kontrastuje wyraźnie z miarami, które obliczają wyniki w locie, w oparciu wyłącznie o kontekst filtrowania zastosowany przez użytkownika w danym momencie. Gdy użytkownik wchodzi w interakcję z wizualizacją, miara jest ponownie przeliczana, dając precyzyjne, uwzględniające kontekst wnioski, podczas gdy kolumna obliczeniowa po prostu odtwarza statyczne dane przechowywane w pamięci RAM.
Projektowanie szczuplejszych modeli dla Microsoft Fabric i Azure
Raportowanie w chmurze w przedsiębiorstwach wymaga wysokiej wydajności, zwłaszcza przy skalowaniu w ramach Microsoft Fabric, Azure i złożonych zasobów danych Microsoft 365. Przerośnięte modele semantyczne pochłaniają zasoby infrastruktury, spowalniają czas odpowiedzi zapytań i frustrują użytkowników biznesowych, którzy czekają na załadowanie pulpitów.
Aby raporty działały z najwyższą szybkością, ogranicz kolumny obliczeniowe wyłącznie do sytuacji, w których wartości na poziomie wiersza są rzeczywiście niezbędne. Na przykład kolumnę obliczeniową warto zastosować, gdy trzeba utworzyć klucz relacji między tabelami na podstawie wielu parametrów lub gdy wartość musi zostać użyta w narzędziu do filtrowania (kontrolce wycinka) albo w regule zabezpieczeń na poziomie wiersza (RLS), gdzie miary są niedozwolone.
We wszystkich pozostałych obliczeniach analitycznych — takich jak sumy, średnie, wskaźniki i agregacje warunkowe — przenieś logikę do miar. Miary nie zajmują miejsca w magazynie, ponieważ nie utrwalają wartości w modelu. Zamiast tego istnieją w pamięci wyłącznie jako kod i są wykonywane tylko wtedy, gdy wizualizacja żąda danych. Takie podejście oszczędza pamięć RAM, maksymalizuje kompresję i sprawia, że infrastruktura chmurowa działa płynnie.
Podsumowanie
Zrozumienie fundamentalnych różnic między przechowywaniem danych na poziomie wiersza a dynamicznym wykonywaniem zapytań jest kluczowe dla każdego, kto buduje skalowalne rozwiązania analityczne. Ograniczając niepotrzebne kolumny obliczeniowe i stawiając na moc dynamicznych miar, możesz znacząco poprawić szybkość raportów i zmniejszyć zużycie pamięci.
Aby zgłębić ten temat i poznać w pełni zrozumiałe, wolne od żargonu omówienie tego, jak silnik obsługuje Twoje formuły, posłuchaj całego odcinka. Wyprzedzaj strategię analityki w chmurze, śledząc kolejne eksperckie wskazówki w M365 FM Podcast.
Często zadawane pytania
Dlaczego kolumny obliczeniowe zużywają tak dużo pamięci w Power BI?
Kolumny obliczeniowe są wyliczane dla każdego wiersza podczas odświeżania danych i trwale przechowywane w pamięci RAM modelu. Uniemożliwia to silnikowi VertiPaq skuteczną kompresję danych, co szybko prowadzi do rozrostu modelu.
Czy miary zajmują miejsce w modelu semantycznym Power BI?
Nie, miary nie zajmują miejsca w magazynie. Są przechowywane jedynie jako definicje formuł w metadanych i obliczane dynamicznie dopiero wtedy, gdy wizualizacja lub interakcja użytkownika wymaga wyniku.
Kiedy właściwie warto użyć kolumny obliczeniowej?
Kolumny obliczeniowe należy zarezerwować dla konkretnych sytuacji, w których kontekst wiersza jest niezbędny, na przykład do tworzenia kluczy złożonych dla relacji, stosowania reguł zabezpieczeń na poziomie wiersza (RLS) lub zasilania elementów, które muszą pojawiać się jako statyczne wartości kontrolki wycinka.
Jak kolumny obliczeniowe wpływają na wydajność renderowania raportów?
Nadmierna liczba kolumn obliczeniowych zwiększa rozmiar modelu semantycznego i pogarsza kompresję danych. Większe modele wymagają więcej pamięci i mocy obliczeniowej, co ostatecznie spowalnia wykonywanie zapytań i czas ładowania raportów w całej przestrzeni roboczej.