DirectQuery w Power BI działa wolno - co sprawdzić
Udostępnij na:
Spis treści
Power BI - Wydajność modelu i raportu
DirectQuery w Power BI działa wolno - co sprawdzić
W skrócie
Gdy Power BI w trybie DirectQuery jest wolny, każda wizualizacja i każde kliknięcie czeka na odpowiedź bazy danych, bo model nie przechowuje danych, tylko wysyła zapytania do źródła.
Czas zabierają zwykle zapytania w bazie bez indeksów, kroki Power Query wbudowane w SQL, wiele wizualizacji na stronie czekających na wolne połączenie i wymiary w Imporcie łączone z faktami w DirectQuery.
Zmierz wiersz Zapytanie bezpośrednie w Analizatorze wydajności, popraw źródło, włącz redukcję zapytań, ustaw wymiary na Podwójne i rozważ agregaty albo powrót do Importu.
Raport w DirectQuery miał dawać świeże dane prosto z bazy, a po publikacji odbiorcy piszą, że każdy fragmentator reaguje po kilku sekundach. Pokazujemy, co w takim wolnym raporcie Power BI sprawdzić po kolei: pomiar, bazę, zapytania Power Query, ustawienia raportu i model, z pomiarami z modelu złożonego Nordvelli z naszego kursu.
Jak to wygląda w praktyce
Wizualizacje ładują się po kilka sekund, kliknięcie we fragmentatorze, czyli filtrze na stronie, odświeża stronę z opóźnieniem, a administrator bazy widzi serię zapytań przy każdym otwarciu raportu. W Analizatorze wydajności wizualizacje z tabel DirectQuery mają dodatkowy wiersz Zapytanie bezpośrednie, czyli czas zapytania do źródła. Pojawia się on tylko wtedy, gdy Power BI musiał wysłać zapytanie do bazy. W lekcji o modelach złożonych wykres sprzedaży Nordvelli według miast, z tabelą faktów w DirectQuery na MS SQL Server, trwał 342 ms, w tym Zapytanie DAX 185 ms i Zapytanie bezpośrednie 120 ms.
Według dokumentacji Microsoft typowe wizualizacje powinny odświeżać się w czasie poniżej 5 sekund, a powyżej 30 sekund raport staje się trudny w użyciu. Zbyt duży wynik pośredni kończy się błędem „Zestaw wyników zapytania skierowanego do zewnętrznego źródła danych przekracza dozwoloną maksymalną liczbę wierszy „1000000”.” (w angielskiej wersji: „The resultset of a query to external data source has exceeded the maximum allowed size of '1000000' rows.”), bo wynik pośredni może mieć najwyżej milion wierszy. Pojemności Premium pozwalają według dokumentacji ten limit podnieść.
Wykres sprzedaży Nordvelli według miast z tabelą faktów w DirectQuery, przed podpięciem agregatu: 342 ms, w tym Zapytanie DAX 185 ms i Zapytanie bezpośrednie 120 ms.
Tabela w DirectQuery nie ma kopii danych w modelu. Według dokumentacji Microsoft każda wizualizacja wysyła jedno albo więcej zapytań do źródła, a czas odświeżenia zależy w całości od wydajności bazy oraz sieci i bramy. Strona z wieloma wizualizacjami wysyła wiele zapytań naraz, a liczbę równoległych zapytań ogranicza środowisko i ustawienie Maksymalna liczba połączeń na źródło danych, więc część wizualizacji czeka w kolejce. Każde wyróżnianie krzyżowe i filtrowanie krzyżowe to kolejne zapytania.
Spowalniają też kroki Power Query, które silnik wbudowuje w zapytanie SQL, relacje na kolumnach obliczeniowych i filtrowanie dwukierunkowe. W modelu złożonym dochodzi łączenie trybów: gdy fakt jest w DirectQuery, a wymiar w Imporcie, Power BI musi wyciągnąć z pamięci listę wartości wymiaru i wysłać ją do bazy jako warunek zapytania. Tryb Podwójne (w dokumentacji angielskiej Dual) pozwala bazie zrobić złączenie u siebie, jednym zapytaniem.
Co zrobić krok po kroku
Zmierz stronę Analizatorem wydajności (Optymalizowanie > Analizator wydajności, Rozpocznij nagrywanie, Odśwież wizualizacje) i porównaj wiersz Zapytanie bezpośrednie z Zapytanie DAX. Przycisk Kopiuj zapytanie przy tabelach DirectQuery według dokumentacji Microsoft kopiuje także zapytanie przetłumaczone na SQL. Przekaż je administratorowi bazy. Jak czytać pozostałe składowe czasu, pokazujemy w lekcji o optymalizacji wydajności modelu.
Popraw źródło. Dokumentacja Microsoft zaleca indeksy pod filtrowanie i grupowanie z wizualizacji, aktualne statystyki kolumn używanych w filtrach i złączeniach, rezygnację z relacji na kolumnach typu GUID (unique identifier) i widoki indeksowane, które sumują fakty do wyższego poziomu. Gdy każdy wiersz faktu ma pasujący wiersz wymiaru, w oknie relacji zaznacz Przyjmowanie integralności referencyjnej, a Power BI użyje w zapytaniu złączenia wewnętrznego (INNER JOIN) zamiast zewnętrznego. Opcja działa tylko w DirectQuery, w modelu Import jest wyszarzona.
Uprość zapytania Power Query. Najlepiej, gdy każde zapytanie odpowiada jednej tabeli albo jednemu widokowi w bazie. Kliknij prawym przyciskiem ostatni krok i wybierz Wyświetl zapytanie natywne, żeby zobaczyć SQL. Dokumentacja odradza też filtr dat względnych w Power Query, bo daje nieefektywne zapytanie. Kroki, których DirectQuery w ogóle nie przyjmuje, opisujemy w poście o krokach nieobsługiwanych w trybie DirectQuery.
Ogranicz liczbę zapytań z raportu. Na karcie Optymalizowanie kliknij Ustawienia wstępne optymalizacji i wybierz Redukcja zapytania: Power BI wyłączy wyróżnianie krzyżowe i filtrowanie krzyżowe oraz doda przycisk Zastosuj do filtrów. Według dokumentacji Microsoft to ustawienie wstępne sprawdza się przede wszystkim przy połączeniach DirectQuery. Zmiany w filtrach zadziałają dopiero po kliknięciu tego przycisku, więc kilka zmian wysyła zapytania raz. Pozycja Dostosuj otwiera stronę Redukcja zapytania w opcjach, gdzie wybierzesz osobno na przykład Dodaj przyciski Zastosuj do wszystkich filtrów podstawowych, aby stosować zmiany, gdy wszystko będzie gotowe. Podczas edycji raportu włącz Wstrzymaj wizualizacje, żeby zmiany w polach nie wysyłały zapytań.
Ogranicz wizualizacje na stronie. Według dokumentacji im więcej wizualizacji, tym większa szansa, że odświeżą się jedna po drugiej. Szczegóły przenieś na stronę przechodzenia do szczegółów. Wartość Maksymalna liczba połączeń na źródło danych w opcjach podnoś ostrożnie, bo więcej połączeń to większe obciążenie bazy i nie ma gwarancji poprawy.
Popraw model. Wymiary połączone z tabelą faktów w DirectQuery ustaw na Podwójne: widok modelu, tabela, panel Właściwości, sekcja Zaawansowane, lista Tryb przechowywania. Dla najczęstszych pytań zbuduj tabelę agregatów w Imporcie, a gdy agregat nie przyspiesza, sprawdź przyczyny z posta o nieużywanych agregacjach. Gdy świeżość co do minuty nie jest potrzebna, wróć do Importu, który dokumentacja Microsoft zaleca jako tryb domyślny, o czym piszemy w poście o wyborze między Import a DirectQuery.
Jak sprawdzić, że problem zniknął
Mierz zawsze w tych samych warunkach. W Analizatorze kliknij Wyczyść, odśwież wizualizacje dwa razy i porównuj drugie odświeżenie z drugim, bo pierwsze po otwarciu pliku zawiera nawiązanie połączenia, a kolejne korzystają z pamięci podręcznej. W modelu Nordvelli po podpięciu agregatu ten sam wykres miast trwał 144 ms zamiast 342 ms, zapytanie DAX spadło ze 185 do 30 ms, a wiersz Zapytanie bezpośrednie zniknął.
Na co dzień buduj nowe wizualizacje od filtrów. Dokumentacja Microsoft zwraca uwagę, że każdy krok budowy wizualizacji wysyła zapytanie, więc filtr nałożony przed dodaniem pól oszczędza bazie zbędnej pracy.
Źródła i sposób sprawdzenia
Microsoft Learn: DirectQuery model guidance in Power BI Desktop (źródło)
Microsoft Learn: DirectQuery in Power BI (limitations and performance) (źródło)
Microsoft Learn: Optimize ribbon in Power BI Desktop (źródło)
Microsoft Learn: Use Performance Analyzer to examine report performance (źródło)
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.
Dlaczego raport Power BI w DirectQuery działa wolno?
Model nie przechowuje danych, więc każda wizualizacja i każde kliknięcie wysyła zapytanie do bazy i czeka na jej odpowiedź. Czas zależy od wydajności źródła i sieci, od liczby wizualizacji na stronie oraz od kroków Power Query wbudowanych w SQL. Pomagają indeksy w bazie, redukcja zapytań, tryb Podwójne dla wymiarów i agregaty.
Jak sprawdzić, które wizualizacje wysyłają zapytania do bazy w DirectQuery?
W Analizatorze wydajności rozwiń wizualizację. Wiersz Zapytanie bezpośrednie pojawia się tylko wtedy, gdy Power BI musiał wysłać zapytanie do źródła, i pokazuje jego czas. Przycisk Kopiuj zapytanie przy tabeli DirectQuery kopiuje zapytanie DAX razem z przetłumaczonym zapytaniem SQL.
Co daje redukcja zapytań w Power BI?
Ustawienie wstępne Redukcja zapytania wyłącza wyróżnianie krzyżowe i filtrowanie krzyżowe i dodaje przycisk Zastosuj do filtrów, więc zmiana kilku filtrów wysyła zapytania raz, a nie po każdym kliknięciu. Według dokumentacji Microsoft to ustawienie sprawdza się przy połączeniach DirectQuery. Znajdziesz je na karcie Optymalizowanie, pod przyciskiem Ustawienia wstępne optymalizacji.
Ile wierszy może zwrócić zapytanie DirectQuery w Power BI?
Według dokumentacji Microsoft wynik pośredni zapytania DirectQuery może mieć najwyżej milion wierszy, a większy kończy się błędem o przekroczeniu dozwolonej maksymalnej liczby wierszy. Pojemności Premium pozwalają ten limit podnieść. Zwykle lepiej jednak zmniejszyć wynik filtrem albo agregatem.
Komentarze (0)
Brak komentarzy...