【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を選択し、「複数の項目の取得」を選びます。

SharePointその1

「パラメーター」タブで、

・サイトのアドレス→使用したいデータが登録されているShare PointのURLを選択
・リスト名→その中で、データが登録されているリストを選択

これでShare Pointに登録されている必要なデータを取得できますが。

絞り込みたいので。

・「詳細パラメーター」で「フィルタークエリ」にチェックを入れる

で、入力フィールドを出現させます。

フィルタークエリの呼び出し

一応、ここまでの流れは「新しいデザイナー」での流れです。

旧デザイナーだと、左下の「詳細オプションを表示する」をクリックすれば、入力項目が出てきます。

以降、旧デザイナーの表示になりますが、入力できる内容は変わらないのでご了承ください。

フィルタークエリに条件を入力する

条件を入力する時に必要なのが、Share Pointの内部列名です。

Share Pointの設定画面から、「リストの設定」を選び。

列名の一覧が表示されるので、その中から確認したいものをクリックした先の、URL末尾の部分が内部列名です。

こちらが参考になるかと:Power Automate でフィルタークエリを使ってみよう‐Qiita

フィルタークエリで絞り込む値のある列名を絞り込むのに、この内部列名を使用します。

自分が使用を考えたLIstsのカレンダーの列名は「開始時間」でしたが、内部列名は「StartDateAndTime」でした。(たぶん初期からの内部列名ですかね。)

なので、この内部列名を指定して条件を入力する感じです。

条件1つ

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の場合は特になにもしないと、レコードを全件取得してくれてしまいます。

なので、抽出する項目を絞り込むことで、検索するデータ数を減らし。

それが処理速度の向上に繋がります。

実際にテストは多少進むようになったのですがー。

・・・自分の場合はそれだけではありませんでした。

それについてはまた今度。