列値に合わせてグラフの色を設定する方法

# 「テーマ」による色指定
たとえばコーポレート カラーがあり「グラフの色設定をレポート全体一括で適用したい」ような場合、ビジュアル1つ1つで設定するのは手間です。
そういう時のために「テーマ」という機能があります。

https://learn.microsoft.com/ja-jp/power-bi/create-reports/desktop-report-themes

「テーマ」を使用すると、色だけでなく、フォントの種類・サイズなど統一感のあるレポート作成にはとても便利なので、お勧めです。
Power BI サポートのブログで使い方が分かりやすく紹介されているので、ぜひ使ってみてください。

https://jpbap-sqlbi.github.io/blog/powerbi/pbi_theme_introduction/

# 「テーマ」でカバーしきれない要件
便利な「テーマ」機能ですが、あくまでカラーパレットを指定するだけなので、A社の色は `#F25022`、B社の色は `#7FBA00` のようには設定することができません。
この記事では、例として「Country」と各国に対応する「ColorCode」をデータとして持たせ、その値をメジャーで取得して **条件付き書式** として棒の色に設定することで、グラフの色を指定する方法を紹介します。

## サンプルデータをスター スキーマに変換
Power BI Desktop に付属するサンプルデータを使用して説明したいのですが、一覧表形式になっているので、Power BI が推奨するスター スキーマに変換します。この章はどうやって一覧表からスタースキーマにしているのかを説明しているだけなので、結論を知りたい人は読み飛ばしてください。

```
サンプルデータ
C:\Program Files\Microsoft Power BI Desktop\bin\SampleData\Financial Sample.xlsx
```
スター スキーマの重要性は、ドキュメントでもしっかりと書かれていますので、Power BI でステップアップしたい方は、必読です。

https://learn.microsoft.com/ja-jp/power-bi/guidance/star-schema

長いし、いかにも直訳で、読むのが苦しくなると思いますが、なんとか **「メジャー」と「代理キー」くらいまでは、しっかり読んで理解することをお勧めします。** 初心者から脱出するためには避けて通れません。(それ以降の部分は、上級者向けと言っても良いかもしれません。)

### Power Query エディターでの操作
まず Power Query エディターで、サンプルをスター スキーマに変換します。分析の切り口になる (≒スライサーに設定しうる) 列 (Country, Product, Segment, Date 関連) をディメンションとして別テーブルに分割し、それぞれ、dCalendr, dProduct, dSegment, dCalendar と命名します。dCalendar 以外は、ソート用の列を [列の追加] → [インデックス列] で追加しています。
また、元の financials から、Month Name, Month Number, Year の3つの列を削除して Sales テーブル (ファクト) を作成しています。

### DAX 等によるモデリング
Power Query エディターの操作を終えたら、ファクトとディメンションの間のリレーションシップを作成します。ディメンションはソート用の列を非表示に設定します。こうすることで、レポート作成者は必ずディメンションにある項目を分析の切り口として使用することになります。
Sales には DAX で次の3つのメジャーを定義し、その他の列はすべて非表示にしています。

```
[SalesAmt] = SUM( Sales[Sales] )
Sales[SalesCost] = SUM( Sales[COGS] )
Sales[GM] = [SalesAmt] - [SalesCost]
```
出来上がったスター スキーマはこちらです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668909/0fa957fb-05bc-37fb-7e66-ce63ad7acf80.png)

## データの準備：色情報をデータに付加
今回は Country について色指定をしたいので、dCountry テーブルに ColorCode 列を追加します。Power Query エディターの [クエリ] ペインで dCountry を選択し、[列の追加] → [条件列] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668909/e5f41c73-6ff1-2e42-b752-206514f6af88.png)

今回は下図のように CountrySort 列の値によって色を指定しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668909/84b0f776-ba31-538d-f0d8-bc590ca4faea.png)

ColorCode という列が追加されますが、データ型が指定されていないため、「テキスト」に変更します。
[ホーム] → [閉じて適用] で、データを取り込んで変換します。

DAX で次のようなメジャーを定義します。

```
FormatColor = SELECTEDVALUE(dCountry[ColorCode]) 
```

https://learn.microsoft.com/ja-jp/dax/selectedvalue-function-dax

## レポートの作成
dCountry[Country] 列と [SalesAmt] メジャーを含む棒グラフのビジュアルを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668909/6af9351f-6aa9-3f59-556a-7add8ff1ae65.png)

ビジュアルの書式設定で [列] → [カラー] を開き、[fx] ボタンをクリックします。
[カラー - カテゴリ] というダイアログが表示されるので、[スタイルの書式設定] に「フィールド値」を、[基準にするフィールド] に dCountry[FormatColor] を選択し [OK] します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668909/b8fb008e-539d-8d93-984c-59af6e96b6e3.png)

グラフの色が指定した色に変わるのが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668909/3dde677f-a04b-4d52-bebf-2ae20755112b.png)

# 注意点
ここで紹介した方法は棒グラフでは設定できるのですが、ドーナツグラフなどでは同じように設定することができません。棒グラフで色を指定してからグラフ種類を変更してください。
PowerPoint でもおなじみの [書式のコピー] でもいけます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668909/a30be977-fdd0-1f9f-f18f-168efe980aef.png)

また、棒グラフでも凡例に列が追加されると設定が消えてしまいます。凡例の色設定の方が優先されるのかもしれません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668909/cc917498-613e-01c4-2c9f-b72c18f56e7e.png)

X軸に dProuct[Product] を追加した場合は、似たような見た目になるのですが、色の設定が効きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668909/5dd801d3-2400-b2ad-fed9-5f1e723d49fa.png)