LoginSignup
31
29

More than 3 years have passed since last update.

【#PowerAutomate Tip's】フィルタークエリー (OData クエリ) メモ

Last updated at Posted at 2021-05-09

Power Automate にある SharePoint の「複数の項目の取得」アクションで[フィルタークエリー]が利用可能なことをご存じでしょうか?フィルタークエリーを利用すると、該当のアクションでデータをクエリで指定した条件(例えば”金額が500より大きいモノ”など)で絞り込んで取得することができる仕組みです。SQL文で言うところの、Where条件みたいな感じですね。

最近はフローチェッカーが「クエリ使った方が効率的だよ」という警告を表示してくるので、気になっていた方もいるでしょう。そのフィルタークエリーですが、”OData クエリ"という記述を利用しないといけません。

今回は「OData クエリは、たまにしか利用しないので使いたい度にイチイチ検索するのがメンドクサイ!しかも、Docs の説明分かりづらい!!!」ってなった当方が、当方のためにクエリについてメモする回です。

フィルタークエリーの場所

SharePoint アクションから「複数の項目の取得」を追加 → [詳細オプションを表示する]をクリック → 展開された状態で確認できます。
※スクリーンショットは『試験的な機能』がオンになった状態です。

01.png

試験的な機能 オンの場合

いわゆるプレビュー機能がONになっていると、フィルタークエリーがフローエディターの GUI上で”ある程度”指定できるようになっています。
03.png

処理対象となる列(左側の選択肢)の型によって選べる条件が異なります。下記はカスタムリストに必ずある”更新日時”を指定した場合です。上記の”タイトル”と選択肢が異なってますよね。
04.png

この機能、まだ全ての条件を網羅しているようでは無さそうです。例えば、タイトルは1行テキストですが”〇〇から始まる”などの条件は GUI 上では出てきません。そのような GUI で条件式が見当たらない場合は[詳細モードに切り替える]をクリックして、自らの手で入力する必要があります。

05.png
このクエリを指定するときに「あれ?どうだっけ?」となるので、メモしておこう!ってなったのです。

参考情報

SharePoint REST サービスでサポートされる OData クエリ演算子

Supported operators

eq (Equal)

イコール。
●●と等しい。

例)SPO列の値が ”Nagoya” と等しい

SPO列名 eq 'Nagoya'

ne (Not Equal)

ノットイコール。
●●と等しくない。

例)SPO列の値が ”Gifu” と等しくない

SPO列名 ne 'Gifu'

gt (Greater than)

”より大きい”。
列の値(A)が B より大きい → A > B 。

例1)SPO列の値が 100 より大きい

SPO列名 gt 100

例2)SPO列の値が現在日時より大きい

日付の比較をする場合、シングルコーテーション(')で比較する値(A > B の”B")を囲わないとダメ。
よくわすれる(汗

SPO列名 gt 'utcnow()'

ge (Greater than or equal)

”以上”。
列の値(A)が B 以上 → A >= B 。

※例は前述と同様なので割愛

lt (Less than)

”より小さい”。
列の値(A)が B より小さい → A < B 。

例1)SPO列の値が 800 より小さい

SPO列名 lt 100

例2)SPO列の値が現在日時より小さい

つまり、現在日時よりも”前”を取得したい場合。

SPO列名 lt 'utcnow()'

le (Less than or equal)

”以下”。
列の値(A)が B 以下 → A <= B 。

※例は前述と同様なので割愛

and

”A && B” のアンド。”および” とか ”なおかつ”。
複数の判定式を連結する際に、A および B としたい場合に利用。

例)価格が100以上で、在庫が50より少ない

価格 ge 100 and 在庫 lt 50

or

”A || B” のオア。”または”。
複数の判定式を連結する際に、A または B としたい場合に利用。

例)価格が100、または500

価格 eq 100 or 価格 eq 500

startswith

値が〇〇で始まるモノを取得する。
対象の値が、比較値の文字列で開始されているモノ。

例)Name が"中村"で始まるモノ

startswith(Name, ’中村’)

endswith

値が〇〇で終わるモノを取得する。
対象の値が、比較値の文字列で終了するモノ。

例)Name が"子"で終わるモノ

endswith(Name, ’子’)

substringof (〇〇を含む)

値に〇〇が含まれているモノを取得する。
対象の値に、比較値が含まれているモノ。

例)Nameに”太郎”が含まれているモノ

substringof('太郎', Name)

※コイツは、比較したい値が第1引数になります。
※ややこしい!分かりづらい!

日付関連

day() だったり month() だったりも利用可能らしいですが、当方が1回も使った試しがないので割愛!
image.png

使えるらしいが当方が利用したコトが無いヤツら

  • day
  • year
  • hour
  • minute
  • second

上記は、OData クエリでこねくり回すより、Power Automate のアクションや関数を活用したほうが分かりやすいんじゃないかな、って思ってます。

諸注意

SharePoint Online の列名は内部名(Titleなど)で指定する必要があります。
マルチバイト文字で列名を作成してしまった方は大変だと思いますが、しょうがないね・・・。

SharePoint のリストや列は、必ず半角英数で作成した後に、日本語表記へ修正するようにしましょう。

まとめ

「OData クエリ、慣れないね!」

はい、いまだに慣れません。覚えられる量なんでしょうけどねぇ・・・。いっそ、SQL文(T-SQL)で統一して条件指定できればいいのに。。。

それでは、皆さま。素晴らしい Power Platform Life を!

31
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
29