ブログ

Power BI DAX関数入門 CALCULATE・IF関数などの基本的な使い方を初心者向けに分かりやすく解説

#Power BI #DAX関数 #IF関数 #CALCULATE

積極採用中
セミナー情報

Power BIを使い始めると必ず出てくるのが「DAX(Data Analysis Expressions)」という計算式です。
一見すると Excel 関数に似ているため、「同じ感覚で使える」と思われがちですが、実際はまったく別物です。特に、初心者がつまずきやすいポイントとして「フィルターコンテキスト」や「CALCULATEの働き」が挙げられます。

この記事では、DAXの基本概念から、よく使う主要関数、実務で必須となるCALCULATEの理解ポイント、さらに初心者が陥りやすい典型的なエラーまで網羅的に解説します。

難しい数式を暗記する必要はありません。まずは「考え方」と「典型パターン」を理解することが重要です。

DAX関数とは?Power BIにおける役割を理解する

DAXとは(Data Analysis Expressions の概要)

DAXとは、Power BI、Analysis Services、Excel Power Pivot などで利用される“分析専用の計算式”です。Excelと似た見た目のため誤解されやすいですが、役割はまったく異なります。

DAXは主に次のように使われます。

  • レポートに表示する指標(メジャー)を計算する
  • データモデルに計算列を追加する
  • フィルターの切り替えや条件別集計を行う

特に「レポートに表示する指標の計算」が中心で、Power BIの柔軟な分析力を支える重要な要素です。

Excel関数との違い

DAXとExcelは、表面的には似ていても中身は異なります。比較すると次のとおりです。

特に「同じ式でもフィルターを変えると結果が自動で変わる」というのが最大の特徴です。

DAXが使われる3つの場面(計算列/メジャー/テーブル)

DAXは主に次の3か所で利用されます。

  1. 計算列
  2. 行ごとに値を計算し、新たな列として保存する(例:商品名からカテゴリ抽出)。

  3. メジャー
  4.  集計や再計算を行う関数。レポートで最も使用される。

  5. 計算テーブル
  6.  DAXで新たなテーブルを生成できる(例:カレンダーテーブルの作成)。

初心者がまず使いこなすべきはメジャーです。

まず覚えたい基本DAX関数

SUM/AVERAGE:集計の基本

SUM は合計、AVERAGE は平均を求める基本的な集計関数です。

例:
売上合計 = SUM('売上'[金額])
平均単価 = AVERAGE('売上'[単価])

 
Power BIのメジャーでは最も利用頻度が高い関数です。

IF:条件分岐の基本構文

IFは条件に応じて表示内容を変えるときに使用します。

例:
利益率が高いか =
IF([利益率] > 0.3, "高い", "通常")

 
KPIの評価、色分けフラグ、条件別分類など幅広く利用できます。

CALCULATE:最も重要な関数(フィルターの切り替え)

CALCULATEは“フィルターを変更して再計算する”特別な関数です。

例:
女性売上 = 
CALCULATE(
    [売上合計],
    '顧客'[性別] = "女性"
)

 
フィルターコンテキストを変更できる唯一の関数であり、DAXの中核です。

COUNTROWS/DISTINCTCOUNT:データ数を数える

COUNTROWS は行数のカウント、DISTINCTCOUNT は重複なしのカウントです。

例:
顧客数 = DISTINCTCOUNT('顧客'[顧客ID])
来店回数 = COUNTROWS('来店履歴')

 

CALCULATE関数を使いこなす

フィルター文を追加して特定条件で集計

CALCULATEの基本用途は「特定の条件で集計し直す」ことです。

例:
直近月売上 =
CALCULATE(
    [売上合計],
    '日付'[年月] = MAX('日付'[年月])
)

 
フィルターを追加して条件集計が自在に行えるのが強みです。

ALL関数と組み合わせて「全体比」を出す

ALL関数でフィルターを解除すると「全体に対する割合」を計算できます。
表形式で見るとイメージしやすくなります。

DAX例:
売上割合 =
DIVIDE(
    [売上合計],
    CALCULATE([売上合計], ALL('店舗'))
)

 

実務でよく使う例:「女性会員売上」「直近月売上」

CALCULATEは「特定条件で集計し直す」という役割を持つため、実務でも次のような場面で頻繁に使われます。

ここでは初心者がまず押さえておきたい代表的なパターンを紹介します。

  • 属性別集計(性別 / 地域 / 店舗)
  • もっとも基本的な使い方で、「女性だけ」「特定地域だけ」など、条件でデータを絞り込む際に利用します。
    分析の出発点として最も使用頻度の高いパターンです。

  • 最新月の自動抽出
  • 毎月レポートを更新する場合、最新月を自動的に判定し、その月だけを集計する場面が多くあります。
    MAX関数と組み合わせることで、更新作業の手間を減らせます。

  • 特定期間のみの集計
  • キャンペーン期間や四半期など、期間を指定して集計したいケースもよくあります。
    フィルター条件を追加するだけで柔軟な期間集計ができる点がCALCULATEの強みです。

これら3つは どの業界でも必ず使われる基本パターンであり、まずここを理解しておくと実務での応用がしやすくなります。

IF関数の応用と注意点

IF関数でKPIの達成状況を色分け表示

IF関数は、もっとも基本的な条件分岐で、KPIの達成状況や分類判定によく使われます。

例:
達成状況 =
IF([売上達成率] >= 1, "達成", "未達")

 
このように「条件 → 表示内容」をシンプルに定義できるため、KPIカード・表・マトリクスの色分けやステータス表示で非常に利用頻度が高い関数です。

SWITCH関数で複数条件を整理

条件が増え、IFを何段も重ね始めたらSWITCHを使うのがおすすめです。複数条件を縦に並べるだけで整理しやすく、式の見通しが良くなります。

例:
会員ランク =
SWITCH(
    TRUE(),
    [購入回数] >= 10, "ゴールド",
    [購入回数] >= 5,  "シルバー",
    "ブロンズ"
)

 
TRUE() を使うことで、IFの連続よりも自然な読み方ができ、条件が3つ以上ある場合の定番パターンとしてよく使われます。

複雑なIFネストを避けるベストプラクティス

IFは便利ですが、入れ子が深くなると式が読みにくくなり、保守性も下がります。
次のような工夫を取り入れると、メジャーが整理されて扱いやすくなります。

  • IFの入れ子を深くしない(3段以上は避けるのが目安)
  • SWITCH + TRUE() で条件を一覧化する
  • 段階的にメジャーを分割する
  • 例:まず「条件式」を別メジャーで定義してから、最終判定に使う

このように、式を“無理に1つにまとめない”ことが、実務では重要になります。

よくあるつまずきポイントと対処法

コンテキスト(行・フィルター)の理解不足

DAXで最初にぶつかる壁が、この「コンテキスト」の考え方です。
同じ式でも、どの行を対象にするか(行コンテキスト)、どの条件がかかっているか(フィルターコンテキスト) によって結果が変わります。

    例:
  • 行コンテキスト:1行ずつ値を計算する(計算列で使われる考え方)
  • フィルターコンテキスト:スライサー・ページフィルターなどの条件によって結果が変わる(メジャーで中心になる考え方)

初心者が「同じ式なのに結果が変わる」と感じるのは、この2つの影響を受けているためです。コンテキストを意識すると、DAXの動きが理解しやすくなります。

DAX式が思った通りに動かない理由

DAXが期待通りの結果を返さない場合、次のような原因がよくあります。

  • フィルターが意図せず残っている
  • スライサー・ビジュアルレベルのフィルターが計算に影響することがあります。

  • モデルのリレーションが正しくない
  • 関連づけの向きやキーの不整合で、値がうまく参照されないケースが多いです。

  • 計算列でやるべき処理をメジャーで行っている(逆も同様)
  • 行ごとに保持したい値は計算列、集計して計算したい値はメジャー、と役割が異なります。

式の誤りというより、「どの場面で DAX を使うか」 がズレているケースが多いため、まずはモデル側の確認が効果的です。

デバッグに役立つ関数:VALUES・HASONEVALUE・SELECTEDVALUE

DAXを検証する際に役立つ関数も押さえておくと便利です。

  • VALUES:現在適用されているフィルターの値を一覧として返す
  • → どの条件が効いているか確認したいときに使える

  • HASONEVALUE:1つだけ選択されているかを判定
  • → 月次・店舗など「単一選択前提の式」を書くときに便利

  • SELECTEDVALUE:スライサーやフィルターで選択された値を取得
  • → ドロップダウンの選択値をメジャー内で利用する場面で頻出

特に SELECTEDVALUE は、レポートフィルターやスライサーと組み合わせて条件計算を行う際に、実務で最も多く使われる関数のひとつです。

実務で役立つDAX式サンプル集

売上前年比

前年比は月次・週次レポートで最も使われる指標のひとつです。
現在値と「1年前の同期間」を比較するため、DATEADD と CALCULATE を組み合わせます。

売上前年比 =
DIVIDE(
    [売上合計] - CALCULATE([売上合計], DATEADD('日付'[日付], -1, YEAR)),
    CALCULATE([売上合計], DATEADD('日付'[日付], -1, YEAR))
)

 
Power BIでは、日付テーブルとのリレーションが正しく設定されていることが前提です。
正しく構築されていれば、期間を変えても自動で前年比較が機能するため、実務での使用頻度が非常に高い計算式です。

目標達成率

KPI評価で最もよく使われるのが「目標に対してどれくらい達成しているか」を示す達成率です。

目標達成率 =
DIVIDE([売上合計], [売上目標])

 
DIVIDE関数を使うことで、0除算を自動で回避でき、「達成」「未達」の判定メジャーと組み合わせることで、KPIカードや色分けにも応用できる汎用的な式です。

顧客単価・来店回数などのKPI指標

基本的なKPIも、DAXを使うことで安定して計算できます。

顧客単価 = DIVIDE([売上合計], [顧客数])
来店回数 = COUNTROWS('来店履歴')

 

  • 顧客単価(客単価):売上の構成を把握するための基礎指標
  • 来店回数:店舗・サービス業で頻繁に使われる行動指標

これらは小さなメジャーですが、後続の分析(セグメント別の比較や前年比計算)にもつながるため、最初に押さえておきたい基本KPIです。

まとめ:DAXは「慣れ」と「文脈理解」が鍵


DAXは複雑に見えますが、基本的な考え方は「コンテキストを理解しながら計算する」だけです。
特に、CALCULATEのフィルター切り替え、IFやSWITCHによる分類、COUNT系の基本集計を押さえることで、多くの実務レポートを自作できるようになります。
まずは記事内のサンプル式を実際に入力し、結果がどのように変化するのか試してみることが上達への近道です。

<Power BIハンズオンセミナー>
弊社ではPower BIをはじめとするさまざまな無料オンラインセミナーを実施しています!
>>セミナー一覧はこちら

<Power BIの導入支援>
弊社ではPower BIの導入支援を行っています。ぜひお気軽にお問い合わせください。
>>Power BIの導入支援の詳細はこちら

<PowerBIの入門書を発売中!>
弊社ではPower BIの導入から基本的な使い方・活用方法の基礎などをわかりやすく解説した書籍も販売しています。
>>目次も公開中!書籍の詳細はこちら

CONTACT
お問い合わせ

ご相談やご依頼、病院マスタなどについてのお問い合わせはこちらのお問い合わせフォームから。

サービスなどについてのお問い合わせ 病院マスタについてのお問い合わせ

メールお問い合わせ