Blog JSystems - uwalniamy wiedzę!

Szukaj

Power BI - Wydajność modelu i raportu

Odświeżanie w Power BI Desktop trwa bardzo długo - zapytania liczone wiele razy

W skrócie

  • Gdy odświeżanie w Power BI Desktop trwa długo, częstą przyczyną są zapytania liczone wiele razy: każde zapytanie z odwołaniem wykonuje od nowa kroki zapytania bazowego i sięga do jego źródła.
  • Według dokumentacji Microsoft Power Query nie wykonuje zapytania bazowego raz dla wszystkich odwołań, a Table.Buffer działa tylko w ramach jednego wykonania. Kolumny obliczeniowe liczą się jeszcze po wczytaniu tabel.
  • Zmierz zapytania diagnostyką, sprawdź Zależności zapytań, ciężkie zapytanie bazowe zamień na przepływ danych, widok w bazie albo tabelę obliczeniową i sprawdź ustawienie ładowania równoległego.

Porządny podział pracy w Power Query potrafi wydłużyć odświeżanie: jedno zapytanie bazowe czyści dane, a kilka zapytań z odwołaniem buduje z niego tabele modelu. Dane pozornie czyta się raz, a odświeżanie w Power BI Desktop trwa długo. Na przykładzie zapytań Nordvelli wyjaśniamy, skąd ta różnica, jak ją sprawdzić i co poprawić.

Jak to wygląda w praktyce

Kliknięcie Odśwież otwiera okno postępu, w którym tabele wczytują się dłużej, niż wynikałoby z czasu podglądu pojedynczych zapytań w edytorze Power Query. Baza danych albo usługa sieciowa dostaje przy jednym odświeżeniu kilka takich samych zapytań, a plik na dysku sieciowym jest czytany kilka razy. W modelu Nordvelli zapytanie FaktSprzedaz wczytuje arkusz i uruchamia skrypt Python dla 108 675 wierszy. Według lekcji o wydajności sam podgląd tego zapytania wczytuje się około minuty, więc każde dodatkowe wykonanie jego kroków jest kosztowne.

Dlaczego tak się dzieje

Według dokumentacji Microsoft zapytanie z odwołaniem działa tak, jakby kroki zapytania bazowego były wklejone na jego początek. Gdy zapytanie bazowe ma wyłączone ładowanie, a trzy inne się do niego odwołują i ładują do modelu, Power Query wykonuje je trzy razy osobno, więc zapytanie bazowe liczy się trzy razy. Table.Buffer w zapytaniu bazowym tego nie zmienia, bo bufor żyje tylko w czasie jednego wykonania, a każde zapytanie z odwołaniem buforuje tabelę od nowa, co może nawet pogorszyć wydajność. Power Query ma pamięć podręczną, ale dokumentacja zastrzega, że i tak może pobrać dane ze źródła więcej niż raz. Różnicę między odwołaniem a duplikatem opisujemy w poście o odwołaniu i duplikacie zapytania.

Podobnie działają zapytania z tym samym źródłem. W modelu Nordvelli dziewięć zapytań zaczyna się od Excel.Workbook(File.Contents(SciezkaPliku), null, true), więc każde z nich sięga po skoroszyt Nordvella_dane.xlsx we własnym wykonaniu. Po wczytaniu tabel silnik liczy jeszcze kolumny i tabele obliczeniowe, które według dokumentacji powstają dopiero po załadowaniu wszystkich tabel z Power Query.

Co zrobić krok po kroku

  1. Zmierz, które zapytanie trwa najdłużej. W edytorze Power Query na karcie Narzędzia kliknij Rozpocznij diagnostykę, odśwież podgląd zapytania przyciskiem Odśwież podgląd, a potem kliknij Zatrzymaj diagnostykę. Power Query doda zapytania z wynikami, w których widać czas każdej operacji. Jeden krok sprawdzisz poleceniem Diagnozuj krok. Od czego zacząć przy wolnym Power Query w ogóle, opisujemy w poście o wolnym odświeżaniu Power Query.
  2. Zobacz, które zapytania korzystają z tego samego zapytania bazowego. Na karcie Widok edytora kliknij Zależności zapytań. Zapytanie bazowe z kilkoma strzałkami do zapytań ładowanych do modelu to kandydat do przebudowy, zwłaszcza gdy czyta bazę, usługę sieciową albo duży plik.
  3. Przenieś ciężkie zapytanie bazowe tam, gdzie liczy się raz. Dokumentacja Microsoft zaleca przepływ danych Dataflow Gen2 albo, dla użytkowników Pro i PPU bez dostępu do Fabric, przepływ danych w starszej wersji. Zapytania z odwołaniem czytają wtedy gotową tabelę zapisaną w usłudze, a logika zapytania bazowego wykonuje się raz. Przy bazie danych logikę czyszczenia możesz też przenieść do widoku SQL. Zapytania nadal trafią do bazy osobno, ale każde dostanie gotowe dane bez powtarzania kroków w Power Query.
  4. Tabele, które powstają z już wczytanej tabeli, buduj w DAX zamiast kolejnego zapytania. W Nordvelli słownik powodów zwrotów DimPowodyZwrotow to tabela obliczeniowa z formułą niżej, więc nie czyta pliku drugi raz. Ma 8 wierszy i liczy się po wczytaniu FaktZwroty.
    DimPowodyZwrotow = DISTINCT( FaktZwroty[Powod] )
  5. Sprawdź ładowanie równoległe: Plik > Opcje i ustawienia > Opcje, sekcja Bieżący plik > Ładowanie danych, grupa Równoległe ładowanie tabel. Według dokumentacji Microsoft ustawienie domyślne pozwala silnikowi na 6 zadań naraz, a Jeden (wyłącz ładowanie równoległe) wczytuje tabele po kolei. Gdy ktoś wybrał tę wartość, żeby ominąć błąd pamięci, odświeżanie się wydłuży, o czym piszemy w poście o braku pamięci przy odświeżaniu. Więcej zadań naraz może jednak obciążyć serwer źródła.
  6. Odchudź kroki, które przetwarzają całą tabelę. Skrypt Python w FaktSprzedaz dostaje całą tabelę, kopiuje ją i dopisuje Sezon z miesiąca oraz CzyAnomalia z reguły trzech odchyleń standardowych. Sezon zależy tylko od miesiąca, więc wystarczy kolumna w DimKalendarz (1 826 wierszy) zamiast obliczenia na 108 675 transakcjach. Według dokumentacji Microsoft skrypt Python, który działa dłużej niż 30 minut, jest przerywany. Jak działa krok Python w Power Query, pokazujemy w lekcji o Pythonie i R w Power BI.

Jak sprawdzić, że problem zniknął

Po przebudowie powtórz diagnostykę i porównaj czasy zapytań, a potem całe odświeżenie przyciskiem Odśwież na karcie Narzędzia główne, najlepiej dwa razy przed zmianą i dwa razy po niej. Gdy źródłem jest baza, administrator może potwierdzić w jej dzienniku, że zapytanie przychodzi raz zamiast kilku razy. Porównaj też liczbę wierszy każdej tabeli przed zmianą i po niej, na przykład 108 675 w FaktSprzedaz, żeby przebudowa nie zgubiła danych.

Przed dodaniem kolejnego zapytania z odwołaniem do ciężkiego zapytania bazowego sprawdź, czy ta tabela nie może powstać z gotowej tabeli modelu albo z przepływu danych.

Źródła i sposób sprawdzenia

  • Microsoft Learn: Referencing Power Query queries (źródło)
  • Microsoft Learn: Evaluation configuration settings for Desktop (Maximum number of concurrent jobs) (źródło)
  • Microsoft Learn: Query diagnostics (Power Query) (źródło)
  • Microsoft Learn: Run Python scripts in Power BI Desktop (źródło)
  • Sprawdzone zapytaniami DAX na modelu Nordvelli: teksty zapytań w INFO.PARTITIONS (dziewięć z tym samym plikiem, jedno ze skryptem Python) i tabela obliczeniowa DimPowodyZwrotow.

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

Dlaczego odświeżanie w Power BI Desktop trwa tak długo?
Częstą przyczyną są te same kroki wykonywane kilka razy: każde zapytanie z odwołaniem uruchamia od nowa kroki zapytania bazowego, a kilka zapytań z tym samym źródłem czyta je osobno. Dochodzą kroki przetwarzające całą tabelę, na przykład skrypty Python, oraz kolumny i tabele obliczeniowe liczone po wczytaniu danych.
Czy odwołanie do zapytania w Power Query czyta źródło tylko raz?
Nie. Według dokumentacji Microsoft Power Query wykonuje każde zapytanie z odwołaniem osobno, tak jakby kroki zapytania bazowego były wklejone na jego początek. Przy trzech zapytaniach ładowanych do modelu zapytanie bazowe liczy się trzy razy. Odwołanie porządkuje logikę, ale nie oszczędza odczytów.
Czy Table.Buffer przyspiesza zapytania z odwołaniem?
Nie usuwa dodatkowych odczytów. Bufor działa tylko w ramach jednego wykonania zapytania, więc każde zapytanie z odwołaniem buforuje tabelę od nowa, co może nawet pogorszyć wydajność. Lepszym rozwiązaniem jest przepływ danych, widok w bazie albo tabela obliczeniowa zbudowana z już wczytanej tabeli.
Jak sprawdzić, które zapytanie Power Query odświeża się najdłużej?
W edytorze Power Query na karcie Narzędzia kliknij Rozpocznij diagnostykę, odśwież podgląd i kliknij Zatrzymaj diagnostykę. Power Query doda zapytania z czasem każdej operacji. Do sprawdzenia jednego kroku służy polecenie Diagnozuj krok.

Komentarze (0)

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

Brak komentarzy...