📊

「メジャー」と「計算列」と「計算テーブル」の違い

2024/02/26に公開

はじめに

Power BIの中で、同じくDAX関数で作成できる要素として、「メジャー」と「計算列」と「計算テーブル」の3種類があるが、それぞれの挙動やDAX関数の使い方に違いがある。

「メジャー」と「計算列」と「計算テーブル」の簡単な比較

比較表

比較項目 メジャー 計算列 計算テーブル
値の保存 データセットに保存されない データセットに保存される データセットに保存される
計算タイミング 使われるタイミング
例:ビジュアルの表示時
データセット更新時 データセット更新時
DAXコードの出力値の型 スカラー値[1] スカラー値 テーブル
機能自体の型 スカラー値 テーブル
モデル上の配置 任意のテーブル内 関連のテーブル内 他のテーブルと同列
名前の制限 全レポートの列名と他のメジャー名と被ってはいけない 同テーブル内の他の列名とメジャー名と被ってはいけない 他のテーブル名と被ってはいけない
列参照である必要の場所への設定
※スライサー等
不可 可能 テーブル内の列は可能
リレーションシップのキーとして使う 不可 可能 テーブル内の列は可能
同テーブル内の各列の値の取得 SELECTEDVALUEで取得する必要がある 同レコードの値は列名の指定で直接取得できる -
RELATED関数 直接使えない
SUMXなど、テーブルを評価対象とする関数内でのみ使える
直接使える -
動的書式 使用可能 使用できない 使用できない

使い分けの考え方

メジャーを使った方がいい場合

  • テーブルの列数が増えてデータセットの容量が増加するのを避けたい場合
    ※特にデータ量が元から非常に巨大な場合
  • レポートの表示時間よりもデータセットの更新時間が気になる場合
  • 計算ロジックが複雑で列で追加する場合、構成を考えるのが面倒な場合
  • 動的に書式を変更したい場合

計算列を使った方がいい場合

  • スライサーなどの列参照が必要な設定に使いたい場合
  • リレーションシップのキーとして使いたい場合
  • データセットの更新時間よりもレポートの表示時間が気になる場合
  • 行単位で計算した方がいい場合

計算テーブルを使った方がいい場合

  • 日付テーブルや集計テーブルなど、テーブルとして追加したい場合

機能の詳細比較

メジャー

作成方法は下記を参照。

https://learn.microsoft.com/ja-jp/power-bi/transform-model/desktop-measures

メジャーの主な特徴は以下である。

1. 値がデータセットに保存されず、使われるタイミングで計算される

メジャーの計算結果はデータセットに保存されない。ビジュアルがメジャーを使って計算している場合、データセットの更新ではなく、各ユーザーがレポートページを開くなどの時に計算される。
またその場合、メジャーの計算結果はキャッシュに保存されるだけで、ブラウザーのページを更新などすると再度計算し直すことになる。メジャーの数が多い、計算が重いなどの場合はレポートの表示に時間がかかってしまう。

2. メジャーの出力値はスカラー値のみ

メジャーはスカラー値のみを出力できる。従ってCALCULATETABLEやSUMMARIZEなど、テーブルを返す関数の戻り値をRETURNに設定することができない。
ただし、メジャー内でテーブル型の変数を定義し、それに対し更に集計したスカラー値をRETURNすることができるので、CALCULATETABLEやSUMMARIZE関数が使えないわけではない。

3. 列参照が必要なビジュアルの設定欄に設定できない

メジャー自体がスカラー値であるため、スライサーの「フィールド」欄や、フィルターパネルなど、列参照が必要なビジュアルの設定欄に設定することができない。
同様にメジャーをMAX関数の引数など、列やテーブル参照でないといけない引数として使うことができない。

4. リレーションシップのキーとして設定できない

メジャーはPower BIのモデルビューで列と一緒に一覧に表示されるが、列ではないため、リレーションシップのキーとして使うことができない。

5. 親テーブルとの関連性は特にない

メジャーは基本的にどれかのテーブルの下に配置する必要があるが、その親テーブルとの関連性は特になく、機能は完全にメジャーのコードに依存する。
ただし、同じテーブルのフィールドを呼び出す時、テーブル名を指定する必要がなくなる。(その場合、他のテーブルの下にメジャーを移すとエラーになる。)

6. レポート内で名前がユニークである必要がある

メジャー名は全レポートの列名と他のメジャー名と被ってはいけない。これに連れて、メジャー内で任意のメジャーを呼び出す時、テーブル名を指定する必要はなく、[メジャー名]で直接呼び出すことができる。(テーブル名を書いても問題ない)

7. 列の直接参照とRELATED関数の直接使用ができない

スライサー等のフィルターで特定のテーブルを1行になるようにフィルタリングしても、そのテーブルのフィールドを直接参照してスカラー値を取得することができない。またRELATED関数も直接使うことができない。
特定のセルのスカラー値を取得したい時、SELECTEDVALUEを使う必要がある。RELATED関数はSUMXやADDCOLUMNS関数の中など、評価するレコードが(明示的なフィルタリングなしでも)特定できる場合でのみ使える。

title
//テーブルFactOrderに列OrderID、CustomerName、ProductID、OrderedNumberが存在し、
//テーブルDimProductに列ProductID、ProductName、ProductWeightが存在し、
//FactOrderとDimProductはProductID同士でリレーションシップを繋げているとする。

Measure = FactOrder[OrderID]
//スカラー値を取得できず、エラーになる
Measure = SELECTEDVALUE(FactOrder[OrderID])
//正常にスカラー値を取得できる

Measure = SELECTEDVALUE(FactOrder[OrderedNumber]) * RELATED(DimProduct[ProductWeight])
//有効なリレーションシップを見つけられず、エラーになる
Measure = SUMX(
    FactOrder,
    FactOrder[OrderedNumber] * RELATED(FactOrder[ProductWeight])
)
//正常に計算できる

8. 同じコードでも、計算列でと違う計算結果を得られるケースがある

例えばメジャーの場合、RANKXの引数1のテーブルにALL()を付けないと、結果が全部1になるが、計算列の場合、引数1のテーブルにALL()を付けなくても正しい順番値が返ってくる。

9. 動的書式が使える

2023年4月リリース以降、動的書式が使える。

計算列

作成方法は下記を参照。

https://learn.microsoft.com/ja-jp/power-bi/transform-model/desktop-tutorial-create-calculated-columns

計算列の特徴は主に以下である。

1. 値はデータセットに保存され、データセット更新時に計算される

計算列の値はデータセットに保存されるので、データセットを更新するタイミングで値が計算される。そのため、レポートを開いたり、ブラウザーを更新したりしても再計算されず、素早く結果を得ることができる。

2. 出力値はスカラー値でなければいけない

計算列のDAX式はそのテーブルの各行に対し出力値を計算するため、メジャーと同様、スカラー値を返す必要がある。

3. 列参照が必要なビジュアルの設定欄に設定することができる

計算列自体は列なので、スライサーの「フィールド」欄や、フィルターパネルなど、列参照が必要なビジュアルの設定欄に設定することができる。またMAX関数の引数など、列やテーブル参照でないといけない引数として使うこともできる。

4. リレーションシップのキーとして使うことができる

普通のフィールドと同様、計算列はリレーションシップのキーとして使うことができる。

5. 列名は同テーブル内でユニーク

列名は同テーブル内の他の列名とメジャー名と被ってはいけない。
これに連れて、別のテーブルの計算列を参照する時、テーブル名を指定する必要がある(普通のフィールドと同じ仕様)。

6. 列の直接参照とRELATED関数の直接使用ができる

同じテーブル内に限って、既存のフィールドを直接参照してスカラー値を取得できる。同様にRELATED関数も直接使える。

7. 同じコードでも、メジャーと違う計算結果を得られるケースがある

例えばメジャーの場合、RANKXの引数1のテーブルにALL()を付けないと、結果が全部1になるが、計算列の場合、引数1のテーブルにALL()を付けなくても正しい順番値が返ってくる。

8. データビューで値を直接確認できる

データビューで該当テーブル上に列として表示されていて、すべての行の値を直接確認できる。

9. 動的書式が使えない

2023年4月リリース時点で動的書式はメジャー専用の機能なので、動的書式を使いたい場合はメジャーを使う必要がある。

計算テーブル

作成方法は下記を参照してください。

https://learn.microsoft.com/ja-jp/power-bi/transform-model/desktop-calculated-tables

計算列のテーブル版である。
DAXで作成したテーブルであること以外は、Power Queryでインポートなどした普通のテーブルと同じ仕様である。

参考

https://learn.microsoft.com/ja-jp/power-bi/transform-model/desktop-measures

https://learn.microsoft.com/ja-jp/power-bi/transform-model/desktop-tutorial-create-calculated-columns

https://learn.microsoft.com/ja-jp/power-bi/transform-model/desktop-calculated-tables

https://learn.microsoft.com/ja-jp/power-bi/create-reports/desktop-dynamic-format-strings

脚注
  1. スカラー値:テーブルや列ではなく、単一の値 ↩︎

BIによる業務改善推進

Discussion