Power Apps のキャンバスアプリを作成しようと SharePoint リストをデータソースとして作り始めたのですが、リストから取得されたデータに対して Filter 関数で絞り込みを行おうとしたところ、「はい/いいえ」列に対する絞り込みの不具合らしき動作にぶち当たり時間を浪費してしまいました…。
Filter 関数で「はい/いいえ」列を含む And や Or の複数条件の組み合わせで絞り込みを行う場合は注意が必要になりそうです。
忘れないようにメモしておきます。
SharePoint リストのデータ
状況の説明用として、「数値」列と「はい/いいえ」列を追加した次のようなリストを用意しておきます。
不具合を確認する
確認した不具合は次のようなものです。先ほどのリストのデータに対して「数値が 5 以上」かつ「はい/いいえが true」のものを対象に絞り込みを行っていますが、条件に一致していない Item.5 や Item.9 などが表示されています。
回避策の検証
まず考えられる回避策は Filter 関数の条件式を「’はい/いいえ’ = true」から「’はい/いいえ’」のみに変更する方法です。この列の値は元々が Boolean 値なので、これだけでも条件式として成り立ちます。
するとどうでしょう。なんと条件式が意図通りに評価され、必要なデータがきちんと表示されています。しかしながら、やっかいな委任の警告が出てしまっており、データ数が多い場合には注意が必要になります。
つぎに試したのは、同じく Filter 関数の条件式を 「’はい/いいえ’ = true」から「’はい/いいえ’ = 1」に変更する方法です。これでも正しく条件式として評価されました。
こちらも問題なく意図通りに動作しますが、Boolean と Number は型が違うため比較できないという警告が表示されます。ただし、意図通りに動作します。しかも、数万件データがあるリストに対しても正しく動作するように見えます。つまりは、きちんと委任される動作にもなっているようです。警告は出ますが、それを無視すれば問題なく利用できそうです。
どうやら「はい/いいえ」列は複数条件では false しか上手く評価されない
いろいろ試していて気が付いたのですが、どうやら Filter 関数に「はい/いいえ」列を含む複数条件を指定するときには、「はい/いいえ」列を true または false で判定する場合「false」しか上手く評価されません。
これはバグなんじゃないかと思います…。
「はい/いいえ」列の単一条件では問題なし
この不具合が起こるのは、あくまでも複数の条件を組み合わせるときのみで、単一の条件の場合には問題ありませんでした。
この場合には「はい/いいえ」列が true であるの条件で、意図通りに評価され絞り込むことができます。
結論:「はい/いいえ」列の値が「はい」である条件を含む複数条件で絞り込みたいときは
上記の通り、検証した結果からは「はい/いいえ」列を含む複数条件では、値が true であるという条件は正常に動作しません。
それを回避するには警告は出ますが、値が「1」であるの条件式で問題なく動くように見えます。
その警告も許せないという場合には、SharePoint リスト側で「はい/いいえ」列の利用をやめて、「選択肢」列で代用するなどの工夫が必要でしょう。
さいごに
Filter 関数を利用して複数の条件を組み合わせようとしたときのみに発生する不具合であったので、なぜ起きているのか理解に苦しみました。検証した結果からは、これはバグであるとしか考えられないので、これを理解した上で上手く付き合っていきましょう。
この事象の根本的な解決策を知っているよ!という方がいましたら、ぜひ教えて欲しいです。