Power Automate – Filter Query

V rámci mnoha akcí se pod klikem „Show advanced options“ skrývá možnost Filter Query.

V tomto příspěvku bych rád zmapoval možnosti filtrování pro akce spojené s získáním dat ze SharePointu a to konkrétně akce „Get items“. Obrovská výhoda tohoto filtru je totiž, že se nad ním neuplatňuje limit 100tis položek, jenž se nám skrývá pod „Settings“ -> „Pagination Threshold“.

On se v podstatě uplatňuje, ale až na vrácené položky zafiltrované právě tímto dotazem.
Zároveň si tím omezíme počet vrácených položek hned na vstupu a nenatahujeme tak běh flow o zbytečné kroky, které bychom třeba vyhodnocovaly přes „condition“.

Jak to tedy s tím filtrováním je?

Není úplně jednoduché se dopátrat nějaké ucelenější dokumentaci, které by ukazovala vzorové příklady použití. Ale obecný, trochu detailní popis je k dispozici zde – https://docs.microsoft.com/en-us/sharepoint/dev/sp-add-ins/use-odata-query-operations-in-sharepoint-rest-requests

Dostupné operátory:

eqEqual=
ltLess Than<
gtGreater Than>
leLess or Equal<=
geGreater or Equal>=
neNo Equal<>

Dostupná spojení:

V případě, že potřebujeme kombinovat filtr/dotaz přes více sloupců, tak máme k dispozici and a or tedy logické spojení, kdy v případě and musí být splněny všechny podmínky a v případě or libovolná z podmínek.

Dostupné funkce:

Pro řetězce a datumy máme k dispozici následující funkce

endswith(<Název sloupce>,'<hodnota>‘)Hodnota na konci řetězce
startswith(<Název sloupce>,'<hodnota>‘) Hodnota na začátku řetězce
length(<Název sloupce>) Vrací délku řetězce
substringof( ‚<hodnota>‘ ,<Název sloupce>) Řetězec obsahuje danou hodnotu
day(<Sloupec datum>)Vrací číselně hodnotu dne z datumu
month(<Sloupec datum>) Vrací číselně hodnotu měsíce z datumu
year(<Sloupec datum>) Vrací číselně hodnotu roku z datumu
hour(<Sloupec datum>) Vrací číselně hodnotu hodin z datumu
minute(<Sloupec datum>) Vrací číselně hodnotu minut z datumu
second(<Sloupec datum>) Vrací číselně hodnotu sekund z datumu

!! U substringof si dejte pozor na opačný zápis funkce oproti například endswith. Může to být matoucí a vést k chybám.

Nad jakými typy sloupců lze vyhledávat:

  • Datum
  • Ano/Ne
  • Text
  • Výběr z možností
  • Číslo

A jak se to celé aplikuje:

Samotné složení query je následující – Název sloupce operátor hodnota , případně pro řetězce Název sloupce operátor ‚hodnota‘.

Níže pár příkladů:
ID gt 1000
Vybere hodnoty ID, které jsou větší nežli 1000.

Title eq 'Moje'
Vybere řádky, kde je řetězec ve sloupci Title roven textu Moje.

Created gt '2019-12-25'
Vybere řádky, kde je datum vytvoření větší jak 25. prosince 2019.

AccountFound eq 0
Vybere řádky, kde je sloupec s názvem AccountFound na hodnotě Ne. Sloupec je typu Ano/Ne.

AccountFound ne 0 and WelcomeEmailSent eq 0
Vybere řádky, kde je sloupec s názvem AccountFound na hodnotě Ano a zároveň sloupec s názvem WelcomeEmailSent na hodnotě Ne. Oba sloupce jsou typu Ano/Ne.

A jak to vypadá v reálu:

Pojďme si pár jednoduchých dotazů pustit na následujícím seznamem

Takto vypadá akce v Power Automate s doplněným query

A výsledek je, že se nám vrátila pouze jedna hodnota a to konkrétně řádek s FullName Pavel Havel

Jako další ukázku jsem si připravil následující query
AccountFound eq 1 and DateOfStart eq '@{formatDateTime(addDays(utcNow(),-3),'yyyy-MM-dd')}' .
Zde už pracuji s funkcemi Power Automate a to:

utcNow() – vrací aktuální datum a čas
addDays() – přidá dny k datumu
formatDateTime() – umožní mi správně naformátovat datum

Tak abych mohl porovnat vůči tomu, co se mi vrací ze SharePointího seznamu.
A takto to vypadá ve flow

A zde je vidět, že se mi vrátil řádek s sloupcem FullName Pavel Ježek, který přesně odpovídá dané query

Na závěr

Možností je poměrně hodně jak si danou query složit, tak abych se dostal k omezenému množství dat. Ukazoval jsem na akcích spojených se SharePointem, nicméně tato „Advanced option“ se objevuje i u jiných akcí, kde opět může sloužit k delegování dotazu (filtru) na zdroj dat. V Power Automate následně pracujeme s omezeným vzorkem a to nám umožní ji realizovat rychleji.

Jeden drobný hint proč toto používat a tomu bych rád věnoval další příspěvek v budoucnu je, že pro „triggery“ u flow máme možnost zadat podmínku spuštění, která se dá složit právě z těchto query.

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.