Power BI - 知らないM関数でも簡単に理解して使う方法(例:一意の値が載ったリストが欲しい時)

Power BI desktopでDAX関数で色々とメジャーを作りだしたら、
次は、「M言語も理解したいなぁ」という気持ちがわいてくると思います。

でもM言語は、リファレンスを見ても、
ちょっととっつきにくい雰囲気がありますよね。

でも!

ありますよ!

実務をしながら、理解を深める方法が!

と、大げさに言いましたが、
僕が勝手に感動しているだけかもしれません。。


その方法を先に書くと、
クエリエディタで

=M関数

と書くだけです!


以下、具体例を書いてみます。

具体例:リストが欲しい時

例えば、

既に取り込み済みのファクトテーブルを、
その他のどの取込み済みのテーブルともリレーションシップを設定していない、独立したフィルター用のテーブルでフィルタリングしたいと思った時

そのフィルター用のテーブルを取り込み済みのファクトテーブルから作ることになりますよね。

そのやり方として、「参照」や「複製」を使う方法もありますが、
もっと簡単なやり方があります。

※一応、「参照と複製」の違いについてはこちらです。

それは、次の手順でやります。

まずこんなテーブルがクエリエディタに取り込まれているとします。
(MSのサンプルファイルを使っています)

画像1

一番左の列に、「Segment」情報があるのですが、

画像2

各レコード(=行 ※PBIでは行のことを「レコード」と呼びます)は、
日々の取引記録なので、「Segment」列には、一意の値ではなく、
重複した値が含まれています

ここから、一意の値が列挙された「Segment」のマスターテーブルを作りたいと思います。


M関数を完全に理解していない段階での作業ステップ1:リファレンスで関数の概要を確認!

まず、どんなM言語が使えそうかなぁと
M言語のリファレンスを確認しに行きます。

なんとなく、「リスト」を作りたいんだから、「リスト関数」かなぁと考えて、リスト関数の概要を見てみます。

そしたら、ありましたね、
List.Distinct関数です。

画像4

この段階で、このM関数のパラメータや計算内容を詳しく理解する必要はありません。そんなに力まないで、次のステップにいきましょう。


M関数を完全に理解していない段階での作業ステップ2:とりあえず「空のクエリ」にM関数をぶっこんでみよう!

まずは「空のクエリ」を作ります

クエリエディタの左サイドバーで右クリックし、
「新しいクエリ」>「空のクエリ」を選択します

画像5

そしたら、数式バーに

=List.Distinct

とだけ入力してEnterを押しましょう

ここで覚えておくべきポイントが2つあります。

1.M関数は、アルファベットの大文字と小文字を間違うだけで機能しなくなる
2.数式バーにM関数だけ打ち込むと、関数の説明と必要なパラメーターを表示してくれる


M関数を完全に理解していない段階での作業ステップ3:表示されたM関数の説明通りにパラメーターを設定してみる

ステップ2の作業が終われば、こんな画面が出てきます。

画像6

僕は最初このやり方を発見した時に、めっちゃ感動したのですが、
=M関数とだけ空のクエリに突っ込めば
わざわざリファレンスや海外サイトを調べに行かなくても、
とりあえず進められそうですよね!

List.Distinct関数の場合は、「列の選択」だけやってしまえば、
一意の値だけを含むリストを作成してくれそうですので、
作成したいリストであり、financialsテーブルのSegment列を選択します。

画像7

対象の列を選択して「OK」を押すと、

画像8

「list」と書かれた下に、先ほど選択したクエリ「financials」列「Segment」が表示されました。

あとは、「呼び出し」を押すだけです。

「呼び出し」を押すと、、

画像9

できました!

とても簡単にできましたね。

リストを作る場合は、「参照」や「複製」をして、フィルターをかけていくやり方よりも、こちらの方が簡単ですね

目的のM関数の使い方を理解したら

以上のステップ1~3をやれば、
試してみたM関数(今回はList.Distinct関数)のパラメータの設定方法が理解できます。

そしたら、もう関数のクエリ(クエリの横に「fx」マークの付いたクエリ)は不要です。
関数クエリと呼び出された関数が表示されていて、見栄えもよろしくないですよね。

もっとシンプルに、一発でリストを出力しましょう。

呼び出された関数を見てみてください。
数式バーには次のような式が入っています。

= クエリ1(financials[Segment], null)

この「クエリ1」という部分は、
List.Distinctと同義なので(というか、そのようにステップ2で自分で定義しただけなので)、
空のクエリをもう1つ作って、今度は、

= List.Distinct(financials[Segment], null)

と入れてみます。

すると、

画像10

でました。
関数の説明をすっ飛ばして、直接リストが出力できました。


まとめ

M関数が分からないときは、

1.リファレンスでM関数のあたりを付ける
2.「空のクエリ」の数式バーに「=M関数」と入れてみる
3.表示された関数の説明に従って、パラメータを設定してみる
4.「呼び出された関数」が目的通りなら、そのパラメータ部分をコピーして、「空のクエリ」に直接、M関数とそのパラメータを入力する

以上の4ステップで、たいていどうにかなると思います。

以上になります。

この記事が気に入ったらサポートをしてみませんか?