Vysvětlení posouvání pomocí diagnostiky dotazů

Jedním z nejčastějších důvodů, proč používat Diagnostiku dotazů, je lépe porozumět tomu, které operace Power Query deleguje do backendového zdroje dat k provedení. Tento proces se také označuje jako skládání. Pokud chcete zjistit, u kterých operací dochází ke skládání, podívejte se na nejkonkrétnější dotaz nebo dotazy, které Power Query odesílá do back-endového zdroje dat. Tento proces můžete prozkoumat pro ODATA i SQL.

Operace popsaná v článku Zaznamenávání diagnostiky dotazu v Power BI provádí čtyři kroky:

  • Připojí se ke zdroji dat.
  • Načte tabulku zákazníků.
  • Filtruje roli zákaznického ID na hodnotu Sales Representative
  • Skupiny podle Country

Vzhledem k tomu, že konektor ODATA v současnosti nepodporuje přenesení operace COUNT() na koncový bod a že tento koncový bod má také omezené možnosti operací, neočekáváme, že se tento poslední krok provede na koncovém bodu. Na druhou stranu je filtrování poměrně triviální. To je přesně to, co vidíme, když se podíváme na nejvýraznější dotaz vygenerovaný:

Request:
GET https://services.odata.org/V4/Northwind/Northwind.svc/Customers?$filter=ContactTitle eq 'Sales Representative'&$select=CustomerID%2CCountry HTTP/1.1

Response:
https://services.odata.org/V4/Northwind/Northwind.svc/Customers?$filter=ContactTitle eq 'Sales Representative'&$select=CustomerID%2CCountry
HTTP/1.1 200 OK

Vidíme, že filtrujeme tabulku tak, aby ContactTitle se rovnala Sales Representative, a vracíme pouze dva sloupce: Customer ID a Country. Country je potřeba pro operaci seskupování, která se musí provést místně, protože ji koncový bod ODATA neprovádí. Můžeme uzavřít, co se dá složit a co ne.

Podobně pokud se podíváme na konkrétní a konečný dotaz v diagnostice SQL, vidíme něco trochu jiného:

    count(1) as [Count]
from 
(
    select [_].[Country]
    from [dbo].[Customers] as [_]
    where [_].[ContactTitle] = 'Sales Representative' and [_].[ContactTitle] is not null
) as [rows]
group by [Country]

Vidíte, že Power Query vytvoří podvýběr, kde se ContactTitle filtruje na Sales Representative, a poté tento podvýběr seskupí podle Country. Všechny naše operace skončily.

Pomocí Diagnostiky dotazů můžeme zjistit, které operace byly přeloženy. V budoucnu doufáme, že tuto funkci usnadníme.