- データ分析を始めたいが特に使うツールが決まっていない方
- Power BIでどんなことができるか知りたい方
- Power BIを使い始めたばかりで基本から学びたい方
▶ 中間テーブルを作ってリレーションシップの設定をする方法はこちらをご覧ください
▶ カレンダーテーブルの作成方法はこちらの投稿をどうぞ
はじめに
今回はPower BIでよく使うDAX関数の1つであるFilter関数を基本から解説します。Fileter関数はフィルター関数群の1つです。これらを使用すると動的な計算を作成できます。非常に強力なツールとなるので、まずは基本としてFilter関数を押さえることにしましょう。
Filter関数
Filter関数は、「別のテーブル、あるいは、サブセットを表すテーブル」を返します。単独で使われることもありますが、Calculate関数など他の関数との組み合わせで利用されることも多いです。まずは書式を確認し、順に使用例を見ていくとにしましょう。
第一引数にはフィルター処理をするテーブルを指定します。次に第二引数でフィルターする条件を指定します。この条件は「テーブルの行ごと」に評価されます。
以下のサンプルデータを用いて試してみましょう。

単独で使う場合
書式で確認したようにFilter関数の返り値はテーブルですね。データ画面で「新しいテーブル」を選択して早速、使ってみましょう。

すると以下のように「新しいテーブル」を定義する画面となります。ここでFilter関数を使って「基となるテーブルの指定」、「そのテーブルに適用する条件の指定」をします。

今回は動物たちの「テスト結果」というテーブルに対して、2019年のデータのみという条件を指定(①)しました。その結果、条件に合致したテーブルが得られました(②:2019年のデータのみのテーブル)
他の関数と組み合わせて使う場合
次に他の関数と組み合わせて使う場合についても見ておきましょう。同じ要領で使えますが、ここではCalculate関数、Countrows関数と組み合わせた場合の2例をみておきましょう。
Calculate関数の中で使う
Calculate関数の書式を確認しておきましょう。
第一引数で「計算したいもの」を指定して、第二引数で「条件」を加えます。早速やってみましょう。今度は動物園の売上データを使うことにしましょう。まずはデータ画面で「新しいメジャー」をクリックします。
3つの動物園の各年の売上のデータがあります。ここでは「ズーラシアの売上」という新しいメジャーを作ることにしましょう。Calculate関数の第一引数はSum関数ですね。

第二引数では、Filter関数を使って条件を指定しています。Filter関数の第一引数で「動物園の売上」テーブル、第二引数で科目が「ズーラシア」のみ抽出する条件を指定しています。正しくできているかどうかをレポート画面で確認してみましょう。

テーブルを選択して、列に「年」「売上の合計」「ズーラシアの売上」を指定したレポートです。売上の合計が「旭山動物園」「上野動物園」「ズーラシア」の3つの動物園の売上の合計となっているのに対して、「ズーラシアの売上」は「ズーラシア」のみの売上が算出できてそうですね。
念のため確かめておきましょう。もう一つテーブルを作って、どうぶつえんごとの売上がわかるようにしましょう。

「ズーラシアの売上」の列で表示されているのは、確かに「ズーラシア」のみを抽出したものになっていますね。
Countrows関数の中で使う
もう一つ例を見ておきましょう。今度は、Countrows関数と組み合わせた場合です。こちらの関数の書式は以下となります。
Countrows関数では、指定されたテーブル内、または式で定義されたテーブル内の行の数をカウントします。なので、返り値は整数となります。
早速試してみましょう。今度は売上が40,000以上となるデータをカウントするメジャーを定義してみましょう。

先ほどと同様の手順で新しいメジャーを定義します。今度はCountrows関数を使うので、引数はテーブルとなります。このテーブルの指定時にFilter関数でテーブルのサブセットを指定します。
結果が正しく表示されているか試してみましょう。

元のデータをみてみると、確かに40000以上のデータは5つになっていますね。
まとめ
今回はFilter関数について解説しました。Filter関数はテーブルに適用して、別のテーブルあるいは、テーブルのサブセットを返します。単独で使う場合もありますが、よく使うのは他の関数との組み合わせでしょう。特にCalculate関数との組み合わせもよくみますね。頻出の関数なのでしっかり理解しておきましょう。
コメント