Power BIクイックメジャー「星評価」


はじめに

 Power BIのメジャーを腹落ちして理解するために、Qiitaを読んだり、調べたりしました。その延長線で、クイックメジャーという高度なメジャーを自動作成する機能がいいね!、面白い!と感じたので、そのメモを記します。

メジャーを理解するのに有用なリファレンス等

 メジャーを理解するのに素晴らしいリファレンス等は以下です。

 計算列とメジャーの違いをよく理解しよう、という話がよく挙がりますが、「できるPower BI」レッスン51(P244)のまとめを引用すると以下になります。

メジャー 計算列
意味 集計のための計算式 データモデルのテーブルに列を作成
・レポートでビジュアルが表示されるときに計算が実行される(レポート内のフィルター操作などで結果値が変わる)
・データビューでは値は直接確認できない
・データモデルのテーブルに列を追加する
・数式の計算結果は列値となるため、データビューで列や値を表示して確認できる
結果の出力                    
主な用途 合計や平均など、集計に利用 売上や利益など複数の列を利用した計算結果を含めた列の作成、またほかの列の値を元に、文字列操作を行って、分析軸となる列の作成

メジャーとは(私なりのひとことまとめ)

 様々な定義や説明の仕方がありますが、私なりに一言でまとめたものは以下です。

 「フィールドの集計等の視覚化のための式(値)」

クイックメジャーとは

 ユニークなメジャーを作成するには、DAXで記述する方法の他、自動作成機能としてクイックメジャーがあります。作成は、テーブル横の「…」から「新しいクィックメジャー」から。

公式リファレンスは以下です。

クイック メジャーを使用して一般的で強力な計算を実行する - Power BI | Microsoft Docs

 「できるPower BI」の関連ページは、レッスン54(P260)「クイックメジャーで前年比などを集計する」です。

 2020/01現在、5種類27個のクイックメジャーが用意されています。

  • カテゴリごとの集計
    • カテゴリごとの平均
    • カテゴリごとの差異
    • カテゴリごとの最大値
    • カテゴリごとの最小値
    • カテゴリごとの加重平均
  • フィルター
    • フィルターされた値
    • フィルターされた値との差異
    • フィルターされた値に対する差異の比率
    • 初めての顧客からの売上高
  • タイム インテリジェンス
    • 年度累計
    • 四半期累計
    • 月度累計
    • 前年比の変化
    • 四半期ごとの変化
    • 月ごとの変化
    • 移動平均
  • 合計
    • 累積値
    • カテゴリの合計 (フィルター適用)
    • カテゴリの合計 (フィルター非適用)
  • 数学演算
    • 加算
    • 減算
    • 乗算
    • 除算
    • 差の割合
    • 相関係数
  • テキスト
    • 星評価 今回トライ!
    • 値の連結リスト

使いたいもの「計算」から選んで、基準値等を設定すれば、メジャーが自動作成されます(自動作成されたDAXも確認できます)

クイックメジャー「星評価」をやってみた

メジャーといえば何らかの集計計算のイメージがありましたが、上記の5種類の内、テキストの星評価って面白そうだな!と思い、やってみました。

元データは以下。

映画名 スコア
スター・ウォーズ/スカイウォーカーの夜明け 4.5
アナと雪の女王2 3.4
ターミネーター:ニュー・フェイト 3.5

クイックメジャーの画面で値等を設定すると...

できました~。シンプルでいいなぁ。

自動で生成されたDAX数式は表示することができます。

自動生成されたメジャー
スコア の星評価 = 
VAR __MAX_NUMBER_OF_STARS = 5
VAR __MIN_RATED_VALUE = 0
VAR __MAX_RATED_VALUE = 5
VAR __BASE_VALUE = SUM('Sheet1'[スコア])
VAR __NORMALIZED_BASE_VALUE =
    MIN(
        MAX(
            DIVIDE(
                __BASE_VALUE - __MIN_RATED_VALUE,
                __MAX_RATED_VALUE - __MIN_RATED_VALUE
            ),
            0
        ),
        1
    )
VAR __STAR_RATING = ROUND(__NORMALIZED_BASE_VALUE * __MAX_NUMBER_OF_STARS, 0)
RETURN
    IF(
        NOT ISBLANK(__BASE_VALUE),
        REPT(UNICHAR(9733), __STAR_RATING)
            & REPT(UNICHAR(9734), __MAX_NUMBER_OF_STARS - __STAR_RATING)
    )

DAXでメジャーがどのように作られているのか、理解できていいですね~。

おわりに

 上記の「星評価」は★or☆の単純なテキストで表現されるので、スコアが少数になった場合、★の塗りつぶしされません。が、率直な評価イメージとしてすぐに使えて、5段階のどの辺にいるかを表現するのにシンプルで素敵と感じました。クイックメジャー、便利~!