PowerBIによるデータ可視化と反省点

昨年から業務でPowerBIによるデータ可視化を行ったので、一旦整理の為、可視化方法等まとめたいと思います。
可視化のスキルより、ゴールドリブンでやるということの反省が大きい為、PowerBIの操作方法については詳細には触れていません。

# 可視化テーマ
可視化するサンプルとして、プロダクトAに対する営業データとします。

# データ設計
データは以下テーブルのように、案件マスタで営業案件に対する情報を保持し、企業マスタや都道府県マスタ等でその他の属性情報を保持します。
データ構造はスタースキーマにしたいので、日付に関するデータは案件ファクトテーブル一つに保持します。

スタースキーマについてはこちらの解説が分かり易いと思います。

https://qiita.com/yugoes1021/items/12a40a5089fc5b5167c5


**ディメンションテーブル**
| テーブル名       | カラム                                                                 |
|-------------------|--------------------------------------------------------------------|
| 案件マスタ          | 案件ID（ユニークキー）、製品名、企業名、企業コード、企業属性情報（売上、従業員数、業種）、きっかけ、営業担当、ステータス（リード、仕掛り、受注/失注）、商談回数、商談期間、金額 |
| 企業マスタ          | 企業コード、企業名、売上、従業員数、業種、都道府県、既存/新規                                   |
| 都道府県マスタ        |  47都道府県                                                                  |
| 業種マスタ          | IT、教育、金融　等                                                                   |
| 担当者マスタ         | A, B, C, D, E                                                                 |
| 案件きっかけマスタ      | コール、DM、HP、比較サイトA、比較サイトB、ウェビナー                                       |

**ファクトテーブル**
| テーブル名         | カラム                                         |
|-----------------|--------------------------------------------|
| 案件ファクト             |     日付、ファクト（問合せ、商談、受注、失注）|

# データ作成
テーブルとカラムを決めたので、データはchat-GPTに作ってもらいます。
最近のはエクセル出力までしてくれるんですね。すごい。

### データ作成プロンプト
~~~
以下条件でプロダクトAに対する営業関連データのエクセルを作ってください。

# 前提
## データの期間は2023/1/1-2023/12/31までの1年間です。
## 年間目標は受注20件、金額2千万円です。
## プロダクトAの金額は100万円です。

# 作成データについて
## 案件マスタの合計件数は100件
## 企業マスタの合計件数は85件
## 都道府県マスタは全都道府県作成してください
## 業種マスタの種類は5種類
## 担当者マスタは5名
## ファクトテーブルの合計件数は1000件
## 実際の営業データに近いようなデータのばらつき具合を意識してください

# データの内容
案件マスタ
 案件ID：ユニークキー 
 製品名 
 企業コード
 案件きっかけ
 営業担当
 ステータス（リード、仕掛り、受注/失注）
 商談回数
 商談期間
 金額
企業マスタ
 企業コード
 企業名
 売上
 従業員数
 業種
 都道府県
 既存/新規
都道府県マスタ
業種マスタ
担当者マスタ
案件きっかけマスタ
 コール
 DM
 HP
 比較サイトA
 比較サイトB
 ウェビナー
案件ファクト
 日付
 案件ID
 ファクト名（問合せ、商談、受注、失注））
~~~

chat-GPTによってエクスポートされたエクセルは[こちら](https://github.com/sarah-muller/powerbi)。
（プロンプトの内容は上記から若干修正して作成しました。）

エクセルは一部修正したり、カラム追加してますし、実際ではあり得ない割合とかもありますが、
全体的にはデータもばらついていて良い感じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/460901/f6a32bc6-855e-0c88-3085-e7627e1f4dac.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/460901/12e936c3-032a-093c-1601-8423211078bf.png)

# 可視化の手順
データが出来たのでPowerBIで可視化をしたいと思います。

「可視化の手順」と書きましたが、その考え方自体が誤っていたと反省しています。
あるのはゴール達成の手順のみ。
可視化とは、そもそも目的があってやることであって、全体の極一部のフェーズに過ぎません。極論いうと、ゴール達成できるなら可視化不要くらいの気持ちで良く、そうなってくると、データやBIを触ることよりもコミュニケーション等に割く時間が増えると思います。

## ゴール達成の手順
以下が基本的な流れだと思います。

1. ゴール設定
2. 現状把握
3. 課題と要因の特定
4. 施策立案・実施
5. 2に戻ってループ、時には1を見直す

[それちょっと、数字で説明してくれる？　と言われて困らない できる人のデータ・統計術](https://amzn.asia/d/20sOV8e)

この書籍が大変参考になりましたが、気付いたらゴールドリブンでなくなっているということが多々あり、
読んですぐ身に付くものでもないと痛感しています。
実践を通して鍛錬が必要です。

以下は各ステップに対する所感です。
（以下のような環境でしたので、環境が違えばあてはまらないことも多々あると思います。）

* 前提条件
    * そこまでデータ量が多くない（エクセルで十分）
    * 欲しいデータあまり溜まってない、取得できない or 工数大
    * ゴール曖昧
    * 可視化担当と業務担当が別部署

#### 1.ゴール設定
* とにかくこれが全ての基礎、常にチームで認識を共有する。決まってなければゴール設定から業務担当者と一緒に定量化する必要あり
* ゴールを設定したら、すぐにデータを見るのではなく、データを活用して、どう実際に施策に活かすのかイメージしてみる。後工程まで考えると、そもそも無理なことやろうとしてたりするので、ゴールを何にするかって結構重要（[イシューからはじめよ](https://amzn.asia/d/7JgkFSx)）
* そもそも会社のゴール設定が曖昧だけど、自分の権限が大してない場合は、それには目をつぶって、部署内の狭い範囲でのゴール達成から始めることになるかも

#### 2.現状把握
* これもいきなりデータを見ない。まずは詳しい人に話を聞くとかして、どのデータを見るべきか、ゴールに対するKPIは何か等、仮説を立てる
* データ見だすとキリがないので、可視化する際は必要最低限のつもりでやる。アウトプットして共有することまでの期限を短く区切ることで、無駄に可視化を増やすリスクは減らせるかも（たくさん可視化するとBI更新や分析の工数がどんどん増えて効率悪い）

#### 3.課題と要因の特定
* 現状把握から、ゴールに対する課題とその要因を特定する
* とはいえ、大したデータがないということも多いと思うので、データに固執せず、仮説から推測して、さっさとアクションするのもありだと思う。データはそのサイクルの中で少しずつ溜められるようにすればいい
* 一生懸命色々分析しても、それを活かすリソースが無ければ活用できない。現場の施策実施工数も考えて、優先順位高い分析から絞ってやる

#### 4.施策立案・実施
* 業務担当部署のリソースや利害関係等も考慮する
* そうなってくると、そこまで大したこと出来ないということもあり得る、となるとそもそも大した分析が必要ない可能性もあり（定量化は大切）

データがあるから可視化できるという訳ではなく（物理的にはできますが）、全てはゴール起点という反省が大いにありました。

# PowerBI
今回は可視化自体も備忘として簡単に残したいので、サンプルだけ作りました。

PowerBIファイルは[こちら](https://github.com/sarah-muller/powerbi)

PowerBI Desktopをダウンロードすれば無料で使えます。（現状Macでは動かない認識です。）
https://powerbi.microsoft.com/ja-jp/desktop/

## 可視化例
可視化内容はこんな感じで、4つのレポートを作りました。
（PowerBIでは可視化のページ（エクセルでいうsheetみたいな）をレポートと呼びます。）

* 営業進捗レポート
* 担当者別レポート
* 地域別レポート
* 案件きっかけ別レポート

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/460901/de8a1c5b-1b9a-53ab-5c1f-1d4df25cf091.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/460901/be912fed-970b-5303-e701-453fa35e9034.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/460901/5a8379db-9a12-79e1-b667-cd681a4a478c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/460901/5c90752b-9415-412b-7538-e25e80c2df3f.png)

ちゃんとデータが紐づいていれば、グラフをクリックすると、動的に動くのがBIの便利なところです。

担当者Aだけ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/460901/ebb6e121-153c-fda1-6b46-80a506f9461e.png)

担当者A, B（複数選択もできる）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/460901/6b1ca59c-6aa8-0d4f-0e58-6a06942f3e07.png)

BIのグラフを見たことない方は、良さげに出来ていると思うかもしれません。
色々触って分析したいとワクワクする方もいるでしょう。自分もそうです。

しかし、そこがデータが魔物であるところで、いつのまにかゴールドリブンでなくなり、データに支配されてしまうことを何度もやりました。

あの項目も追加してみよう・・・あの種類のレポートだけ追加してから、上長に見せよう・・・とかとか、今では使っていないレポートがたくさんあります・・・

>「やみくもにデータ分析に着手する前に、まずは仮説を考えよう」

と、[それちょっと、数字で説明してくれる？　と言われて困らない できる人のデータ・統計術](https://amzn.asia/d/32uttLb)に書かれています。

まさに痛いところを突かれていますし、これはそもそものゴール設定でも言えることだと思います。
「やみくもに仮説を考える前に、まずはゴールを考えよう」的な・・・

## 操作方法
PowerBIの操作については、[Microsoft Learn](https://learn.microsoft.com/ja-jp/training/powerplatform/power-bi)や書籍で手を動かしながら学ぶことは少しやりました。
基本操作に慣れれば、後はchat-GPTがあれば大丈夫でした。

新たなテーブル作成や列作成について、色々条件を指定しながら作る必要があるのですが、PowerBIではDAX関数という意味不明な関数を使う必要があります。

このめんどくさい障壁が、chat-GPTのおかげで大幅に緩和されました。感謝です。

以下はプロンプト例です。

~~~
以下テーブルを作りたいので、DAX関数を教えてください。

# テーブル名
* ファクト別日付

# 作成カラム:条件
* 案件ID:"案件ファクト"テーブルの"案件ID"カラム
* 問合せ日:"案件ファクト"テーブルの"案件ID"毎に、"案件ファクト"テーブルの"ファクト"カラム = "問合せ"の場合の"日付"
* WEB商談日:"案件ファクト"テーブルの"案件ID"毎に、"案件ファクト"テーブルの"ファクト"カラム = "打合せ" かつ "WEB商談"カラム = 1 の場合の"日付"
* 受注日:"案件ファクト"テーブルの"案件ID"毎に、"案件ファクト"テーブルの"ファクト"カラム = "受注"の場合の"日付"
* 失注日:"案件ファクト"テーブルの"案件ID"毎に、"案件ファクト"テーブルの"ファクト"カラム = "失注"の場合の"日付"
~~~

chat-GPTの回答
~~~
ファクト別日付 = 
ADDCOLUMNS (
    SUMMARIZE ( '案件ファクト', '案件ファクト'[案件ID] ),
    "問合せ日", CALCULATE ( MIN ( '案件ファクト'[日付] ), FILTER ( '案件ファクト', '案件ファクト'[ファクト] = "問合せ" ) ),
    "WEB商談日", CALCULATE ( MIN ( '案件ファクト'[日付] ), FILTER ( '案件ファクト', '案件ファクト'[ファクト] = "打合せ" && '案件ファクト'[WEB商談] = 1 ) ),
    "受注日", CALCULATE ( MIN ( '案件ファクト'[日付] ), FILTER ( '案件ファクト', '案件ファクト'[ファクト] = "受注" ) ),
    "失注日", CALCULATE ( MIN ( '案件ファクト'[日付] ), FILTER ( '案件ファクト', '案件ファクト'[ファクト] = "失注" ) )
)
~~~

指示文の書き方は様々あると思いますが、こんな感じでDAX関数を教えてくれます。
エラーが出ることはよくありますが、ベースが出来ていれば、修正はそこまで大変ではありません。
（勿論、作成テーブルの値が正しいかの確認は必要です。）

何度やっても使えるDAX関数が出力されないときは、複雑な指示をしている可能性があったり、データの持ち方自体が良くなかったりすると思うので、指示を細分化して、一個ずつ進めるとか、データ自体を修正することもやりました。

ちゃんとスタースキーマでデータを保持していれば、あまり複雑なDAX関数は必要ないのではないかと思います。

## データ構造
以下はデータ構造です。

スタースキーマだと、案件ファクトを中心にテーブルが紐づくはずですが、これはむしろ案件マスタを中心に紐づいています。
私の業務ではデータ量がそこまで多くなく、エクセルでデータ管理をしており、わざわざ全部IDでファクトに入れるのがめんどうだったので、結果的にこうなりました。
（その辺は現場に合わせて柔軟に対処すれば良いと思います。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/460901/e8501e34-1ee3-a5b7-0746-fc9cbc61620b.png)

## NG例
自分が業務で作ってとても反省したレポートに似たものです。
とにかくグラフやフィルタが多いです。
最初は面白くて色々見ていましたが、結局ずっと見るグラフは3,4種類でした。
しかもこのようなレポートを5個、6個と作り、今ではデータの更新すらしていないレポートが多々あります・・・

基本的に一つのレポートにたくさんグラフがある時点で良くないのではないかと思います。
（ちゃんと活用できていれば良いと思います。むしろそれが全て。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/460901/e913c132-7c67-66f8-264f-023417181241.png)

とにかく可視化する際は、最低限、少しずつ、ゴールドリブンで現場と密着しながら。
（それが難しい・・・本当にデータがあると人間はそこから勝手に考えだしてしまいます・・・）


# まとめ
* データ活用に取り組みたいなら、まずはデータから離れよ、ゴールドリブンであれ
* 担当業務の現場と密着すべき
* データ以外の業務の方が多いくらいで良い

# 推薦書籍
* [それちょっと、数字で説明してくれる？　と言われて困らない できる人のデータ・統計術](https://amzn.asia/d/32uttLb)
    * いきなり分析を始めてはならないということが非常に勉強になりました。かつ、本を読んですぐに身につくものでもないことも学びました
* [結局、仮説で決まる。　思考を発散させて可能性を広げるクリティカル・シンキング](https://amzn.asia/d/hW2wNg6)
    * 上記の柏木先生の続編のような書籍です
* [データ分析人材になる。 目指すは「ビジネストランスレーター」](https://amzn.asia/d/1e4Ll0d)
    * これは読んでいませんが、著者の木田さんの動画は拝見したことがあり、データをビジネスに活かすという観点で非常に勉強になりました
* [ワークマン式「しない経営」――4000億円の空白市場を切り拓いた秘密](https://amzn.asia/d/d3sKI7V)
    * データ活用の責任者はDX部門等の間接部門でなく、業務担当者にするという点が非常に合理的だと思いました
    * 組織としてDXを進める際に、どのように環境を整備するかも参考になりました

# 参考
* [【PowerBI】カレンダーテーブルの作り方、テンプレあり(CALENDAR関数)](https://power-bi-seminar.site/7494/)
    * カレンダー作成に使用させて頂きました。ありがとうございます

# ソース（PowerBIファイル）
今回使用したPowerBIファイルとエクセルは[こちら](https://github.com/sarah-muller/powerbi)

PowerBIはアプリをインストールする必要があります（残念ながらWindowsでしか動きません）

以上