Power BI - 知らないM関数でも簡単に理解して使う方法(例:一意の値が載ったリストが欲しい時)
Power BI desktopでDAX関数で色々とメジャーを作りだしたら、
次は、「M言語も理解したいなぁ」という気持ちがわいてくると思います。
でもM言語は、リファレンスを見ても、
ちょっととっつきにくい雰囲気がありますよね。
でも!
ありますよ!
実務をしながら、理解を深める方法が!
と、大げさに言いましたが、
僕が勝手に感動しているだけかもしれません。。
その方法を先に書くと、
クエリエディタで
=M関数
と書くだけです!
以下、具体例を書いてみます。
具体例:リストが欲しい時
例えば、
既に取り込み済みのファクトテーブルを、
その他のどの取込み済みのテーブルともリレーションシップを設定していない、独立したフィルター用のテーブルでフィルタリングしたいと思った時、
そのフィルター用のテーブルを取り込み済みのファクトテーブルから作ることになりますよね。
そのやり方として、「参照」や「複製」を使う方法もありますが、
もっと簡単なやり方があります。
※一応、「参照と複製」の違いについてはこちらです。
それは、次の手順でやります。
まずこんなテーブルがクエリエディタに取り込まれているとします。
(MSのサンプルファイルを使っています)
一番左の列に、「Segment」情報があるのですが、
各レコード(=行 ※PBIでは行のことを「レコード」と呼びます)は、
日々の取引記録なので、「Segment」列には、一意の値ではなく、
重複した値が含まれています。
ここから、一意の値が列挙された「Segment」のマスターテーブルを作りたいと思います。
M関数を完全に理解していない段階での作業ステップ1:リファレンスで関数の概要を確認!
まず、どんなM言語が使えそうかなぁと
M言語のリファレンスを確認しに行きます。
なんとなく、「リスト」を作りたいんだから、「リスト関数」かなぁと考えて、リスト関数の概要を見てみます。
そしたら、ありましたね、
List.Distinct関数です。
この段階で、このM関数のパラメータや計算内容を詳しく理解する必要はありません。そんなに力まないで、次のステップにいきましょう。
M関数を完全に理解していない段階での作業ステップ2:とりあえず「空のクエリ」にM関数をぶっこんでみよう!
まずは「空のクエリ」を作ります
クエリエディタの左サイドバーで右クリックし、
「新しいクエリ」>「空のクエリ」を選択します
そしたら、数式バーに
=List.Distinct
とだけ入力してEnterを押しましょう!
ここで覚えておくべきポイントが2つあります。
1.M関数は、アルファベットの大文字と小文字を間違うだけで機能しなくなる
2.数式バーにM関数だけ打ち込むと、関数の説明と必要なパラメーターを表示してくれる
M関数を完全に理解していない段階での作業ステップ3:表示されたM関数の説明通りにパラメーターを設定してみる
ステップ2の作業が終われば、こんな画面が出てきます。
僕は最初このやり方を発見した時に、めっちゃ感動したのですが、
=M関数とだけ空のクエリに突っ込めば、
わざわざリファレンスや海外サイトを調べに行かなくても、
とりあえず進められそうですよね!
List.Distinct関数の場合は、「列の選択」だけやってしまえば、
一意の値だけを含むリストを作成してくれそうですので、
作成したいリストであり、financialsテーブルのSegment列を選択します。
対象の列を選択して「OK」を押すと、
「list」と書かれた下に、先ほど選択したクエリ「financials」列「Segment」が表示されました。
あとは、「呼び出し」を押すだけです。
「呼び出し」を押すと、、
できました!
とても簡単にできましたね。
リストを作る場合は、「参照」や「複製」をして、フィルターをかけていくやり方よりも、こちらの方が簡単ですね
目的のM関数の使い方を理解したら
以上のステップ1~3をやれば、
試してみたM関数(今回はList.Distinct関数)のパラメータの設定方法が理解できます。
そしたら、もう関数のクエリ(クエリの横に「fx」マークの付いたクエリ)は不要です。
関数クエリと呼び出された関数が表示されていて、見栄えもよろしくないですよね。
もっとシンプルに、一発でリストを出力しましょう。
呼び出された関数を見てみてください。
数式バーには次のような式が入っています。
= クエリ1(financials[Segment], null)
この「クエリ1」という部分は、
List.Distinctと同義なので(というか、そのようにステップ2で自分で定義しただけなので)、
空のクエリをもう1つ作って、今度は、
= List.Distinct(financials[Segment], null)
と入れてみます。
すると、
でました。
関数の説明をすっ飛ばして、直接リストが出力できました。
まとめ
M関数が分からないときは、
1.リファレンスでM関数のあたりを付ける
2.「空のクエリ」の数式バーに「=M関数」と入れてみる
3.表示された関数の説明に従って、パラメータを設定してみる
4.「呼び出された関数」が目的通りなら、そのパラメータ部分をコピーして、「空のクエリ」に直接、M関数とそのパラメータを入力する
以上の4ステップで、たいていどうにかなると思います。
以上になります。