今回はフィルターを通したテーブルを返してくれるFILTER関数を初心者目線で紹介したいと思います。

難易度の高いDAX式を作っていくほど、メジャーや計算列を作っていくほど避けては通れない関数です。避けては通れないと言っても、自分にとって壁になるのではなく、使わずにはいられないと言う意味です!!

FILTERの基本

MSのリファレンスにはこの通り書かれています。

別のテーブルまたは式のサブセットを表すテーブルを返します

この説明が最初パッとこなかったですが、さらにわかりやすく言うと、
FILTER関数は、指定されたフィルターを適用したテーブルを返すもの

そして定義されている構文は以下の通りです。

FILTER(<table>,<filter>)
FILTER(<表>,<表に適用したいフィルター>)

<table>(表)

こちらには返したいテーブルを渡します。(フィルターを適用するテーブル)。ここに渡すテーブルはPower Queryでインポートしたテーブルでも、計算テーブルとしてDAXで作ったテーブルでもOKです。

<filter>(表に適用したいフィルター)

こちらには<table>で私たテーブルに大して適用したいフィルターを並べていきます。

フィルターの例は次のセクションで紹介します。

テーブルに適用できるフィルター

あるテーブルにかけられるフィルターとして整数などの数字フォーマットの場合は
x以上、x以下、xとイコールまたはそれ以上、イコール、空欄か。

テキストのフォーマットの場合は、
”x”が含まれているか、”x”と同じか、文字数によって、空欄か。

日付の場合は、
x日より後か、x日より前か、x日より同じか、月が同じか、年が同じか、x日とx日の間。

まず考え方として、元々あるテーブルにマウスを使ってかけられるフィルターはFILTER関数でもできる思ってください。これに加えて他の関数を使って更に高度なフィルターをかけることもできます。(例えば、この値と関連がある他のテーブルの値を比べたフィルターなど。)なので上で紹介したフィルターの例は本当に氷山の一角なのです。

使い道

FILTER関数の用途の例としては、計算をする時です。計算をする時には母数や他の数字を見つけるためにこのFILTER関数を使うのです。数々のフィルターを通して戻ってきたテーブルの行数を数えて数字を見つけるのです。この時FILTER関数を使って実際にテーブルを作るのではなく、メモリーの中で仮想テーブルを作り出しながら計算して行くのです。

FILTER関数を使ってみる

このセクションでは実際にフィルター関数を使っていきたいと思います。FILTER関数がどのような挙動をするのかを確かめるために新しいテーブルでFILTER関数を使っていきます。

まずはシナリオ

今回もRANKXの使い方で使ったとてもシンプルな表を使いたいと思います。内容としては、月々のテストの結果をまとめた表です。

テーブルの名前:Test Marks by Month

1列目:日付(日付フォーマット)

2列目:点数(整数フォーマット)

実際にFILTER関数でテーブルにフィルターを1つかけてみる

演習用に、今回は上のテーブルにフィルターを1つだけかけます。そして返えされたテーブルの行の数を数えて確かめます

構文を確かめます。

FILTER(<table>,<filter>) ですので、<table>にはテーブル名の”Test Marks by Month”が入り、filterにフィルターを入れていきます。

点数が100だけを残すフィルター

完成するDAXは以下の通りです。

FILTER('Test Marks by Month','Test Marks by Month'[点数]=100)

フィルターの部分は
’Test Marks by Month'[点数]=100

考え方としてはフィルターを掛けたい列当てたいフィルターです。結果は以下の通りです。

列の面で見てわかるのが、フィルターをかけているのは1列だけですが返ってくるのは全ての列ですね。

行の面では、点数イコール100のフィルターを掛けているのでやはり返ってきたのは点数が100の1行ですね。

点数が90位上だけを残すフィルター

今回は点数が90位上だけを残すフィルターです。できるDAXは以下の通り。

FILTER('Test Marks by Month','Test Marks by Month'[点数]>=90)

結果は以下の通りです。90位上の行7行が返ってきます。もちろんそれに加えて全ての列も戻ってきます

FILTER関数でテーブルにフィルターを2つかけてみる(複数条件)

次はFILTER関数に複数のフィルターを当てる方法です。今回は二つ掛けてみます。

フィルターを複数かける方法は、各フィルターの間に&サインを二つ付けるとできます。構文に当てはめてみると、下の通りになります。”&&”を付けるだけで複数フィルター条件を付けることができます。

FILTER(<table>,<filter>&&<filter>&&<filter>)

点数が90点位上、98点未満だけを残すフィルター

条件が二つある場合はAND関数などで示せますが(後に紹介)、今回はフィルターを複数付ける方法を使います(&&を付ける)できるDAXは以下の通りです。

FILTER('Test Marks by Month','Test Marks by Month'[点数]>=90&&'Test Marks by Month'[点数]<98)

上の通り、「&&」を使ってフィルターをつなげています。今回は同じ列に二つフィルターを掛けていますがもちろん別の列にフィルターをかける事もできます。結果は下の通り。

しっかりと90位上98未満の点数の5行が返されています。加えて他の列も返されています。

FILTER関数で関数をフィルターに組み込む(AND関数)

関数のフィルター部分は、必ずしも<、>や=と言った不等号でなくも良いのです。

先ほどの90点以上の98点未満のフィルターですが、AND関数を使って「両方とも条件を満たす場合」と言うフィルターを付ける事ができます。完成するDAXは以下の通りです。

FILTER('Test Marks by Month',AND('Test Marks by Month'[点数]>=90,'Test Marks by Month'[点数]<98))

上のようにFILTER関数のフィルター部分に関数を当て、その関数が返す値をフィルターとする事ができます。AND関数はもし両方の条件が満たされればTRUEを返します。逆にもし片方でも条件外だった場合は、FALSEを返します。
このプロセスを点数列の値1つ一つに適用します。AND関数の戻り値がTRUEであればFILTER関数の戻り値のテーブルに含まれます。

まとめ

基本の構文は以下の通りです。

FILTER(<table>,<filter>)

FILTER(<>,<表に適用したいフィルター>)

その他のポイント

  • <table>と<filter>はどちらも同じテーブル内でなければならない
  • フィルターは複数、「&&」を使って適用できる
  • フィルターに関数を置き、その戻り値をフィルターに使う事ができる。
  • 複数の列にフィルターをかける事ができる
  • 1つの列だけにフィルターを掛けたとしても全ての列が返ってきます

以上、「【Power BI DAX】初心者のためのFILTER関数の使い方」でした。

シェアする:

kazu

イギリスで情報セキュリティー関係を目指す大学生ブロガー 旅行と食べる事と写真撮影が趣味です。イギリスに来る留学生の手助けをメインテーマに書いていきます。 あ、ちょくちょくIT系も書いていきます笑

1件の返信

  1. 2020年4月12日

    […] 【Power BI DAX】初心者のためのFILTER関数の使い方https://kazuworldtravel.com/power-bi-dax-filter/今回はフィルターを通したテーブルを返してくれるFILTER関数を初心者目線で紹介したいと思います。難 […]

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です