MoreBeerMorePower

Power Platform中心だけど、ノーコード/ローコード系を書いてます。

Power Automate / Logic Appsで複雑なフィルター条件設定

はじめに

仕事ではSharePoint 2013をまだまだ使っているのですが、リストのビューで複雑なフィルター条件にはSharePoint Maniacsの以下の記事がとても役立っていました。

sharepointmaniacs.com

今回は、こんな感じで複数のフィルター条件を組み合わせる場合の処理をPower AutomateやLogic Appsで実行する方法を紹介していきます。

なお、複数のフィルター条件といっても、頑張ってフィルターの式を書くことはしません。

準備

列の構成

  • column1:はい/いいえ 列
  • column2:選択肢列 {A,B,C}
  • column3:数値列

フィルター条件

  • 条件A : column1 = はい
  • 条件B : column2 = A
  • 条件C : column3 >= 500

データソースはListsにして、上記の設定でアイテムを作っておきます。

f:id:mofumofu_dance:20201009131751p:plain
利用するリスト

パターン1 : 条件A AND 条件B

すべての複雑なフィルター条件は、分解すれば基本的にはANDとORです。

まずは条件A AND 条件Bで基本を押さえます。

初めにデータソースからアイテムを取得し、条件Aのフィルターを適用します。配列(リスト)に対してフィルターをかける時には、「アレイのフィルター処理」アクションを利用してください。

f:id:mofumofu_dance:20201009132728p:plain
条件Aの適用

はい/いいえ列はtrue/falseで取得できる点に気をつけましょう。

複数の条件をANDで適用する場合には2つの条件で続けてフィルター処理を行います。

「条件A AND 条件B」であれば、条件Aを適用した結果に、さらに条件Bを適用すればAND条件の結果が得られます。

条件Aのフィルター処理の結果をインプットとして、さらにアレイのフィルター処理を実行します。この際、条件には

item()?['column2']?['Value']

を式から挿入します。※もちろん先に「JSONの解析」アクションをいれて動的コンテンツから選んでもよい

f:id:mofumofu_dance:20201009133535p:plain
条件Bを続けて適用

ここまででフローを実行してみます。結果を確かめやすいように「HTMLテーブルの作成」アクションを追加して必要な列のみ表示しています

下図のとおり、確かに期待される「column1=はい AND column2 = A」の結果が得られました。

f:id:mofumofu_dance:20201009134229p:plain
条件A AND 条件Bの結果

パターン2 : 条件B OR 条件C

次に、基本となるパターン 条件B OR 条件Cをやってみます。 ANDとの違いを分かりやすくするために、Listsからのアイテム取得のあとに「アレイのフィルター処理」を2つ並列に追加します。

適用する条件は、この場合には動的コンテンツから追加して下図を参考に設定してみてください。

f:id:mofumofu_dance:20201009135433p:plain
条件Bと条件Cの並列実行

さて、ポイントですが、複数の条件をORで適用する場合には2つの条件を独立に実行して、最後にunionを行います。

union関数は、2つの配列を統合し、重複を排除してくれます。 この性質により、条件Bと条件Cの和集合が得られるのです。

f:id:mofumofu_dance:20201009135858p:plain
フィルターを施した後、2つの結果をunionする

結果も期待通り、「column2がAか、またはcolumn3が500以上」になっています。

f:id:mofumofu_dance:20201009140335p:plain
OR条件でのフィルター結果

パターン3: (条件A AND 条件B) OR 条件C

少し発展的に、3つの条件を組み合わせるパターンを1つやってみます。考え方は変わらず、ANDは続けてフィルター、ORは独立にフィルターしてunionです。

まずは(条件A AND 条件B)を適用します。パターン1と同様の処理ですので、詳細は割愛しますが、フローの全体は以下のようになります。

f:id:mofumofu_dance:20201009141438p:plain
(条件A AND 条件B) OR 条件C の処理全体

これで期待の結果が得られました。

f:id:mofumofu_dance:20201009141737p:plain
3つの条件の処理結果

おわり

配列のフィルター処理は、複雑にしようと思うと途端に条件式が複雑&長くなり非常に厄介です。

しかし、複数のフィルター処理アクションをうまく組み合わせることで、式を頑張って書くことなく望みの処理結果が得られるということをご紹介しました。

最後にもう一度。

複数の条件をANDで適用する場合には2つの条件で続けてフィルター処理

数の条件をORで適用する場合には2つの条件を独立に実行して最後にunion

複雑な抽出条件を適用したい場合には参考にしてみてください。