本講座7で分かること
この記事は実践PowerBI講座の第七回です。前回講座ではCALENDAR関数を使って階層構造の日付スライサを作り、時系列分析をしやすい環境を整えました。
今回は、Power BIで重要な「メジャー」が初めて登場します。さらに、メジャー作成で頻繁に使われるCALCULATE関数を実践的に使います。
Power BIを学んでいると「CALCULATEは重要」とよく聞きますが、「実際にどんな場面で使うのか分からない」という初心者も少なくありません。
そこで今回は、CO2原単位というKPIをCALCULATEメジャーで計算し、レポート上部にカードで表示します。
KPIをカードで大きく表示すると、レポートを開いたときに現状をすぐ把握できるようになります。さらに、前回作った日付スライサを操作すると、KPIの値も動的に変化します。
「CALCULATEとは何か」を覚えるだけでなく、実際にメジャーを作って動かすところまで体験することが今回の狙いです。
本講座で得られる価値は以下です。
- メジャーと計算列の違いをざっくり理解できる
- CALCULATE関数を使って条件付きの集計ができるようになる
- CALCULATEを使ったKPIメジャーを作成できる
- KPIをカードに配置し、レポート上で見やすく表示できる
- スライサ操作によって、メジャーの値を動的に変化させる分析操作を体験できる
DAX関数を覚えたものの「どこで使えばいいのか分からない」という壁は、初心者がつまずきやすいポイントです。今回は実務に近いKPIを題材に、CALCULATEの基本的な使い方を身につけます。

メジャーとは? CALCULATEの前知識
メジャーは、レポート上の条件に応じて計算結果が変化するDAX式です。
計算列がテーブルの各行で計算される固定値なのに対し、メジャーはレポート上で計算される変動値です。例えばスライサなどのフィルタ条件に応じて計算結果が変化することが大きな特徴です。
今回はこのメジャーを使って、選択した期間のCO2原単位を計算します。
CALCULATE=条件付き集計関数
CALCULATEは、集計に条件を付けるためによく使われるDAX関数です。
例えば売上合計に「日本だけ」という条件を加える場合などに使います。
今回は、CO2換算値を合計するときに「電気・ガス・ガソリンだけ」という条件を付けるためにCALCULATEを使います。
CALCULATEは非常に奥が深い関数ですが、今回はまず「集計に条件を付ける」という基本的な使い方を実践してみましょう。
CALCULATEで作るKPI|CO2原単位のおさらい
今回カードに表示するKPIは「CO2原単位」です。
CO2原単位については、実践PowerBI講座【目標】の「実践課題|現状把握レポート」で説明していますが、軽くおさらいしておきます。

CO2原単位は、CO2排出量を事業活動量で割った値です。本講座では事業活動量を従業員の勤務時間合計とします。
CO2原単位 = CO2排出量 ÷ 勤務時間
今回は共用部分のCO2排出量を含めません。共用部分については次回、使用時間による按分計算を使って追加します。
今回学ぶこと|CALCULATEメジャーを習得
今回学ぶことは以下です。
- RELATEDでCO2排出量を計算する(第三回の復習)
- CALCULATEで条件付きメジャーを作る
- VAR・RETURNでDAXを整理する
- KPIカードを作る
- メジャー値がスライサで変化することを体験する
やること自体はシンプルですが、「データを準備する→メジャーを作る→ビジュアルに配置する」という流れを理解することが重要です。
今回のアウトプット|CALCULATEメジャーをカードに表示
今回は、第6回で作成したレポートに前述の「部門ごとKPIカード」を追加します。
下図の赤枠部分が今回作成するビジュアルです。

ゴールを先に理解しておくと、途中の作業でも「何のためにこの設定をしているのか」が分かりやすくなります。
今回のインプット|マスタを追加
今回は、第6回で使用したデータに次のCSVファイルのマスタを追加します。
CO2換算マスタ(電気、ガス、ガソリンなどをCO2排出量に換算する係数)
値種類マスタ(値種類コードと値名のマスタ。例えばコードA01なら値名は電気など)
※データの内容については、実践PowerBI講座【目標】の「実践課題|現状把握レポート」で説明しています。
CALCULATEメジャーの実装プロセス設計
今回の流れは以下です。
- データ取込み
- リレーション追加
- RELATED関数を使った値計算
- CALCULATEメジャー作成
- レポートへのカードの配置とメジャーの表示
- カードの書式設定
- KPIカードに対して部門スライサを無効にする
第6回まででレポートの「操作する部分」が整いました。今回はそこに「計算する部分」を追加します。
この流れをテンプレ化すると、今後別のKPIを作るときにも応用できます。
特に重要なのは4.のメジャーの作成手順を整理することです。今回のCO2原単位の計算式は、
- 分子:CO2排出量
- 分母:勤務時間
- 計算:分子÷分母
に分解できます。計算式を分解してから、VAR・RETURNを使って式を作ると、メジャーの内容を理解しやすくなります。
DAX>CALCULATEメジャーの実装ポイント解説
今回作成するメジャーは以下です。
M01_CO2原単位_共用除く =
//原単位の分子(CO2排出量)を計算する
VAR CO2_Quantity=
CALCULATE(
SUM(D01_Energy_2020[C0002_CO2換算値]),
FILTER('D01_Energy_2020',
[値種類コード]="A01" ||
[値種類コード]="A02" ||
[値種類コード]="A03"),
FILTER('D03_Bumon',[C02_部門]<>"04_共用")
)
//原単位の分母(勤務時間)を計算する
VAR Unit=CALCULATE(
SUM('D01_Energy_2020'[C0002_CO2換算値]),
FILTER('D01_Energy_2020',[値種類コード]="A04")
)
//答え(原単位の分子÷原単位の分母)を計算する
VAR Answer=DIVIDE(CO2_Quantity,Unit)
RETURN
Answer
なお、式に使っている[C0002_CO2換算値]はRELATED関数でエネルギー値をCO2排出量に変換したものです。
複雑に見えますが、実際は次の1.~3. の3要素だけで構成されています。
- CO2排出量を計算する(分子)
- 勤務時間合計を計算する(分母)
- CO2原単位を計算する(分子÷分母)
そして各要素をVARで定義して、RETURNで答えを返すことで可読性を高めています。
CO2排出量を計算する(分子)
まず、原単位の分子となるCO2排出量を計算します。
CALCULATE(SUM([CO2排出量] で合計を計算する、その条件はコンマ(“,”)に続く以下です。
値種類コードA01~A03(電気、ガス、ガソリン)かつ
共用部門を除く([C02_部門]<>”04_共用”)
FILTER関数を使って設定するのがポイントです。今回のように条件が2つ以上ある場合はコンマでFILTER関数を続けます。
最後に閉じ括弧で式を締めて完成です。
勤務時間合計を計算する(分母)
次に、原単位の分母となる勤務時間を計算します。
勤務時間を表す値種類コードはA04です。そこで、A04だけを対象として合計します。
分子との式の違いはFILTER条件だけです。
CO2原単位を計算する
最後に、CO2排出量を勤務時間で割ります。
DIVIDE関数を使って、「CO2排出量 ÷ 勤務時間」を計算しています。そしてRETURNでAnswerを返します。
今回のポイントは「集計したい値に条件を付けるためにCALCULATEを使う」手法を、実際のKPI作成を通して理解することです。
実装|KPIカードを作る
今回は以下のPowerBIバージョンで実装します。
データ取込み
ホーム―データを取得-テキスト/CSV の順にクリックします。その後の方法は第2回と同様です。

もし第4回同様に「1行目がヘッダにならない(下図はColumn1,Column2がヘッダになっている)」不具合があれば、「データの変換」をクリックして修正して下さい。方法は第四回のFAQを参照して下さい。

リレーション追加
今回データ取込したマスタと前回第6回で作成した日付テーブルとの間に以下のようなリレーションシップを形成します。



リレーションシップの作成方法は第3回と同様です。
RELATED関数を使った値計算
各エネルギー値をCO2排出量に換算します。
実績テーブル(D01_Energy_2020)を右クリックして「新しい列」を選択、以下の式を入力します。計算列の作成方法は第3回と同様です。
C0002_CO2換算値 = RELATED('D02_CO2kanzan'[CO2換算係数])*[値]
CALCULATEメジャー作成
メジャー作成です。計算列と違い、メジャーは作成テーブルが何処でも良い、という特徴があります。今回はメジャー専用テーブルに纏めて整理することにします(実績テーブルにメジャーを作成しても問題ありません、完全に好みです)。
「モデリング―新しいテーブル の順に選択して、名前を例えば「T02_Measure」と入力してEnterキーを押せばメジャー専用の空テーブルが出来上がります。

後はテーブルを右クリック、新しいメジャーを選択して、先ほど示したCALCULATE式を入力すればメジャー作成完了です。
レポートへのカードの配置とメジャーの表示
視覚化-カードを選択して、下図のようにメジャー式をドラッグ&ドロップします。

カードの書式設定
デフォルトのカード状態だと、イメージしたアウトプットと違うことが多々あります。
下図のようにラベル(メジャー名)が不要、レイアウト縦横が逆 などが該当したとします。そこで書式設定を変更することにします。

ラベルを消去します。カードを選択した状態で、ビジュアルの書式設定-ビジュアル―吹き出し を展開して、ラベルのチェックを外します。

レイアウトを変更します。同様に、複数カテゴリのレイアウト―レイアウト を展開して、並び替え は「横」を選択します。

サイズと位置を変更します。ビジュアルの書式設定-全般-プロパティ を展開して、サイズと位置を下図のように設定しておきます(設定は一例です)。

KPIカードに対して部門スライサを無効にする
今回のニーズとして、KPIカードは部門スライサ選択如何に関わらず常に全部門表示させたいとします。
しかし今の状態だと部門スライサで「営業部」を選択すると(下図の緑枠)、他の部門のKPIが表示されなくなります(下図の赤枠)。

これを解決するために「相互作用を編集」機能を使います。
部門スライサを選択して、書式-相互作用を編集 の順にクリックします。

そしてKPIカードの相互作用を「なし」に変えます。
実操作ではKPIカードの相互作用を編集します。
つまり下図赤枠のような、「グラフとフィルタ」マークが有効になっている状態から、「〇と斜線」マークをクリックして有効化します。

KPIカードの簡易動作テスト
スライサ操作によってKPIカードの値が動的に変化するかテストします。以下の2点をお試し下さい。
- 日付スライサ選択や拠点スライサ選択によって値が変化する
- 部門スライサ選択しても表示が変化しない、全部門表示のままである
次回予告|CALCULATEで共用部分を追加
次回は今回作成したCO2原単位に「共用部分」を追加します。
共用部分のCO2排出量を各部門に反映するためには、使用時間に応じた按分計算が必要です。
今回よりも少し複雑になりますが、ここでもCALCULATEを活用します。
今回作った基本的なCALCULATEメジャーを土台に、さらに実務的な計算へ進んでいきます。
まとめ
今回は、Power BIのメジャーとCALCULATE関数を使って、CO2原単位のKPIを作成しました。
- メジャーは、スライサなどの条件に応じて動的に計算できる
- CALCULATEは、集計に条件を付けるときに活躍する
- CO2原単位を「CO2排出量÷勤務時間」に分けて計算した
- 作成したKPIメジャーをカードに配置し、レポート上で確認できるようにした
今回はCALCULATEの基本的な使い方を、実際のKPI作成を通して体験しました。
次回は共用部分の按分計算にも挑戦します。Power BIの実務的なメジャー作成に、ぜひ役立ててください。
FAQ
Q1. CALCULATE関数は何をする関数ですか?
CALCULATEは、条件を追加・変更して計算するための関数です。
例えば「売上の合計」だけではなく、「日本の売上だけ」「営業部の売上だけ」のように条件を付けて集計できます。
今回も、CO2排出量や勤務時間を値種類コードで絞り込んで集計するためにCALCULATEを使いました。
Q2. メジャーと計算列は何が違いますか?
計算列は、テーブルの各行を計算して値を作ります。
一方、メジャーはビジュアルに配置して使い、スライサなどの条件に応じて計算結果が変化します。
今回のように「選択した年月によってKPIの値を変える」といった処理では、メジャーが活躍します。
Q3. なぜCALCULATEとSUMを組み合わせるのですか?
SUMは単純に値を合計する関数です。
CALCULATEを組み合わせることで、「どの条件のデータを合計するのか」を指定できます。
今回であれば、A01~A03だけを対象にしてCO2排出量を合計する、といった使い方です。
Q4. なぜVARとRETURNを使うのですか?
計算を分割して、DAX式を読みやすくするためです。
今回のメジャーでは、「CO2排出量」「勤務時間」「最終結果」に分けています。
複雑なメジャーになるほど、VARを使って途中計算に名前を付ける方法が役立ちます。
Q5. 今回のCO2原単位に共用部分は含まれていますか?
いいえ、今回は含めていません。
共用部分のCO2排出量を部門などに反映するには、使用時間などを使った按分計算が必要になります。
その処理は次回講座で扱います。
Q6. スライサはスライダを使わないのですか?
今回はチェックボックス形式のスライサを使います。
スライダ形式では「2020年1月~3月」のような連続した期間を選ぶことはできますが、「2020年1月・2月・3月」と「2020年7月・9月」のように、飛び飛びの年月を自由に選択する操作には向いていません。
今回のように特定の年月を複数選択したい場合は、チェックボックス形式の方が柔軟です。
前回作成した日付スライサをそのまま利用することで、選択した年月に応じて今回のCALCULATEメジャーも動的に変化します。
以上

コメント