Číst v angličtině

Sdílet prostřednictvím


Plán dotazů pro Power Query (Preview)

Plán dotazů pro Power Query je funkce, která poskytuje lepší přehled o vyhodnocení dotazu. Je užitečné určit, proč se konkrétní dotaz nemusí v určitém kroku sbalit.

V praktickém příkladu tento článek předvede hlavní případ použití a potenciální výhody použití funkce plánu dotazu ke kontrole kroků dotazu. Příklady použité v tomto článku byly vytvořeny pomocí ukázkové databáze AdventureWorksLT pro Azure SQL Server, kterou si můžete stáhnout z ukázkových databází AdventureWorks.

Poznámka

Funkce plánu dotazů pro Power Query je dostupná jenom v Power Query Online.

Navrhovaný proces použití funkce plánu dotazu v Power Query kontrolou indikátorů posouvání dotazů, následnou kontrolou plánu dotazu pro vybraný krok a nakonec implementací všech změn odvozených z kontroly plánu dotazu.

Tento článek je rozdělený do řady doporučených kroků pro interpretaci plánu dotazů. Tento postup je následující:

  1. Zkontrolujte indikátory posouvání dotazů.
  2. Vyberte krok dotazu a zkontrolujte jeho plán dotazu.
  3. Implementujte změny dotazu.

Pomocí následujících kroků vytvořte dotaz ve vlastním prostředí Power Query Online.

  1. V Power Query – Zvolte zdroj dat a vyberte prázdný dotaz.

  2. Nahraďte skript prázdného dotazu následujícím dotazem.

    let
      Source = Sql.Database("servername", "database"),
      Navigation = Source{[Schema = "Sales", Item = "SalesOrderHeader"]}[Data],
      #"Removed other columns" = Table.SelectColumns(Navigation, {"SalesOrderID", "OrderDate", "SalesOrderNumber", "PurchaseOrderNumber", "AccountNumber", "CustomerID", "TotalDue"}),
      #"Filtered rows" = Table.SelectRows(#"Removed other columns", each [TotalDue] > 1000),
      #"Kept bottom rows" = Table.LastN(#"Filtered rows", 5)
    in
      #"Kept bottom rows"
    
  3. Změňte servername a database zadejte správné názvy pro vaše vlastní prostředí.

  4. (Volitelné) Pokud se pokoušíte připojit k serveru a databázi pro místní prostředí, nezapomeňte pro toto prostředí nakonfigurovat bránu.

  5. Vyberte Další.

  6. V Editor Power Query vyberte Konfigurovat připojení a zadejte přihlašovací údaje ke zdroji dat.

Poznámka

Další informace o připojení k SQL Serveru najdete v databázi SQL Serveru.

Po provedení těchto kroků bude váš dotaz vypadat jako ten na následujícím obrázku.

Ukázkový dotaz s povolenými indikátory posouvání dotazů Tento dotaz se připojí k tabulce SalesOrderHeader a vybere několik sloupců z posledních pěti objednávek s hodnotou TotalDue nad 1000.

Poznámka

Tento článek používá zjednodušený příklad k prezentaci této funkce, ale koncepty popsané v tomto článku platí pro všechny dotazy. Před čtením plánu dotazů doporučujeme mít dobré znalosti o posouvání dotazů. Další informace o posouvání dotazů najdete v tématu Základy posouvání dotazů.

1. Kontrola indikátorů posouvání dotazů

Poznámka

Před přečtením této části doporučujeme projít si článek o indikátorech posouvání dotazů.

Vaším prvním krokem v tomto procesu je zkontrolovat dotaz a věnovat pozornost indikátorům posouvání dotazů. Cílem je zkontrolovat kroky, které jsou označené jako nepřeložené. Pak uvidíte, jestli provádění změn v celkovém dotazu může tyto transformace zcela posunout.

Indikátory posouvání dotazů pro ukázkový dotaz v podokně Použitý postup

V tomto příkladu je jediným krokem, který nelze přeložit , dolní řádky, které lze snadno identifikovat pomocí nepřeloženého ukazatele kroku. Tento krok je také posledním krokem dotazu.

Cílem je teď zkontrolovat tento krok a pochopit, co se přeloží zpět ke zdroji dat a co se nedá přeložit.

2. Vyberte krok dotazu a zkontrolujte jeho plán dotazu.

Identifikovali jste krok Chovaných dolních řádků jako krok, který vás zajímá, protože se nepřeloží zpět ke zdroji dat. Klikněte pravým tlačítkem myši na krok a vyberte možnost Zobrazit plán dotazu. Tato akce zobrazí nové dialogové okno, které obsahuje diagram pro plán dotazu vybraného kroku.

Dialogové okno Plán dotazu, které znázorňuje zobrazení diagramu pro plán dotazu s uzly propojenými řádky Power Query se snaží optimalizovat dotaz tím, že využívá opožděné vyhodnocení a posouvání dotazů, jak je uvedeno v základech posouvání dotazů. Tento plán dotazu představuje optimalizovaný překlad dotazu M do nativního dotazu odeslaného do zdroje dat. Zahrnuje také všechny transformace, které provádí modul Power Query. Pořadí, ve kterém se uzly zobrazí, se řídí pořadím dotazu počínaje posledním krokem nebo výstupem dotazu, který je znázorněný úplně vlevo od diagramu, a v tomto případě je to uzel Table.LastN , který představuje krok s dolními řádky .

V dolní části dialogového okna je pruh s ikonami, které vám pomůžou přiblížit nebo oddálit zobrazení plánu dotazu a další tlačítka, která vám pomůžou se správou zobrazení. U předchozího obrázku se možnost Přizpůsobit zobrazení z tohoto pruhu použila k lepšímu ocenění uzlů.

Dialogové okno plán dotazů s uzly, které jsou zvětšené pro lepší zobrazení

Poznámka

Plán dotazu představuje optimalizovaný plán. Když modul vyhodnocuje dotaz, pokusí se přeložit všechny operátory do zdroje dat. V některýchpřípadechch S ohledem na to uzly a operátory, které zůstaly v tomto optimalizovaném plánu dotazů, obvykle obsahují dotaz na "přeložený" zdroj dat a všechny operátory, které se nedají přeložit a vyhodnocují se místně.

Identifikace složených uzlů z jiných uzlů

Uzly v tomto diagramu můžete identifikovat jako dvě skupiny:

  • Složené uzly: Tento uzel může být buď Value.NativeQuery nebo "zdroj dat", například Sql.Database. Dají se také identifikovat pomocí vzdáleného popisku pod názvem jejich funkce.
  • Neskládané uzly: Jiné operátory tabulky, například Table.SelectRows, Table.SelectColumnsa další funkce, které se nedají přeložit. Můžete je také identifikovat pomocí popisků Úplné prohledávání a Streamování.

Následující obrázek znázorňuje složené uzly uvnitř červeného obdélníku. Zbývající uzly nebylo možné přeložit zpět do zdroje dat. Zbývající uzly budete muset zkontrolovat, protože cílem je pokusit se tyto uzly přeložit zpět do zdroje dat.

Ovládací prvky zobrazení plánu dotazu v dolní části dialogového okna s vybranou možností přizpůsobit zobrazení Pokud chcete zobrazit rozšířené informace, můžete vybrat Zobrazit podrobnosti v dolní části některých uzlů. Například podrobnosti Value.NativeQuery uzlu zobrazují nativní dotaz (v SQL), který se odešle do zdroje dat.

Zobrazení podrobností pro uzel Value.NativeQuery v plánu dotazu Zde uvedený dotaz nemusí být úplně stejný dotaz odeslaný do zdroje dat, ale je to dobrá aproximace. V tomto případě vám přesně řekne, jaké sloupce se budou dotazovat z tabulky SalesOrderHeader a jak pak bude filtrovat tuto tabulku pomocí pole TotalDue, aby získala pouze řádky, ve kterých je hodnota tohoto pole větší než 1 000. Uzel vedle něj Table.LastN se počítá místně modulem Power Query, protože ho nejde přeložit.

Poznámka

Operátory nemusí přesně odpovídat funkcím použitým ve skriptu dotazu.

Zkontrolujte neskládané uzly a zvažte akce, aby se transformace přeložila.

Teď jste zjistili, které uzly se nedají přeložit a které se vyhodnotí místně. Tento případ má Table.LastN pouze uzel, ale v jiných scénářích může mít mnohem víc.

Cílem je použít změny dotazu tak, aby se krok dal sbalit. Některé změny, které můžete implementovat, můžou být v rozsahu od změny uspořádání kroků až po použití alternativní logiky pro váš dotaz, který je explicitnější pro zdroj dat. To neznamená, že všechny dotazy a všechny operace jsou složené použitím některých změn. Je ale vhodné určit, jestli se váš dotaz může posunout zpět, a to prostřednictvím zkušební verze a chyby.

Vzhledem k tomu, že zdrojem dat je databáze SQL Serveru, je-li cílem načíst posledních pět objednávek z tabulky, je dobrou alternativou využít klauzule TOP a ORDER BY v SQL. Vzhledem k tomu, že v SQL není žádná klauzule BOTTOM, Table.LastN transformace v PowerQuery se nedá přeložit do SQL. Tento krok můžete odebrat Table.LastN a nahradit ho:

  • Řazení sestupně krok podle sloupce SalesOrderID v tabulce, protože tento sloupec určuje, které pořadí následuje jako první a které bylo zadáno jako poslední.
  • Vyberte prvních pět řádků od řazení tabulky, tato transformace dosáhne stejného výsledku, jako kdyby se jednalo o uchovávané dolní řádky (Table.LastN).

Tato alternativa je ekvivalentní původnímu dotazu. I když tato alternativa v teorii vypadá dobře, musíte provést změny, abyste zjistili, jestli tato alternativa tento uzel plně přeloží zpět do zdroje dat.

3. Implementace změn dotazu

Implementujte alternativu popsanou v předchozí části:

  1. Zavřete dialogové okno plánu dotazu a vraťte se do Editor Power Query.

  2. Odeberte krok s uloženými dolními řádky .

  3. Seřaďte sloupec SalesOrderID v sestupném pořadí.

    Řazení sloupce SalesOrderID v sestupném pořadí pomocí nabídky automatického filtru

  4. Vyberte ikonu tabulky v levém horním rohu zobrazení náhledu dat a vyberte možnost číst horní řádky. V dialogovém okně předejte jako argument číslo pět a stiskněte OK.

    Pomocí místní nabídky tabulky vyberte transformaci Zachovat horní řádky, aby se zachovalo pouze prvních pět řádků.

Po implementaci změn znovu zkontrolujte indikátory posouvání dotazů a podívejte se, jestli vám dává přeložený indikátor.

Všechny indikátory posouvání dotazů jsou zelené a ukazují, že se dají přeložit. Konečná tabulka poskytuje stejné řádky, ale v jiném pořadí. Teď je čas zkontrolovat plán dotazu posledního kroku, který teď uchovává horní řádky. Teď jsou jen složené uzly. V části Value.NativeQuery Zobrazit podrobnosti ověřte, který dotaz se do databáze odesílá.

Nový plán dotazu po provedení změn dotazu, který teď předvádí pouze složené uzly, s Value.NativeQuery zobrazující úplný příkaz SQL, který vyhodnocuje dotaz.

I když tento článek navrhuje, jakou alternativu použít, hlavním cílem je naučit se používat plán dotazů k prozkoumání posouvání dotazů. Tento článek také poskytuje přehled o tom, co se odesílá do vašeho zdroje dat a jaké transformace se budou provádět místně.

Kód můžete upravit, abyste viděli dopad, jaký má v dotazu. Pomocí indikátorů posouvání dotazů budete mít také lepší představu o krocích, které brání posouvání dotazu.