【Power Automate】フィルタークエリについてざっくりと【Share Point】
フローを組み上げてテストをしてみたら、エラーが出てしまい。
内容を見ると、どうやらタイムアウトしていたようで。
原因がループの量が多すぎて、アクションの制限時間を超えてしまっていたようです。
で、データはShare Pointから取っていたので、取得するデータを絞り込もうかなと。
その時に設定するのが「フィルタークエリ」なんですが。
Power Automateでは少ない、手入力もあったりしたので。
一応まとめておくことにしました。
Share Pointとは
Microsoftが提供するクラウドサービスがShare Pointです。
情報を集めていると・・・というか自分の集め方かもしれませんが。
データ操作用のストレージというイメージがあったのですが、社内Wikiのようなこともできたりといろんなことができてびっくり。
データを保管しつつ、それを元に使えるサービスをMicrosoftが用意していくれているという感じでしょうか。
同じMicrosoftのクラウドツールである、Power Automateとの連携をしやすいのも良いですね。
今回の用途が、エクセルで入力したデータをTeamsで見やすいカレンダーに転載したいというものだったので。
Share Pointで利用できるサービスの一つである、Listsの利用がちょうど良い感じでした。
なので、今回の場合はどちらかと言うと、Share Pointをデータベースとして使用している感じです。
参考:ファイル共有だけじゃない!Share Pointでできること・使い方を解説!【活用事例付き】‐株式会社コンピュータマネジメント
Power AutomateでShare Pointのデータを絞り込んで取得する
Power AutomateでShare Point上のデータを利用するには、Share Pointに登録されているデータをまず取得します。
今回は登録されているデータを複数取得したいので。
アクションからShare Pointを選択し、「複数の項目の取得」を選びます。
「パラメーター」タブで、
・サイトのアドレス→使用したいデータが登録されているShare PointのURLを選択
・リスト名→その中で、データが登録されているリストを選択
これでShare Pointに登録されている必要なデータを取得できますが。
絞り込みたいので。
・「詳細パラメーター」で「フィルタークエリ」にチェックを入れる
で、入力フィールドを出現させます。
一応、ここまでの流れは「新しいデザイナー」での流れです。
旧デザイナーだと、左下の「詳細オプションを表示する」をクリックすれば、入力項目が出てきます。
以降、旧デザイナーの表示になりますが、入力できる内容は変わらないのでご了承ください。
フィルタークエリに条件を入力する
条件を入力する時に必要なのが、Share Pointの内部列名です。
Share Pointの設定画面から、「リストの設定」を選び。
列名の一覧が表示されるので、その中から確認したいものをクリックした先の、URL末尾の部分が内部列名です。
こちらが参考になるかと:Power Automate でフィルタークエリを使ってみよう‐Qiita
フィルタークエリで絞り込む値のある列名を絞り込むのに、この内部列名を使用します。
自分が使用を考えたLIstsのカレンダーの列名は「開始時間」でしたが、内部列名は「StartDateAndTime」でした。(たぶん初期からの内部列名ですかね。)
なので、この内部列名を指定して条件を入力する感じです。
Share Pointの「複数項目を指定する」の前に、変数で当日の日付を取得していたので。
「開始時間(StartDateAndTime)」が「当日」以降という指定です。
変数で指定する場合でも、文字列の場合は「"」で囲まないと指定にならないっぽいです。
日付も文字列になるので、日付を変数に格納している場合には忘れずに。
・・・最初これに気付かず、地味にハマりましたw
他のアクションの設定と違って、手入力することになるので打ち間違えには気をつけましょう。
ちなみに、「AND」や「OR」を使って、複数条件にすることもできます。
先程の日付の条件に加えて、内部列名Titleに特定の文字列を含むデータを取得するという指定です。
使用できる演算子など
色々と条件に指定できそうな気がしますが、使用できる演算子や関数?はあまり多くないみたいです。
内容を見る限り十分ではあるんですがー。
受けた印象としては、SQL操作に近い感じ?
まずは数値比較ですが、Power Automateの条件などのコントロールで指定するのと同じような内容です。
lt | 次の値より小さい |
le | 次の値以下 |
gt | 次の値より大きい |
ge | 次の値以上 |
eq | 等しい |
ne | 次の値に等しくない |
記号で「==」とか「>=」と演算子を書くのに慣れてしまっているので、最初は戸惑いました。
が、このように文字で指定できる方が楽だなぁと思えて来たり。
基本的には記号を使わずに関数で指定するのがPower Automateみたいなので。
文字で覚える方が使う分には楽かもしれないですね。
文字列比較でも、「eq」と「ne」はありますが、文字列を検索するような動作をするものもあります。
startsWith(内部列名, '文字列’) | 内部列名に属する列に属する値の中で、’文字列’から始まるものを探す |
substringOf(’文字列’, 内部列名) | 内部列名で指定する列に属する値の中で、’文字列’を含むものを探す |
文字列比較なのに、引数が逆なのがいやらしいですねぇ。
とはいえ、フィルタークエリで使用できるものはそんなに多くなさそうなので、覚えてしまう方が良いかもしれません。
ここらへんは感覚的にはSQLに近い印象ですね。
クラウドストレージのような使い方もできるからでしょうか。
参考:Power Automate のフローに対する [アイテムの取得] と [ファイルの取得] SharePoint アクションの詳細な分析‐Microsoft Learn
対象のデータを指定してデータ量を減らせる
エクセルの場合はテーブルを指定するので、データ数を調整することができました。
しかし、Share Pointの場合は特になにもしないと、レコードを全件取得してくれてしまいます。
なので、抽出する項目を絞り込むことで、検索するデータ数を減らし。
それが処理速度の向上に繋がります。
実際にテストは多少進むようになったのですがー。
・・・自分の場合はそれだけではありませんでした。
それについてはまた今度。