Blog JSystems - uwalniamy wiedzę!

Szukaj

W skrócieQuery folding, czyli składanie zapytań, sprawia, że filtry i grupowanie wykonuje serwer bazy danych, a do Power BI trafia mały wynik. Sprawdzamy składanie poleceniem Wyświetl zapytanie natywne, uruchamiamy diagnostykę zapytań i krok po kroku konfigurujemy odświeżanie przyrostowe z parametrami RangeStart i RangeEnd.

Ta lekcja jest częścią bezpłatnego kursu Power Query - czternastu lekcji od pierwszego zapytania w Excelu do przepływu danych w Microsoft Fabric i pracy z Copilotem. To lekcja 11 z 14.

Spis lekcji bezpłatnego kursu Power Query
Poprzednia lekcja: Lekcja 10: Power Query w Power BI Desktop
Następna lekcja: Lekcja 12: Dataflow Gen2 w Microsoft Fabric

Query folding i wydajność zapytań

Query folding, po polsku składanie zapytań, to zdolność Power Query do zamiany kroków w jedno zapytanie w języku źródła. Przy bazie SQL Server filtr, usunięcie kolumn i grupowanie nie są wtedy wykonywane na Twoim komputerze. Power Query składa je w jedno zapytanie SQL, wysyła do serwera i dostaje gotowy, mały wynik. Różnica w szybkości przy dużych tabelach bywa ogromna: zamiast ściągać miliony wierszy przez sieć, pobierasz kilkanaście.

Animowany schemat składania zapytań Power Query: kroki filtrowania, usuwania kolumn i grupowania zamieniają się w zapytanie SQL, a krok indeksu jest liczony lokalnie
Schemat poglądowy na kolejnych krokach z naszego przykładu. Dopóki kroki da się przetłumaczyć na SQL, wykonuje je serwer. Krok, którego SQL nie wyrazi, przerywa składanie i od niego wszystko liczy się lokalnie.

Sprawdź składanie w Power BI Desktop: Wyświetl zapytanie natywne

Na tabeli FaktSprzedaz z SQL Server wykonaliśmy trzy zwykłe kroki: filtr liczb na kolumnie DataID (Większe niż lub równe... 20260101, czyli tylko 2026 rok), usunięcie kolumn PracownikID i FormaPlatnosci oraz Grupowanie według sklepu z sumą wartości netto.

Okno Filtrowanie wierszy w Power BI Desktop: zachowaj wiersze, w których DataID jest większe niż lub równe 20260101
Okno Filtrowanie wierszy z warunkiem jest większe niż lub równe 20260101. Prowadzi do niego menu filtra kolumny DataID, pozycja Filtry liczb.
Okno Grupowanie według w Power BI Desktop: grupowanie po SklepID z sumą kolumny WartoscNetto
Grupowanie według w trybie podstawowym: jedna kolumna grupująca, jedna agregacja.

Teraz kliknij prawym przyciskiem ostatni krok na liście Zastosowane kroki. Jeśli pozycja Wyświetl zapytanie natywne jest aktywna, wszystkie kroki do tego miejsca złożyły się w zapytanie do bazy.

Menu kontekstowe kroku Pogrupowano wiersze w Power BI Desktop z aktywną pozycją Wyświetl zapytanie natywne
Menu kroku Pogrupowano wiersze. Aktywna pozycja Wyświetl zapytanie natywne to sygnał, że składanie działa. W tym samym menu jest Diagnozuj, o którym za chwilę.

Po kliknięciu zobaczysz SQL, który Power Query wygenerował z naszych kroków i wysłał do SQL Server:

Okno Zapytanie natywne w Power BI Desktop z kodem SQL wygenerowanym przez Power Query: select, sum, where DataID, group by SklepID
Okno Zapytanie natywne. Filtr zamienił się w where, usunięcie kolumn w listę kolumn w select, a grupowanie w sum i group by.
select [rows].[SklepID] as [SklepID],
    sum([rows].[WartoscNetto]) as [Suma WartoscNetto]
from
(
    select [_].[SklepID],
        [_].[WartoscNetto]
    from [dbo].[FaktSprzedaz] as [_]
    where [_].[DataID] >= 20260101
) as [rows]
group by [SklepID]

Serwer zwraca 15 wierszy, po jednym na sklep, zamiast 11 669 linii sprzedaży z 2026 roku. Teraz dodaj krok, którego SQL nie umie wyrazić wprost: na karcie Dodaj kolumnę rozwiń Kolumna indeksu i wybierz Od 1. Prawy przycisk na nowym kroku:

Menu kontekstowe kroku Dodano indeks w Power BI Desktop z wyszarzoną pozycją Wyświetl zapytanie natywne
Po dodaniu kolumny indeksu pozycja Wyświetl zapytanie natywne jest wyszarzona. Składanie zakończyło się na grupowaniu, a indeks liczy już Power Query na komputerze.

W tym przykładzie to nie problem, bo indeks dodajemy do 15 wierszy. Problem zaczyna się, gdy krok łamiący składanie stoi na początku zapytania, przed filtrem: wtedy Power Query musi pobrać całą tabelę, żeby ją przefiltrować lokalnie.

Wskaźniki składania w Power Query Online

W Power BI Desktop i w Excelu składanie sprawdzasz poleceniem Wyświetl zapytanie natywne. W Power Query Online (Dataflow Gen2 w Fabric, przepływy danych w usłudze Power BI) przy każdym kroku stoi ikona wskaźnika, a podpowiedź mówi, czy krok zostanie oceniony w źródle danych, czy poza nim. Pokazujemy to w lekcji o Fabric, gdzie przy źródle plikowym każdy krok ma komunikat Ten krok zostanie oceniony poza źródłem danych.

Co składa się do bazy, a co przerywa składanie

Zwykle składa się do źródłaZwykle przerywa składanie
filtrowanie wierszy, w tym filtry datkolumna indeksu
wybieranie i usuwanie kolumn, zmiana nazwscalanie zapytań z dwóch różnych źródeł (baza i plik)
grupowanie z sumą, średnią, liczbą wierszyfunkcje niestandardowe wywoływane dla każdego wiersza
sortowanie, zachowanie pierwszych N wierszyczęść operacji tekstowych i kolumn z przykładów
scalanie i dołączanie tabel z tej samej bazyTable.Buffer, czyli wczytanie tabeli do pamięci
proste kolumny niestandardowe (dodawanie, mnożenie)własna instrukcja SQL w oknie łącznika (bez EnableFolding)

Tabela to reguła ogólna, a nie gwarancja. To, co się składa, zależy od łącznika (SQL Server, Oracle, PostgreSQL mają różne możliwości) i od kolejności kroków. Jedynym pewnym testem jest Wyświetl zapytanie natywne albo wskaźnik przy kroku. Pliki CSV, Excel i foldery nie składają się wcale, bo nie mają silnika, który mógłby wykonać krok.

Dobre praktyki wydajności

  • Filtruj i usuwaj kolumny jako pierwsze kroki. Przy bazach te kroki się złożą, przy plikach przynajmniej zmniejszą ilość danych dla kolejnych kroków.
  • Kroki łamiące składanie przesuwaj na koniec. Indeks, kolumna z przykładów czy scalenie z plikiem mogą działać na już zredukowanych danych.
  • Nie ładuj zapytań pośrednich. W Excelu tylko połączenie, w Power BI odznaczone Włącz ładowanie.
  • Uważaj na źródło czytane wiele razy. Kilka zapytań odwołujących się do tego samego, ciężkiego źródła może je wczytywać osobno. W Fabric pomaga tu przemieszczanie (staging), w Desktop porządne zapytanie bazowe i odwołania.
  • Table.Buffer stosuj świadomie. Wczytuje tabelę do pamięci i potrafi przyspieszyć zapytanie, które wielokrotnie czyta tę samą małą tabelę, ale jednocześnie przerywa składanie.
  • Przy dużych tabelach w Power BI włącz odświeżanie przyrostowe, opisane niżej.

Diagnostyka zapytań

Gdy zapytanie jest wolne i nie wiesz dlaczego, w Power BI Desktop pomoże karta Narzędzia w edytorze Power Query. Diagnozuj krok mierzy wykonanie zaznaczonego kroku, a Rozpocznij diagnostykę i Zatrzymaj diagnostykę nagrywają wszystko, co dzieje się w edytorze między tymi kliknięciami, na przykład odświeżenie podglądu.

Karta Narzędzia w edytorze Power Query w Power BI Desktop z przyciskami Diagnozuj krok, Rozpocznij diagnostykę, Zatrzymaj diagnostykę i Opcje diagnostyczne
Karta Narzędzia (1) z grupami Diagnostyka kroku, Diagnostyka sesji i Opcje diagnostyczne (2). Edytor Power Query w Excelu tej karty nie ma.

Wynik diagnostyki to nowe zapytania w grupie Diagnostyka, nazwane według schematu zapytanie_krok_rodzaj_data_godzina. Zapytanie Detailed zawiera każde zdarzenie z czasem rozpoczęcia i zakończenia, Aggregated podsumowanie, a Counters liczniki zużycia procesora i pamięci. W zapytaniach do bazy kolumna Data Source Query pokazuje dokładny tekst zapytania wysłanego do źródła, co pozwala sprawdzić składanie i znaleźć krok, który zajmuje najwięcej czasu.

Wynik diagnostyki zapytań w Power BI Desktop: grupa Diagnostyka z zapytaniami Detailed, Aggregated i Counters oraz tabela zdarzeń z czasami
Zapytanie FaktSprzedaz_Pogrupowano wiersze_Detailed z ośmioma zdarzeniami diagnozowanego kroku. Nazwy kolumn wyniku diagnostyki (Id, Query, Step, Category, Operation, Start Time) są po angielsku także w polskim interfejsie.

Odświeżanie przyrostowe w Power BI

Przy tabelach z milionami wierszy pełne odświeżanie pobiera za każdym razem całą historię, choć zmieniają się tylko ostatnie dni. Odświeżanie przyrostowe (ang. incremental refresh) dzieli tabelę na partycje według daty i przy kolejnych odświeżeniach pobiera tylko najnowszy okres, a starsze partycje zostawia bez zmian. Zasady ustawiasz w Power BI Desktop, a działają po opublikowaniu raportu w usłudze Power BI. Przygotowanie ma trzy kroki.

1. Parametry RangeStart i RangeEnd. W edytorze Power Query kliknij Zarządzaj parametrami, a potem Nowy, i utwórz dwa parametry o nazwach dokładnie RangeStart i RangeEnd (wielkość liter ma znaczenie). Typ obu to Data/godzina, a wartość bieżąca może być dowolna, na przykład 01.01.2026 i 01.07.2026. W usłudze Power BI te wartości są podmieniane na granice kolejnych partycji, a w Desktop ograniczają tylko ilość danych pobieranych do pliku.

Okno Zarządzaj parametrami w Power Query w Power BI Desktop z parametrami RangeStart i RangeEnd typu Data/godzina do odświeżania przyrostowego
Parametry RangeStart i RangeEnd na liście (1), typ Data/godzina (2) i wartość bieżąca 01.01.2026 00:00:00 (3). Z innym typem niż Data/godzina okno odświeżania przyrostowego parametrów nie przyjmie.

2. Filtr na kolumnie daty. Kolumna, według której Power BI podzieli dane, musi mieć ten sam typ co parametry, czyli Data/godzina. W zapytaniu Sprzedaz_wg_sklepu_i_miesiaca kolumna Początek miesiąca miała w Excelu typ Data, więc najpierw zmieniliśmy go ikoną typu w nagłówku kolumny. Język M nie porównuje wartości typu data z wartościami typu data i godzina, więc filtr na niezmienionej kolumnie zakończyłby się błędem. Potem otwórz menu filtra kolumny, wybierz Filtry dat/godzin i na przykład Po.... W oknie Filtrowanie wierszy ustaw dwa warunki połączone spójnikiem Oraz: jest po lub jest równe RangeStart i jest przed RangeEnd. Żeby wybrać parametr zamiast wpisanej daty, przełącz przycisk między listą warunku a listą wartości.

Okno Filtrowanie wierszy w Power Query w Power BI Desktop: kolumna Początek miesiąca jest po lub jest równe RangeStart oraz jest przed RangeEnd
Warunek z RangeStart (1) ma równość, warunek z RangeEnd (2) jej nie ma. Dzięki temu wiersz z datą graniczną trafi do dokładnie jednej partycji, a nie do dwóch.

Power Query zapisze ten filtr jako jeden krok:

= Table.SelectRows(#"Zmieniono typ", each [Początek miesiąca] >= RangeStart and [Początek miesiąca] < RangeEnd)
Kolumna Początek miesiąca typu Data/godzina z aktywnym filtrem i formuła Table.SelectRows z parametrami RangeStart i RangeEnd w Power Query
Ikona kalendarza z zegarem w nagłówku kolumny Początek miesiąca to typ Data/godzina, a lejek oznacza aktywny filtr. W Power BI Desktop parametry działają jak zwykły filtr: do pliku trafiają tylko wiersze z zakresu od 01.01.2026 do 01.07.2026.

3. Zasady odświeżania. Zasad nie ustawia się w edytorze Power Query. Zamknij edytor, w widoku raportu kliknij prawym przyciskiem tabelę w panelu Dane i wybierz Odświeżanie przyrostowe.

Menu kontekstowe tabeli w panelu Dane w Power BI Desktop z pozycją Odświeżanie przyrostowe
Pozycja Odświeżanie przyrostowe w menu tabeli w panelu Dane. To samo menu jest dostępne w widoku danych i w widoku modelu.

Jeśli parametrów nie ma, okno nie pozwoli włączyć odświeżania i wyświetli ostrzeżenie Przed skonfigurowaniem odświeżania przyrostowego dla tej tabeli należy skonfigurować parametry. U nas parametry i filtr już są, więc przełącznik jest dostępny, ale Power BI pokazuje inne ostrzeżenie, ważne dla każdego, kto chce użyć odświeżania przyrostowego na plikach:

Okno Odświeżanie przyrostowe w Power BI Desktop z ostrzeżeniem Nie można potwierdzić, czy zapytanie M można złożyć
Ostrzeżenie Nie można potwierdzić, czy zapytanie M można złożyć (1) i przełącznik Odśwież przyrostowo tę tabelę (2), który mimo ostrzeżenia da się włączyć.

Ostrzeżenie wynika wprost z pierwszej części tej lekcji: nasze zapytanie czyta pliki CSV i scala je z budżetem, więc filtr RangeStart i RangeEnd nie złoży się do źródła. Usługa Power BI i tak musiałaby przy każdej partycji przeczytać wszystkie pliki, więc odświeżanie przyrostowe nie przyniosłoby oszczędności. Pełną korzyść daje dopiero przy źródle, które wykona filtr samo, na przykład przy tabeli faktów w SQL Server.

Po włączeniu przełącznika ustawiasz dwa zakresy. Rozpoczynanie archiwizowania danych mówi, jak długą historię przechowuje model, a Uruchamianie odświeżania przyrostowego danych, jak długi okres jest pobierany przy każdym odświeżeniu. Pod polami okno od razu pokazuje, których dat to dotyczy, a sekcja Przejrzyj i zastosuj rysuje to na osi czasu.

Zakresy odświeżania przyrostowego w Power BI Desktop: archiwum 2 lata, odświeżanie 1 miesiąc przed datą odświeżenia i oś czasu Zarchiwizowano oraz Odświeżanie przyrostowe
Archiwum z dwóch lat (1), odświeżanie ostatniego miesiąca (2) i oś czasu (3). Daty w podpisach pod polami Power BI wyświetla w formacie amerykańskim, na przykład 10/1/2026 to 1 października 2026.

Dwie opcje w sekcji Wybierz ustawienia opcjonalne warto znać. Odświeżaj tylko pełne okresy pomija bieżący, niepełny miesiąc albo dzień. Wykryj zmiany danych pozwala wskazać kolumnę z datą ostatniej modyfikacji wiersza i odświeżać tylko te partycje, w których coś się zmieniło. Szary blok na górze okna przypomina o jeszcze jednej konsekwencji: po opublikowaniu modelu z odświeżaniem przyrostowym nie pobierzesz go już z usługi z powrotem jako pliku .pbix, więc oryginał trzymaj u siebie.

Masz konkretny problem z Power Query? Zajrzyj do listy 88 najczęstszych pytań i problemów związanych z Power Query: komunikaty błędów, typy danych, scalanie i odświeżanie, każdy z rozwiązaniem krok po kroku.

Chcesz przećwiczyć łączenie Power BI z bazą SQL Server, tryby Import i DirectQuery oraz optymalizację zapytań na ćwiczeniach z trenerem? Szkolenie Analiza Power BI - DAX + M --> To szkolenie ma terminy gwarantowane.

Baner szkolenia Kompleksowe szkolenie Power BI - Desktop, DAX i Online + Copilot w JSystems

Szkolenie Power BI - Desktop, DAX i Online --> Pięć dni od pierwszego raportu do publikacji w usłudze Power BI: Power Query, model danych z wielu tabel, DAX, wizualizacje i Copilot. To szkolenie ma terminy gwarantowane.

To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.

★★★★★Średnia ocena naszych szkoleń w Google: 5/5

✕Powiększony zrzut ekranu z kursu Power Query

Najczęściej zadawane pytania

Jak sprawdzić, czy krok Power Query składa się do bazy danych?
Kliknij prawym przyciskiem krok na liście Zastosowane kroki. Jeśli pozycja Wyświetl zapytanie natywne jest aktywna, kroki do tego miejsca zamieniły się w zapytanie SQL. Gdy jest wyszarzona, składanie zostało przerwane. W Power Query Online pokazują to wskaźniki przy krokach.
Które kroki przerywają query folding?
Zwykle kolumna indeksu, scalanie zapytań z różnych źródeł, funkcje niestandardowe wywoływane dla każdego wiersza, Table.Buffer i własna instrukcja SQL bez opcji EnableFolding. Dlatego filtry i usuwanie kolumn warto robić na początku zapytania, a takie kroki na końcu.
Do czego służą parametry RangeStart i RangeEnd?
To dwa parametry typu Data/godzina, którymi filtrujesz kolumnę daty na potrzeby odświeżania przyrostowego. W Power BI Desktop ograniczają ilość pobranych danych, a w usłudze Power BI są podmieniane na granice kolejnych partycji, dzięki czemu odświeża się tylko najnowszy okres.
Czy odświeżanie przyrostowe działa na plikach Excel i CSV?
Da się je skonfigurować, ale Power BI ostrzega, że nie może potwierdzić składania zapytania. Bez składania usługa i tak musi czytać wszystkie pliki przy każdej partycji, więc korzyść jest niewielka. Pełną oszczędność daje źródło, które samo wykona filtr, na przykład baza SQL.

Komentarze (0)

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

Brak komentarzy...