[Power BI] ベストプラクティスを読み解く② ～Factテーブルはメジャーだけに～

# はじめに

本記事は **Microsoft Power BI Advent Calendar 2024** の初日の記事です。

https://qiita.com/advent-calendar/2024/powerbi

![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F80467%2Fcf40a34d-8ddd-e4f3-ed0c-2e3926f7be08.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&w=1400&fit=max&s=d23e4e155b709fc62ffff68cea226079)

# まずスタースキーマ

Power BIの推奨データモデル、スタースキーマについては以下記事が参考になります。まずはこちらを読んでみてください。最近記事が更新され、図・内容ともによりわかりやすくなりました。

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/d2a7b30b-8f46-fc79-5b46-cfb11baa50c3.png)

# Factテーブルはメジャーだけにすべし

データモデルがスタースキーマになっているという前提で、以下のベストプラクティスについて考えてみましょう。

:::note
Factテーブルはメジャーだけにすべし
:::

**なぜなのか。**

**このベストプラクティスがなぜ必要なのかを考えていきましょう。**

## そもそもメジャーだけってどういうこと？🤔

メジャー以外の列をすべて非表示にしてしまうってことです。
すべて非表示にすると、**テーブルのアイコンも変わり**ます。

通常はこうですよね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/7e61bcae-4d76-6c3e-bbc9-9bb619b26f19.png)

メジャーを作成したあと、他の列を非表示にすると、こうなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/af4f878b-2705-a243-04c9-120739a6c2c7.png)

データモデルを確認すると、メジャー以外の列が非表示になっているのがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/a75f0ce0-f5d2-71aa-06ec-c00d8e06fc14.png)

# 1. 暗黙のメジャーをつくることができてしまう😇

まず一つ目は、**暗黙のメジャーが勝手につくられないように**…です。

2023年のアドベントカレンダーでは、暗黙のメジャーについて記事を書きました。

https://qiita.com/akihiro_suto/items/f171d7c609209a235d89

暗黙のメジャーというのは、明示的にメジャーが書かれていない状態をいいます。もう少し具体的に書くと、Power BIではデータをビジュアルに「ひょいっ」っとドラッグアンドドロップすることで簡単な集計ができてしまいます。

![2023-12-10_18-47-09.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/82fab47a-0b72-c640-cdb8-ae5bbd2c33b9.gif)

その際も、裏側ではDAXが記述されており、当然データモデルに問い合わせがされています。

明示的にメジャーを書いていない、けれども、メジャーが書かれている。これを**暗黙のメジャー（Implicit measures）** といいます。

**なぜ暗黙のメジャーは避けるべきなのか** は、以下記事で解説しています。

https://qiita.com/akihiro_suto/items/f171d7c609209a235d89

以下のような理由について書いてあります。

- Excelで使用できない
- 表現できないビジネスロジックがある
- 再利用できない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/7407cd35-721a-671e-94e4-5e7ca9ced709.png)

# 2. Auto-Existに遭遇する可能性がある😎

2つ目の理由は**Auto-Exist** への遭遇です。

Power BI マニアのみなさんは知っているかもしれませんが、2024年10月のアップデートで**Auto-Exist** に関することがありました。**Auto-Exist** に遭遇したときの、フィルターの動作を任意にコントロールする機能のプレビューが開始しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/728d0d95-b850-6a43-dae5-e9b4f934765b.png)

https://powerbi.microsoft.com/ja-jp/blog/power-bi-october-2024-feature-summary/

https://learn.microsoft.com/ja-jp/power-bi/transform-model/value-filter-behavior

## **Auto-Exist** とは

**Auto-Exist** 自体の説明は、上記ブログやPower BI Weekly Newsでも詳しく解説されています。

▼ 解説しているPower BI Weekly News該当回 ▼

https://www.youtube.com/live/zYfTjxBz2WQ?si=8Lng1Ep6tNJD97uA

<iframe width="560" height="315" src="https://www.youtube.com/embed/zYfTjxBz2WQ?si=Yx7YuOwqKi9GHKmb" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

:::note
Power BI Weekly News 毎週日曜日 20時～
https://www.youtube.com/playlist?list=PLFWe9YKLKFFOkabzBm2kXUY8lQX9Z9wd1

清水さん、石川さん、須藤（私）で配信しています。
@yugoes1021 @ishiayaya @akihiro_suto 
:::

動画やドキュメントを確認すればわかると思いますが、**Auto-Exist** は発生したこと自体がわかりにくく、もしかしたら現時点でも気づかずに運用されている環境もあるかもしれないです。

## **Auto-Exist** の回避方法

**Auto-Exist** は大福帳やFlat-Wide-Tableと呼ばれる1テーブルのデータで、FactとDimensionが分離されていないデータモデルのときにおこります。

つまり、データモデルをスタースキーマにしておけばそもそも起こりにくいです。

ただし、スタースキーマにしていたとしても、Factテーブルの項目をFilterとして利用した場合には同様に起こりうる問題です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/3d1c1cac-3152-34e9-5131-025c1c78fe77.png)

この辺の項目をFilterにしちゃったら、**Auto-Exist** が起こるんです。つまり、正しい、集計値がビジュアルで表示されない可能性があります。

## だから…

ビジュアルを作る人が、**意図せずFactテーブルの項目でフィルターを作成してしまわないように、メジャー以外の項目をすべて非表示に**しちゃいましょうということになります。

# まとめ

なぜFactテーブルのメジャー以外の項目を非表示にしなければいけないか、伝わりましたでしょうか。盲目的にベストプラクティスに従うのももちろん最初はOKです。徐々に、なぜそのベストプラクティスが生まれたのか、言われるようになったのかを理解できるようになってくると、Power BI Lifeがより楽しくなると思います🎉

**Happy Power BI😊**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/c9afeb2f-4663-3042-683e-75c3e140cb6f.png)