はじめに
Microsoft Power BI や Excel の Power Pivot では、DAX (Data Analysis Expressions) を活用することで、データの集計・分析をより高度かつ柔軟に実現できます。
DAX はシンプルな集計関数から、複雑なフィルタ条件を設定しての計算まで、幅広い用途に対応しており、ビジネスインテリジェンスの現場では欠かせない技術です。
本記事では、データ分析で頻繁に利用される SUM、COUNT、DIVIDE 関数と、条件付き計算を実現する CALCULATE 関数について、基本的な使い方や実践的な活用シーン、注意点などを詳しく解説します。
DAX の基本概念と役割
DAX は、Power BI や Power Pivot の計算列・メジャー作成の根幹をなす関数群です。
主な役割は以下の通りです。
- 集計の実行: 数値の合計、平均、最大値など、基本統計の計算に利用
- フィルタリング: 特定の条件に沿ったデータ抽出や絞り込みが可能
- 条件付き計算: 複雑な条件の組み合わせでカスタム計算を実現
この柔軟性により、DAX は多種多様な分析シナリオで活躍します。
SUM 関数の基本と応用
基本的な使い方
SUM 関数は、指定した列内の数値をすべて合計するシンプルな関数です。
例えば、売上データの合計を計算する場合は、以下のように記述します。
Total Sales = SUM(Sales[Amount])
この例では、Sales
テーブルの Amount
列にある全ての数値を合計し、総売上を算出しています。
応用例
- フィルタ付き合計: CALCULATE 関数と組み合わせることで、特定の条件下の合計を算出することが可能です。
- データ検証: シンプルな関数であるため、計算結果の整合性チェックにも有用です。
COUNT 関数と COUNTROWS 関数の使い分け
COUNT 関数
COUNT 関数は、指定した列に存在する値(NULL以外)の個数をカウントします。
例えば、注文数をカウントする場合は次のようになります。
Order Count = COUNT(Orders[OrderID])
この例では、Orders
テーブルの OrderID
列に値が入っている行数をカウントしています。
COUNTROWS 関数
一方、テーブル全体の行数をカウントする場合は COUNTROWS 関数を使用します。
Total Rows = COUNTROWS(Orders)
ポイント: 「特定の列の値が存在する行数」と「全行数」を区別して、適切な関数を使い分けることが重要です。
DIVIDE 関数で安全な割り算を実現
基本構文とメリット
DIVIDE 関数は、分母がゼロになるリスクを考慮した安全な割り算を実行するための関数です。
その基本構文は以下の通りです。
DIVIDE(
分子,
分母,
代替値(オプション)
)
通常の割り算 n1 / n2
では、n2
がゼロの場合エラーが発生しますが、DIVIDE 関数を使うことで、分母がゼロの場合にあらかじめ指定した代替値を返すことができます。
利用例: 利益率の計算
例えば、利益率を算出する場合は次のように記述できます。
Profit Margin =
VAR TotalProfit = SUM(Sales[Profit])
VAR TotalAmount = SUM(Sales[Amount])
RETURN DIVIDE(TotalProfit, TotalAmount, 0)
この例では、Sales[Profit]
の合計を Sales[Amount]
の合計で割り、もし TotalAmount
がゼロの場合は 0
を返します。
注意: ゼロ除算によるエラーを防ぐため、割り算を行う際は常に DIVIDE 関数の利用を検討してください。
CALCULATE 関数の使い方
基本的な使い方
たとえば、特定の地域と年度に絞った売上を算出する場合、以下のように記述します。
Sales in Region A and 2021 = CALCULATE(
SUM(Sales[Amount]),
Sales[Region] = "A",
YEAR(Sales[Date]) = 2021
)
この例では、Sales[Region]
が "A" で、かつ Sales[Date]
の年が 2021 のデータのみが対象となります。
複数条件の指定方法
AND 条件の場合
CALCULATE に複数のフィルタ条件を渡すと、各条件は AND 条件 として評価されます。
上記の例はその典型です。
OR 条件の実装
意図的に OR 条件を適用したい場合は、論理演算子を使って明示的に条件を組み合わせる必要があります。
以下の例では、A[xxx]
が 1 または A[yyy]
が 3 または A[zzz]
が 6 のいずれかの条件を満たす場合に、データを抽出します。
Filtered Sales = CALCULATE(
SUM(A[Amount]),
(A[xxx] = 1) || (A[yyy] = 3) || (A[zzz] = 6)
)
ポイント:
- カンマ区切りで条件を並べると自動的に AND 条件になるため、OR 条件を実現する場合は必ず括弧と論理演算子を用いてください。
- 複雑なフィルタ条件を扱う際は、条件の優先順位や括弧の使い方に十分注意しましょう。
まとめ
DAX を活用することで、Power BI や Excel でのデータ分析がより柔軟かつ高度に行えるようになります。
特に、SUM、COUNT、DIVIDE といった基本関数と、フィルタ条件を自在に操作できる CALCULATE 関数の理解は、精度の高いレポートやダッシュボード作成の鍵となります。
おわりに
DAX の習熟は継続的な学習と実践が必要ですが、今回の内容が皆様の分析業務における一助となれば幸いです。
Happy coding!