Power Automate – Filter Query
- Posted by Pavel Večeř
- On 21.1.2020
- 0
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:
eq | Equal | = |
lt | Less Than | < |
gt | Greater Than | > |
le | Less or Equal | <= |
ge | Greater or Equal | >= |
ne | No 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í queryAccountFound 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.
0 comments on Power Automate – Filter Query