SharePoint リスト、または、Microsoft リストを利用すると様々なビューを作成しますが、最もよく利用する設定が「フィルター」かと思います。このフィルターは AND や OR を利用して複数条件を組み合わせて設定することができるのですが、そうなると気になるのは評価順がどうなっているのかという点ですね。一般的には AND が OR よりも優先されて処理されるように思ってしまうのですが、動作を見ているとそうではなさそうです。
というわけで、フィルターの条件指定順を変えるとどういった結果になるのか試してみたいと思います。
元データを用意
まずは適当にデータを入れておきます。このデータを基にフィルターを適用していきたいと思います。
フィルター条件が 1 つの場合
まずはフィルター条件がひとつだけのフィルターを試してみます。条件は「カテゴリ = SharePoint」です。
ここまでは特に問題ないですね。
フィルター条件が 2 つの場合
つぎはフィルター条件を増やして 2 つにしてみます。AND と OR の 2 つのパターンを試してみましょう。
a AND b
AND で条件を組み合わせたパターンです。条件は「カテゴリ = SharePoint AND 期日 >= 今日 (2021/05/17)」です。
こちらは予想通りですね。
a OR b
OR で条件を組み合わせたパターンです。条件は「カテゴリ = SharePoint OR 期日 >= 今日 (2021/05/17)」です。
こちらも予想通りですね。
フィルター条件が 3 つの場合
さらにフィルターの条件を増やして 3 つにしてみます。組み合わせが増えてきました。
a AND b AND c
条件は「カテゴリ = SharePoint AND 期日 >= 今日 (2021/05/17) AND 担当者 = 空白」です。
こちらは予想通りですね。
a AND b OR c
条件は「カテゴリ = SharePoint AND 期日 >= 今日 (2021/05/17) OR 担当者 = 空白」です。
(a AND b) OR c の結果になっていることがわかります。
a OR b AND c
つぎは OR を最初に持ってきてみましょう。条件は「カテゴリ = SharePoint OR 期日 >= 今日 (2021/05/17) AND 担当者 = 空白」です。
(a OR b) AND c の結果になっていることがわかります。どうやら AND と OR のどちらかが優先されるのではなく、フィルターを指定した順序通りに評価されているようです。
a OR b OR c
念のためもうひとつのパターンも確認しておきましょう。条件は「カテゴリ = SharePoint OR 期日 >= 今日 (2021/05/17) OR 担当者 = 空白」です。
ちょっと元データが良くなかったですね。元データが全部表示されてしまいましたが、結果としては予想通りですね。
AND と OR の組み合わせを深掘り
なんとなく AND と OR を組み合わせたフィルター条件はクセがありそうだと分かったので、こちらに絞って深掘りしてみましょう。というわけで、「a AND b OR c」の順序を入れ替えて「c OR a AND b」を確かめてみます。指定順番通りに処理される場合、こうした入れ替えは違う結果をもたらすはずです。
c OR a AND b
条件は「担当者 = 空白 OR カテゴリ = SharePoint AND 期日 >= 今日 (2021/05/17)」です。(c OR a) AND b の結果になっていることがわかります。
ちなみに a AND b OR c つまり「カテゴリ = SharePoint AND 期日 >= 今日 (2021/05/17) OR 担当者 = 空白」のときは次の通りでした。
これらを見比べてみても、「a AND b OR c」と「c OR a AND b」とでは結果が全くことなることが分かります。SharePoint リストビューでフィルターの設定をするときは、条件の指定順序に注意する必要があることがわかりました。
結論: SharePoint リストビューのフィルター条件は指定する順序に注意
試してみた結果としては、SharePoint リストビューのフィルター条件に AND と OR を組み合わせた条件を指定したときには、条件を指定した順序通りに評価されるため、その指定順序にも気を配る必要があることがわかりました。
たとえば「a AND b OR x AND y」と指定した場合には、「((a AND b) OR x) AND y」と評価されることになります。
そのため「(a AND b) OR (x AND y)」のような 2 つの AND 条件をさらに OR 条件で指定するようなフィルター条件については、単純なリストビューのフィルター設定では実現することができないことになります。複雑な条件を指定したい場合には頭を悩ませるポイントになりそうです。
さいごに
というわけで、複雑なフィルターを設定しようとするといつも悩ませてくるフィルター条件の順序について簡単に動作を確かめてみました。特に AND と OR を組み合わせた条件は、3 つまでの組み合わせで実現できるように考えたほうが良さそうです。4 つ以上になった場合には、ときには簡単に実現できないパターンが出てくるため、他の手段を考える必要が出てきそうですね。