Odkazování na dotazy Power QueryReferencing Power Query queries

Tento článek je určený pro modelátory dat, kteří pracují s Power BI Desktopem.This article targets you as a data modeler working with Power BI Desktop. Obsahuje pokyny pro definování dotazů Power Query, které odkazují na jiné dotazy.It provides you with guidance when defining Power Query queries that reference other queries.

Pojďme si vyjasnit, co to znamená: Když jeden dotaz odkazuje na druhý dotaz, je to jakoby se kroky v druhém dotazu zkombinovaly a spustily před kroky v prvním dotazu.Let's be clear about what this means: When a query references a second query, it's as though the steps in the second query are combined with, and run before, the steps in the first query.

Vezměte do úvahy několik dotazů: Dotaz 1 vytvoří zdroj dat z webové služby a má zakázané načítání.Consider several queries: Query1 sources data from a web service, and its load is disabled. Dotaz 2 , Dotaz 3 a Dotaz 4 odkazují na Dotaz 1 a jejich výstupy se načtou do datového modelu.Query2 , Query3 , and Query4 all reference Query1 , and their outputs are loaded to the data model.

Diagram znázorňující zobrazení závislostí dotazů s dotazy popsanými v předchozím odstavci

Při aktualizaci datového modelu se často předpokládá, že Power Query načítá výsledek Dotazu 1 , který se znovu používá v odkazovaných dotazech.When the data model is refreshed, it's often assumed that Power Query retrieves the Query1 result, and that it's reused by referenced queries. Toto uvažování je nesprávné.This thinking is incorrect. Power Query ve skutečnosti provádí Dotaz 2 , Dotaz 3 a Dotaz 4 samostatně.In fact, Power Query executes Query2 , Query3 , and Query4 separately.

Můžete si to představit tak, že do Dotazu 2 jsou vloženy kroky Dotazu 1.You can think that Query2 has the Query1 steps embedded into it. Stejně tak tomu je u Dotazu 3 a Dotazu 4.It's the case for Query3 and Query4 , too. Následující schéma názorněji ukazuje, jak se dotazy spouštějí.The following diagram presents a clearer picture of how the queries are executed.

Diagram znázorňující upravenou verzi zobrazení závislostí dotazů zobrazující Dotaz 2, Dotaz 3 a Dotaz 4

Dotaz 1 se spouští třikrát.Query1 is executed three times. Vícenásobná spuštění mohou způsobit pomalou aktualizaci dat a negativně ovlivnit zdroj dat.The multiple executions can result in slow data refresh, and negatively impact on the data source.

Při použití funkce Table.Buffer v Dotazu 1 nedojde k eliminaci tohoto dalšího načtení dat.The use of the Table.Buffer function in Query1 won't eliminate the additional data retrieval. Tato funkce ukládá tabulku do vyrovnávací paměti.This function buffers a table to memory. Tabulku ve vyrovnávací paměti lze použít jen v rámci spuštění stejného dotazu.And, the buffered table can only be used within the same query execution. Pokud se tedy v tomto příkladu uloží Dotaz 1 do vyrovnávací paměti při spuštění Dotazu 2 , nelze data ve vyrovnávací paměti použít při spuštění Dotazu 3 a Dotazu 4.So, in the example, if Query1 is buffered when Query2 is executed, the buffered data couldn't be used when Query3 and Query4 are executed. Tyto dotazy uloží data do vyrovnávací paměti ještě dvakrát.They'll themselves buffer the data twice more. (Tento výsledek by mohl být ve skutečnosti příčinou nízkého výkonu, protože tabulka bude uložena do vyrovnávací paměti každým odkazovým dotazem.)(This result could in fact compound the negative performance, because the table will be buffered by each referencing query.)

Poznámka

Architektura Power Query pro ukládání do mezipaměti je složitá a není předmětem tohoto článku.Power Query caching architecture is complex, and it's not the focus of this article. Power Query dokáže data načtená ze zdroje dat ukládat do mezipaměti.Power Query can cache data retrieved from a data source. Při spuštění nějakého dotazu ale může data načítat z tohoto zdroje dat vícekrát.However, when it executes a query, it may retrieve the data from the data source more than once.

DoporučeníRecommendations

Obecně doporučujeme odkazovat na dotazy, abyste se v dotazech vyhnuli duplikování logiky.Generally, we recommend you reference queries to avoid the duplication of logic across your queries. Jak je ale popsáno v tomto článku, může tento přístup přispět k pomalým aktualizacím dat a k nadměrnému zatížení zdrojů dat.However, as described in this article, this design approach can contribute to slow data refreshes, and overburden data sources.

Místo toho doporučujeme vytvořit tok dat.We recommend you create a dataflow instead. Použití toku dat může zlepšit dobu aktualizace dat a snížit vliv na zdroje dat.Using a dataflow can improve data refresh time, and reduce impact on your data sources.

Tok dat můžete navrhnout tak, aby zapouzdřil zdrojová data a transformace.You can design the dataflow to encapsulate the source data and transformations. Protože tok dat představuje ve službě Power BI trvalé úložiště dat, je načtení jeho dat rychlé.As the dataflow is a persisted store of data in the Power BI service, its data retrieval is fast. Takže i když při odkazování na dotazy vznikne několik žádostí vůči toku dat, doba aktualizace dat se zkrátí.So, even when referencing queries result in multiple requests for the dataflow, data refresh times can be improved.

Pokud se v tomto příkladu Dotaz 1 přepracuje na entitu toku dat, mohou ji Dotaz 2 , Dotaz 3 a Dotaz 4 použít jako zdroj dat.In the example, if Query1 is redesigned as a dataflow entity, Query2 , Query3 , and Query4 can use it as a data source. Při tomto návrhu bude entita, která je zdrojem pro Dotaz 1 , vyhodnocena jen jednou.With this design, the entity sourced by Query1 will be evaluated only once.

Další krokyNext steps

Další informace související s tímto článkem najdete v následujících tématech:For more information related to this article, check out the following resources: