Blog JSystems - uwalniamy wiedzę!

Szukaj

Power BI - Wydajność modelu i raportu

Raport Power BI wolno się ładuje - jak znaleźć winną wizualizację

W skrócie

  • Gdy raport Power BI wolno się ładuje, winna bywa jedna wizualizacja albo zbyt wiele wizualizacji na stronie, a wolny raport naprawiany bez pomiaru często poprawia się w złym miejscu.
  • Analizator wydajności dzieli czas każdej wizualizacji na zapytanie DAX, wyświetlanie elementu wizualnego i pozycję Inne, czyli czekanie w kolejce na pozostałe elementy strony.
  • Mierzysz stronę, rozwijasz najwolniejszą pozycję i poprawiasz składową z największą liczbą milisekund: miarę, liczbę punktów danych albo liczbę wizualizacji na stronie.

Karta z prostą miarą potrafi w Analizatorze wydajności pokazać ponad 300 ms, choć jej zapytanie DAX liczy się w kilka milisekund. Przy wolnym raporcie Power BI, którego strona po dołożeniu kolejnych wykresów i miar otwiera się kilka sekund, zgadywanie winnej miary nie wystarcza. Analizator wydajności wskazuje winną wizualizację i rozkłada jej czas na trzy składowe, a każda z nich wymaga innej poprawki. Przykłady pochodzą z raportu Nordvelli, na którym pracujemy w kursie.

Jak to wygląda w praktyce

Strona raportu otwiera się z opóźnieniem, wizualizacje pojawiają się po kolei, a każde kliknięcie we fragmentatorze, czyli filtrze na kanwie, znów uruchamia przeliczenie. Bez pomiaru nie wiadomo, czy winna jest jedna miara, czy cała strona. W lekcji o wydajności zmierzyliśmy stronę Przegląd raportu Nordvelli z jedenastoma wizualizacjami. Najdłużej trwały dwie karty (350 i 336 ms) i tabela sklepów (338 ms), ale w rozwiniętej pierwszej karcie i w tabeli samo Zapytanie DAX zajęło tylko 6 i 9 ms. Resztę czasu wypełniły Wyświetlanie elementu wizualnego (82 i 94 ms) oraz Inne (262 i 235 ms). Żadna miara nie była wolna, czas zabierała kolejka wizualizacji czekających na siebie nawzajem.

Według dokumentacji Microsoft czasy w Analizatorze obejmują także czekanie w kolejce, bo większość operacji kanwy wykonuje się po kolei w jednym wątku interfejsu. Dlatego karta z prostą miarą może pokazać ponad 300 ms, choć jej zapytanie liczy się w kilka milisekund.

Analizator wydajności Power BI: rozwinięte wiersze karty i tabeli z Zapytaniem DAX, wyświetlaniem i pozycją Inne
Rozbicie karty i tabeli na stronie Przegląd: zapytanie DAX 6 i 9 ms, wyświetlanie elementu wizualnego 82 i 94 ms, Inne 262 i 235 ms. Czas zabiera kolejka jedenastu wizualizacji.

Dlaczego tak się dzieje

Czas wizualizacji składa się z kilku części i każda ma inną przyczynę. Polski interfejs Analizatora opisuje je tak: Zapytanie DAX to odstęp czasu między wysłaniem zapytania przez wizualizację a zwróceniem wyniku, Wyświetlanie elementu wizualnego to czas renderowania wizualizacji, a Inne to czas oczekiwania w kolejce lub na zakończenie przetwarzania elementów przez system. Przy tabelach w trybie DirectQuery dochodzi wiersz Zapytanie bezpośrednie, czyli czas zapytania do źródła.

Wysokie zapytanie DAX wskazuje miarę, relację albo zbyt dużą tabelę, na przykład miarę z FILTER na całej tabeli faktów, którą opisujemy w poście o wolnej mierze z FILTER na całej tabeli. Wysokie wyświetlanie oznacza dużo pracy przy rysowaniu: wiele punktów danych albo, według opisu w samym Analizatorze, wywołania zewnętrzne, takie jak kodowanie geograficzne lub pobieranie zewnętrznych obrazów. Na modelu Nordvelli macierz sklep, produkt i dzień ma 93 873 niepuste komórki, macierz sklep i miesiąc 795, a sklep i kategoria tylko 60. Wysoka pozycja Inne oznacza czekanie na pozostałe wizualizacje strony, więc pomaga zmniejszenie ich liczby, bo każda wysyła własne zapytanie i czeka na swoją kolej.

Co zrobić krok po kroku

  1. Otwórz wolną stronę i na karcie Optymalizowanie kliknij Analizator wydajności (ten sam przycisk jest na karcie Widok). W panelu po prawej kliknij Rozpocznij nagrywanie, a potem Odśwież wizualizacje. Analizator przeliczy każdą wizualizację od nowa i wypisze ją z czasem w milisekundach.
  2. Znajdź najwolniejszą pozycję w kolumnie Czas trwania. Lista idzie w kolejności wizualizacji na stronie, a nie według czasu, więc przejrzyj ją całą. Kliknij plus przy nazwie wizualizacji, żeby zobaczyć rozbicie na Zapytanie DAX, Wyświetlanie elementu wizualnego i Inne.
  3. Gdy przeważa zapytanie DAX, kliknij Kopiuj zapytanie przy tej wizualizacji, otwórz Widok zapytań w języku DAX i wklej tekst do edytora. Przy tabelach DirectQuery skopiowany tekst zawiera też zapytanie przetłumaczone na SQL. Według dokumentacji Microsoft zapytanie wizualizacji jest bardziej rozbudowane, niż potrzeba, więc do testu uprość je do samej tabeli wyników. Takie zapytanie dla tabeli sklepów Nordvelli zwraca 15 wierszy, od Nordvella Online ze 141 772 848,59 zł sprzedaży i marżą 13,90% do Nordvella Białystok z 12 259 226,35 zł. Potem podmieniaj miary na tańsze wersje, a czas silnika porównuj w bezpłatnym DAX Studio, w widoku Server Timings.
    EVALUATE
    SUMMARIZECOLUMNS(
        DimSklepy[Nazwa],
        "Łączna sprzedaż", [Łączna sprzedaż],
        "Marża %", [Marża %]
    )
    ORDER BY [Łączna sprzedaż] DESC
  4. Gdy przeważa wyświetlanie, zmniejsz liczbę punktów danych. Macierz sklep, produkt i dzień z 93 873 komórkami przenieś na stronę szczegółów, a na stronie głównej pokaż sklep i miesiąc. Dokumentacja Microsoft przypomina, że im więcej danych pokazuje wizualizacja, tym wolniej się ładuje, i radzi ograniczać duże tabele filtrem, który zostawia tylko N pierwszych pozycji.
  5. Gdy przeważa pozycja Inne, zmniejsz liczbę wizualizacji na stronie. Dokumentacja Microsoft zaleca zostawić na stronie tylko to, co potrzebne, a szczegóły przenieść na strony przechodzenia do szczegółów i etykietki narzędzi. Jak zbudować taką stronę, pokazujemy w lekcji o przechodzeniu do szczegółów i zakładkach. Przy wielu fragmentatorach wstaw przycisk Zastosuj wszystkie fragmentatory (Wstaw > Przyciski), żeby strona przeliczała się raz, po wyborze wszystkich filtrów.
  6. Wizualizacje spoza wbudowanego zestawu, na przykład pobrane z AppSource, sprawdź osobno. Według dokumentacji Microsoft słabo zoptymalizowana wizualizacja niestandardowa może spowolnić cały raport. Zamień ją na chwilę na wbudowany wykres i zmierz stronę jeszcze raz.

Jak sprawdzić, że problem zniknął

Po każdej zmianie kliknij Wyczyść, potem Odśwież wizualizacje i porównaj czasy z pomiarem bazowym. W lekcji o modelach złożonych porównujemy zawsze drugie odświeżenie z drugim, bo Power BI trzyma wyniki ostatnich zapytań w pamięci podręcznej, a pierwsze odświeżenie po otwarciu pliku zawiera jeszcze nawiązanie połączenia. Pomiar zapiszesz przyciskiem Eksportuj, który według dokumentacji tworzy plik .json z zawartością panelu. Taki plik przyda się przy kolejnej rozbudowie raportu jako punkt odniesienia.

Mierz stronę po dodaniu każdej nowej miary albo kilku wizualizacji. Gdy raport korzysta z DirectQuery, wiersz Zapytanie bezpośrednie pokaże czas bazy, a co z nim zrobić, opisujemy w poście o wolnym DirectQuery.

Źródła i sposób sprawdzenia

  • Microsoft Learn: Use Performance Analyzer to examine report performance (źródło)
  • Microsoft Learn: Optimization guide for Power BI (Limit visuals on report pages) (źródło)
  • Microsoft Learn: Optimize ribbon in Power BI Desktop (źródło)
  • Sprawdzone zapytaniami DAX na modelu Nordvelli: tabela sklepów z SUMMARIZECOLUMNS i liczba komórek macierzy na trzech poziomach szczegółowości.

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

Najczęściej zadawane pytania

Jak sprawdzić, która wizualizacja spowalnia raport Power BI?
Na karcie Optymalizowanie kliknij Analizator wydajności, potem Rozpocznij nagrywanie i Odśwież wizualizacje. Power BI wypisze każdą wizualizację strony z czasem w milisekundach. Lista idzie w kolejności wizualizacji, a nie według czasu, więc najwolniejszą znajdziesz po liczbach w kolumnie Czas trwania.
Co oznacza pozycja Inne w Analizatorze wydajności Power BI?
To czas oczekiwania w kolejce lub na zakończenie przetwarzania innych elementów strony. Większość operacji kanwy wykonuje się po kolei w jednym wątku, więc przy wielu wizualizacjach ta pozycja rośnie. Na stronie z jedenastoma wizualizacjami w raporcie Nordvelli karta miała 262 ms w pozycji Inne i tylko 6 ms zapytania DAX.
Jak skopiować zapytanie DAX wizualizacji w Power BI?
W Analizatorze wydajności przy wizualizacji kliknij Kopiuj zapytanie i wklej tekst w widoku zapytań w języku DAX albo w bezpłatnym DAX Studio, gdzie widok Server Timings pokaże czas pracy silnika. Przy tabelach w trybie DirectQuery skopiowany tekst zawiera też zapytanie przetłumaczone na SQL.
Ile wizualizacji można mieć na jednej stronie raportu Power BI?
Dokumentacja Microsoft nie podaje jednej liczby. Zaleca zostawić na stronie tylko potrzebne wizualizacje, a szczegóły przenieść na strony przechodzenia do szczegółów i etykietki narzędzi. Każda wizualizacja wysyła własne zapytanie, więc przy wielu elementach rośnie czas oczekiwania w kolejce, a granicę dla swojego raportu wyznaczysz pomiarem w Analizatorze wydajności.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...