見出し画像

Power BI -イテレータ関数(SUMX, MINX, COUNTXなど)の概要と例#1

Power BI を使い始めの方がDAXを使ってメジャーを作成していくと、
ある時点で SUMX関数に遭遇し、躓きそうになる人が多いと思います。

僕もSUMX関数は(過去の記事で調べまくっている様子を見てもわかるように)鬼門でした笑

多分Excelユーザーにはなじみのない関数で、
PythonとかCとかでプログラミングをされてきた方にとっては、
「イテレータか」とすぐに理解できるのかもしれませんが、
僕もイテレータ(SUMX等)には、
かなり理解にてこずりました。

イテレータ関数とは

イテレータ関数は、「反復関数」と訳されますが、
ざっくりこんな特徴があります。

✓ 特定のテーブルの全ての行を列挙し、各行に対して(一行ずつ)、特定の式を評価する(←これを「反復処理」という)
✓ 全ての反復関数は、「テーブル」と「評価式」の2つの引数を必要とする
✓ 「テーブル」は参照先のテーブル(リレーションシップで関連付けられた計算対象数値を含まない別のテーブル)や、テーブルを返す数式を指定することが出来ます。
✓ 「評価式」は、スカラー値(数値)を返す評価式を入れる必要があります(文字列は評価対象にできません)。
✓ SUMやAVERAGEなど、単一列を評価対象とする関数は、イテレータ関数の「省略形」(簡易版)として位置づけられている

概要をまとめると、こんな感じです。

スライド2


具体例で理解する

初見に近い方にとっては、
「反復って何?」という感覚がまだ残っていると思うので、
具体例を作成してみました。

具体例では次のシンプルなテーブルを使用します。

スライド3


まず、1つ目の具体例は、
[Sales Amont]列の単純合計を算出するケースです。

スライド4


次に、"単純合計"ではなく、
[Sales Amount]列の値に (1 - [% of License fee]) を乗じた値の合計を出したい場合の例です。

スライド5

SUM関数では、一発で処理しきれなくなりました。


次に、平均値を算出する場合です。
なお、この例でいう「平均」とは、Salesテーブルの[Sales Amount]列の合計を、Salesテーブルの行数(3行)で除した値を意味しています。

スライド6


次に、Salesテーブルの行ごとの平均ではなく、
Productごとの平均(つまり、[Sales Amount]列の合計を[Product]の種類数(2種類)で除した値)を求めたい場合の例です。

スライド7


最後に、1つ上の具体例と大して差はないですが、
確認のため。

スライド8



以上になります。

SUMX関数を直接理解しに行こうとするのではなく、
イテレータ関数の性質をまずは理解することで、
SUMXのみならず、他の'X'の付く関数の理解も進むと思います。

強調のため再度書きますが、
イテレータ関数は、
①指定したテーブルの行数回だけ、第2引数で指定した評価式を反復処理する
②①の反復計算が終わったら、そのイテレータ関数の特徴に応じた最終処理がされる(SUMXなら反復処理した各結果を合計し、AVERAGEXなら反復処理した各結果の合計を反復計算した数で除す)

というのがポイントとなります。


また、Power BIで躓きやすそうなところについて、
書いていきたいと思います。

でわ

いいなと思ったら応援しよう!