1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Power Automate】日付を条件としたフィルタークエリでSharePointリストからアイテムを抽出する方法

Posted at

SPO_filter_query_thumb.png

はじめに

本記事では、Power Automate(以下「PA」)のフローで、日付を条件としたフィルタークエリでSharePointリストからアイテムを抽出する方法をご紹介します。

あわせて、つまずきやすいポイントや注意点についても詳しく解説していきます。

※本記事は2025/05/02時点での情報となります。

フィルタークエリとは

PAでSPOリストからアイテムを取得する際に、取得したいアイテムをSPO側であらかじめ絞り込んだ状態でPAに渡すようにするための指示文がフィルタークエリです。

フィルタークエリの使いどころ

「SPO上のタスクリストから期限日が2025/3/31以前のタスク情報を抽出して担当社員にアラート通知を出したい」

「ヒヤリハット情報を蓄積したSPOリストから、今月登録分のアイテムを抽出してレポートを作成したい」

といったように、大量のアイテムを含むリストから日付を条件にアイテムを抽出したいケースは少なくありません。

こうしたニーズに対して、すべてのアイテムを一度取得してから、Power Automate上で条件処理をする方法もありますが、それでは以下のような問題が発生しやすくなります。

Power Automateの取得上限(5,000件)に引っかかって、必要なアイテムを取りこぼす可能性がある

範囲内であっても、「Apply to each(それぞれに適用)」を活用した対象アイテムの選定処理に時間がかかり、フローの完了が遅くなる

こうした問題を回避するために活用したいのが「フィルタークエリ」です。

SharePoint側で条件に合うアイテムだけを事前に絞り込んでからPower Automateに渡すことで、取得漏れの防止と処理の高速化が同時に実現できます。

フィルタークエリの書き方

条件の指定には、PAでよく使う関数式とは異なる「ODataフィルタークエリ」という専用の書き方を用います。

// 「列名 演算子 条件」の形式で記載
Created ge '2025-03-22T00:00:00.0000000Z'

①列名について

フィルタークエリでは、リスト上に表示されている列名ではなく「内部列名」を使用する必要があります。

内部列名の確認方法は以下の通りです。

1.対象のSharePointリストで「設定」ページを開く
2.ページ下部に表示されている列の一覧から、使いたい列名をクリック
3.遷移先のURLの末尾にある「Field=」の後ろに書かれている値が内部列名

1.png

// 以下のURLでは、"_x8cb7__x3063__x305f__x65e5_"が内部列名
https://componyname.sharepoint.com/sites/msteams_xxxxxx/_layouts/yy/FldEditEx.aspx?List=%7BF47AC10B-58CC-4372-A567-0E02B2C3D479%7D&Field=_x8cb7__x3063__x305f__x65e5_

②演算子について

演算子はPAの論理関数(greaterOrEquals)や、一般の比較演算子(<=)とは異なり、以下のように英字2文字で表します。

・lt…未満(less than)
・le…以下(less than or equal to)
・gt…次の値より大きい(greater than)
・ge…以上(greater than or equal to)
・eq…等しい(equal to)
・ne…等しくない(not equal to)

比較演算子以外の記法についてはMicrosoft公式リファレンスをご参照ください。

フィルタークエリで日時の絞り込みを行う際の3つの注意点

フィルタークエリは、使いこなせばとても便利な機能ですが、日付や時刻を条件にする場合には注意が必要です。

次のような注意点を押さえておかないと、意図したとおりにアイテムを取得できず、思わぬトラブルの原因になることがあります。

注意点① SPO・PAそれぞれのタイムゾーンを考慮する

PA内部で扱われる日時情報はUTC(協定世界時)です。

一方、SPOのリスト上に記録される日時は、サイトの設定のタイムゾーンに基づいています。 

image.png

このタイムゾーンの違いによって、単純に日付で絞り込もうとすると、意図したレコードが正しく抽出できない場合があります。

さらに複雑なのが、SPOサイトのデフォルトのタイムゾーンが「太平洋標準時(PST: UTC-8)」である点です。

日本で作成したSharePointサイトでも、初期設定は必ずPSTになります。

このタイムゾーンの違いを理解していないと、日本の時間感覚とPAやSPOの仕様が合わず、日時操作がうまくいかないことになります。

注意点② 正しいフォーマットに則る

前述の通り、PAの日時情報は基本的にUTCで扱われます。

しかし、SPOのフィルタークエリで指定した日時は、タイムゾーンが明示されていない場合、SPOのタイムゾーン(デフォルトではPST)に基づいて解釈されるため、注意が必要です。

たとえば、タイムゾーンの設定が太平洋標準時(PST)のSPOサイトに以下のようなリストがあったとします。

※このリスト表示時、PSTは夏時間です。

4,7.png

このリストからアイテムを取得するために、2つのクエリを実行してみます。

両方とも購入日時が 2025/03/22 00:00~06:00 のデータを取得しようとしています。違いは日時情報末尾の、"Z"の有無だけです。

// Zなし
購入日の内部列名 ge '2025-03-22T00:00:00.0000000' and 購入日の内部列名 lt '2025-03-22T06:00:00.0000000'

// Zあり
購入日の内部列名 ge '2025-03-22T00:00:00.0000000Z' and 購入日の内部列名 lt '2025-03-22T06:00:00.0000000Z'

結果は以下のようになります。

3.png

Zなしの場合、SPOのタイムゾーンに基づき、PSTの 2025/03/22 00:00~06:00のデータが検索されます。

一方、Zありの場合、UTCの 2025/03/22 0:00~6:00(つまり、PSTでは 2025/03/21 16:00~22:00)のデータが検索されます。

"Z"の有無だけで、抽出されるアイテムが異なってしまうのです。

今度はSPOサイトのタイムゾーンを日本時間(JST)に変更してみましょう。

4,7.png

すると、"Z"なしのクエリでは結果が変わってしまいます。

5.png

Zなしの場合、SPOのタイムゾーン設定に従い、JSTの 2025/03/22 00:00~06:00のデータを検索しています。しかし、その条件に該当する結果がないため、空の配列が返されています。

一方、Zありの場合はUTCの 2025/03/22 00:00~06:00(つまり、JSTでは 2025/03/22 09:00~15:00)を検索しており、先ほどの結果と変化はありません。

上記をまとめると、リストのアイテムの購入日列の日時は、タイムゾーンによって以下の表のようになります。

6.png

今回のクエリでヒットするのは、赤く塗られたセルだけです。

時間の概念としては、いずれも同じ一点を指していますが、解釈する地点(タイムゾーン)によって、取得される結果や表示される内容は異なってしまうのです。

サイト側のタイムゾーン設定に左右されないために、クエリで日時を扱う際は、必ずUTCを示す"Z"を末尾に付けるようにしましょう。

注意点③ クエリには時刻情報まで含めて指定する

SPOの「取得」アクションなどで使用するフィルタークエリでは、日付だけでなく時刻まで指定する必要があります。

例えば、単に Date eq '2025-03-22' と記述すると、内部的には以下のように解釈されます。

2025年3月22日 00:00:00.0000000 のアイテムを探す

つまり、指定した日の午前0時00分00秒ぴったりのアイテムしか抽出されません。

そのため特定の日付のデータを抽出したい場合は、その日の開始時刻から翌日の開始時刻未満を範囲で指定するのが一般的です。

内部列名 ge '2025-03-22T00:00:00.0000000Z' and 内部列名 lt '2025-03-23T00:00:00.0000000Z'

日本時間で特定の日付範囲のアイテムを抽出する正しい例

ここまでの3つの注意点を踏まえて、日本時間を基準に日付でアイテムを絞り込む方法を実践してみましょう。

今回は例として、テスト用に作成した備品リストから、購入日が2025年3月22日のアイテムを取得してみます。

※SPOのタイムゾーンはJSTに設定してあります。

4,7.png

アクションとクエリの設定

1.Power AutomateのフローにSharePointの複数の項目の取得アクションを追加し、リストを指定します。
2.詳細パラメーターのドロップダウンからフィルタークエリを選択します。

8.png

  1. 注意点に従ってフィルタークエリを次のように入力します。
購入日の内部列名 ge '2025-03-21T15:00:00.0000000Z' and 購入日の内部列名 lt '2025-03-22T15:00:00.0000000Z'

【注意点1】から… 

日本時間の0時を条件とする場合は、UTC時間に変換(-9時間)した前日の15時を入力する。 

【注意点2】から… 

UTCを指定していることを明示するため、時刻の末尾にZを付する。 

【注意点3】から… 

特定の日付を抽出するときは、対象日付の開始日時 以上 終了日時 未満を指定する。

実行結果

テスト実行してみると、意図した範囲のアイテムを取得することができています。 

※わかりやすいように、選択アクションで列を絞っています。

9.png

おわりに

Power Automateでフィルタークエリを使用してSharePoint リスト上の日付や時刻を扱う際には、それぞれのタイムゾーンの違いや、ODataフィルタークエリでの記述ルールを正しく理解しておくことが非常に重要です。

本記事の内容が、皆さんの業務自動化に少しでも役立てば幸いです。

株式会社ITSOでは一緒に働く仲間を募集しています。

私たちは、真のデジタル変革の実現を目指すハイパーオートメーションカンパニーです。

「ITの力で未来の働き方をデザインし、人と企業の価値をリデザインする」ことをミッションに、先進的なハイパーオートメーションの技術を通じて、世界中の個人や組織がより多くの成果を達成できるよう支援しています。

1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?