はじめに
下記シリーズ連載の続きになります。
やってみたこと
計算グループ(Calculation Groups)使用してポジション別の平均体重、最高体重などを集計したテーブルを作成し、箱ひげ図で可視化する。
計算グループ / Calculation Groups とは
公式Documentsから引用。
計算グループを使用すると、一般的なメジャー式を 計算品目 としてグループ化することにより、冗長なメジャーの数を大幅に削減できます。
今回のレポートでいうと
公式HPより取得した選手一覧からポジションを抜き出すと、下記の11種類あります。
- PR
- HO
- LO
- FL
- NO8
- SH
- SO
- CTB
- WTB
- FB
- 登録なし
たとえばPRの平均体重を求めるDAXはこうなります。
PRの平均体重 =
CALCULATE (
AVERAGEX (
'Height&Weight',
'Height&Weight'[Weight]
),
'Height&Weight'[Position] = "PR(プロップ)"
)
通常通りDAXを書いていくと、この式をポジション別にあと追加で10個書く必要があります。
また、じゃあ平均身長、最高体重、最高身長、最低体重、最低身長・・なんて集計が必要なればなるだけ、×11個のメジャーを記述する必要が出てきます。
そこで登場するのが**計算グループ(Calculation Groups)**です。
必要なツール
計算グループ(Calculation Groups)はPower BI Desktopでは実装できません。
Tabular Editorというツールが必要です。無料版(コミュニティエディション)のTE2と、有料版のTE3があります。
スクリーンショットはTE3で撮っています。今回でてくる操作はTE2とTE3でほとんど変わりません。
実装
ということで、Tabular Editorを使用して実装に移ります。
ベースメジャーの作成
AVERAGEX(
'Height&Weight',
'Height&Weight'[Height]
)
身長の平均を求めるDAXを記述。この時点では、チームやポジションでのフィルターについては考慮しません。
Calculation Group
の作成
Tabular Editor を開いて、TOM ExplorerでTableを右クリックしてCalculation Group
をクリックします。
New Calculation Group
New Calculation Group ができたら、そこをさらに展開して、Calculation items
を右クリックしてCalculation item
作成へと進んでいきます。
Calculation item
作成
計算グループ(Calculation Groups)はここに具体的に記述していきます。今回はポジション別にさまざまな指標を求めていきたいので、ポジションごとのフィルターコンテキストを追加していきます。
ここで出てくるSELECTEDMEASURE()
関数が特殊で、評価時にベースメジャーに置き換わるプレースホルダーです。特に引数ももちません。
CALCULATE(
SELECTEDMEASURE(),
'Height&Weight'[Position] = "PR(プロップ)"
)
datastudio CALCULATE( SELECTEDMEASURE(), 'Height&Weight'[Position] = "HO(フッカー)" )
といったかたちでポジション分作成します。
順序の調整
Properties
のOrdinal
の数字を変更すると、小さい数字から順に並び替わります。スライサーなどにするときもこの順番が生かされるので、必要なら使用してください。今回はFWからBKになるように順番を決めてみました。
テーブル名、カラム名
計算グループ(Calculation Groups)を作成して、Power BI Desktopに反映すると下図のような名前になっています。Tableau Editorで確認すると、対応する部分がわかります。それぞれ、適当な名前をつけておきます。
Power BI Desktop
Tableau Editor
ビジュアルの作成
Power BI Desktop でマトリックスビジュアルを選択し、「行」にチーム名、「列」に計算グループ(Calculation Groups)を適用します。
ここまでしかやらないと、エラーが表示されます。
これはまだ**「値」**を設定していないため、ベースメジャーなく、SELECTEDMEASURE()
が置き換えるメジャーがないためエラーとなってしまっています。
ここで、値にAve_Height
を設定します。
Ave_Height = AVERAGEX(
'Height&Weight',
'Height&Weight'[Height]
)
結果1
期待通りの数値がでました。
ベースメジャーを追加
ここまで作成をすると、あとはベースメジャーを追加していくだけで、ポジションごとの集計を追加していくことができます。以下6項目でマトリックスを作成してみます。
- 平均身長
- 平均体重
- 最高身長
- 最低身長
- 最高体重
- 最低体重
Ave_Weight = AVERAGEX(
'Height&Weight',
'Height&Weight'[Weight]
)
`最高身長ベースメジャー.dax
MAX_Height = MAXX( 'Height&Weight', 'Height&Weight'[Height] )
MAX_Weight = MAXX( 'Height&Weight', 'Height&Weight'[Weight] )
結果2
ベースメジャーを**「値」**にどんどん放り込むだけで、各種指標でポジション別に数値を検証することが出来ました。
スライサーを追加
計算グループ(Calculation Groups) を使って作成したビジュアルは、**計算グループ(Calculation Groups)**のスライサーで表示をコントロール可能です。
横にかなり長い表になってしまっているので、LO
でフィルターします。
結果3
無事期待どおりの数値が出ています。
箱ひげ図の追加
デフォルトのビジュアルでは箱ひげ図はサポートされていないので、カスタムビジュアルを追加します。今回はこれを追加しました。
箱ひげ図はデータの最大値、最小値、四分位数、四分位範囲、平均値が一目でわかり、大まかな散らばり具合を把握でき、複数のデータを比較しやすいという特徴があります。
結果4
箱ひげ図を作成することができました。ざっと見た感じで、FLとCTBの体格分布が似ていることなどがわかります。散布図ではわかりにくかったデータの広がりも比較しやすくていいですね。
完成
まとめ
計算グループ(Calculation Groups)を使用してレポートを作成できました。計算グループ(Calculation Groups)の使用場面の王道はタイムインテリジェント関数との組み合わせで解説しているものがほとんどですが、こういったよりシンプルな題材で手を動かせば理解は早くなるなと感じます。とても便利な半面、よくよく調べていくと落とし穴もたくさんあるので、少し複雑な局面で使う際には要注意な関数だと思います。公式DocumentsやSQLBIなど勉強必須
公式Documents
参考資料