LoginSignup
15
12

More than 3 years have passed since last update.

ビジュアルに味付けをするモデリングを考えよう

Last updated at Posted at 2019-06-16

6/22 に Power BI 勉強会を開催するんですよ。で、ちょっとお話をまとめておこうかと思った次第。ビジュアルに味付けをするモデリングについて。ビジュアルにも役立つモデリング/メジャーの記述もありますよということ。
データモデルをよく理解しない/モデリングがよくわからないから という理由でちょいムチャしているのを割とよく見るのだけど、まぁ、ビジュアライズできなくもないですよ、でもね... と思うのです。それって途中の経緯がないから行き止まりの最終奥義。

こんな話をしようかなと

ビジュアルのプロパティをよーく見て!たくさん試して!

しょっぱなからモデリングの話ではないけれども。
標準ビジュアルでもかなりのことができるのです。わかりにくいよねというのは私も思うところではあるのだけど、もともと存在しているビジュアルの機能なのだから使わない道理はない。悩む前に試して💢

必要なモデリングとはどんなだ?

ディメンジョンテーブルとファクトテーブル間のリレーションシップでスタースキーマにすることをお勧めするのは変わらずなので、それ以外というかそれ以前の話。
データモデルにロードされるのは "テーブル"になったデータなのだけど、これらテーブルはビジネスエンティティ / Business entity でよくて、どういうものかをざっくりいうと 顧客 とか 受注とか 在庫とかの一覧のこと。"行" がアイテムや事象のひとつを表していて "列" がその属性値といった感じでしょうか。集計された表との違いを理解できていない人、思いのほか多いです。

集計された表をテーブルにしない方がよい

と、いうかやってはいけないレベル。ピボットされた集計表は不適なことがほとんど。
Excel ピボットテーブルあるあるでいうと、
image.png
ピボットテーブルで Category のフィルタができないじゃんってなりますよね。スライサの追加できなくない?集計された表からチャートを表現してくれる機能は素晴らしいとは思うけれども、これは Excel の支援機能のひとつであって、一方 Power BI では手取り足取りしてくれない。ビジュアライズする機能の目的というか範囲が違いますからね。

image.png
Categoryでフィルタリングしたり、スライサを追加することもできる。なので、Excel でもこうしたほうがよいはずだし、Power BI ではとてもうまくいく。

メジャーを記述すること

メジャーの記述をしないという覚悟はまったく無駄、必ず明示的に記述すること。って考えている。だって、暗黙のメジャーだけで済まそうとすると、ビジュアルでできることが少なくなるから。ビジュアルにもうちょっと味付けをしたいなと思ったとき、必要な値や計算はどんなことかなと整理したらよい。

カスタム ビジュアルの使用も検討する

標準のビジュアルでできない表現は カスタム ビジュアルが役立つ。ただし、前項モデリングの問題を解決していない場合は残念ながら徒労に終わることが多いので、できるだけ順番に解決しておくことが必要と思う。

たとえば ...

以前参加したイベントであった質問を例として挙げてみる。たぶんデモなり解説なりする予定。
本当にそのビジュアルは必要なのか?というのは別の問題ということが前提。

特定のカテゴリをハイライト

最大値であるカテゴリをハイライトしたい。だいたいそんな感じだった。フィルタを適用したり、データが追加されていけば最大値は変化するので、ビジュアルのプロパティで設定しても希望を満たさない。テーブルやマトリクスであれば "条件付き書式" でよさそうだけど、棒グラフ だったらどうしたらよいか。
image.png

"最大値を強調"の考え方としては、ふたつの計算が必要。

  • 選択範囲内での最大値
  • 最大値と比較

これらを使ってビジュアルに反映させればよい。Infographic Designer で割と簡単。許容される範囲に収まる可能性は高いけど表示は遅い。標準ビジュアルの場合は追加の計算が必要。だけど表示が速い。

で、やってみる

当日自習時間でやろうとおもったのだけど気持ちがざわざわしてたので。

ビジュアルの機能で

まぁこんな関係で。
image.png

受注額
受注額 = 
    SUMX(
        '受注',
        '受注'[数量] * RELATED( '商品'[単価] )
    )

スライサで選択された中で最大の[受注額]を求めたいので

受注額(Max)
受注額 (Max) = MAXX( ALLSELECTED( '担当'[氏名] ), [受注額] )

ね、簡単でしょ!とするけれども、こうなってしまうことがある
image.png

"列で並べ替え" を '担当'[氏名] で適用しているから。なぜこうなるかはビジュアルのために用意された DAX クエリを読み解くとよいですよ。

受注額(Max)
受注額 (Max) = 
    MAXX(
        ALLSELECTED( '担当'[氏名], '担当'[社員ID] ), // 並べ替えに使用した列も追加する
        [受注額]
    )

ね、簡単でしょ!
image.png

今回は金額を必要としないので、真偽を整数に置き換えた。そのほうがビジュアルでうまくいくことが多いから。そのままでも別に構わないこともありますよ。

受注額(IsMax)
受注額 (IsMax) = 
VAR MaxAmount =
    MAXX(
        ALLSELECTED( '担当'[氏名], '担当'[社員ID] ),
        [受注額]
    )
VAR Result = INT( MaxAmount = [受注額] )
RETURN
    Result

image.png

Infographic Designer を配置して
image.png

Mark Designer で "Fill Percentage" を設定するだけ
image.png

ね、簡単でしょ!

標準のビジュアルにはこの機能はないので、こんな感じのメジャーを使うとよいのではないかな。

受注額(Max) =
    IF( [IsMaxSalesAmount] = 1, [受注額] )
受注額(Other) = 
    IF( [IsMaxSalesAmount] = 0, [受注額] )

条件付き書式を使う

あーそういえば、条件付き書式ありましたね。こんな感じにすればメジャーとかなくてもよいのである。
image.png

書式をメジャーで定義する

BarColor = 
    VAR MaxSales = 
        MAXX( ALLSELECTED( '社員'[社員ID], '社員'[氏名] ), [受注額] )
    RETURN
        IF(
            [受注額] = MaxSales,
            "#F2C811",
            "#CCCCCC"
        )

条件書式で色を指定するメジャーを記述して設定
image.png

image.png

思ったこと🙄

Power Query / データモデル(モデリングとメジャー) / ビジュアル、どれかひとつだけでもできればいいやってことにはならないですね。すべてをまんべんなくできるようになっておかないとダメなんだろうね。ビジュアルのためにダミーデータを追加してごにょごにょするのってたまに見かけるけれども、全く興味がない。ファクトデータをいじるってことだからデータ改ざんのひとつじゃねと思うのです。

その他

15
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
12