この記事は、Power BI Desktop を初めて使用するユーザー向けです。 さまざまな基本的な計算とデータ分析の問題を解決するために Data Analysis Expressions (DAX) を使用する方法を、手早く簡単に説明します。 いくつかの概念について説明した後、一連のタスクを実行します。学んだ内容をテストするクイズも含まれています。 この記事を完了すると、DAX で最も重要な基本概念をよく理解できるようになります。

DAX とは

DAX は、関数、演算子、および定数を集めたもので、これらを数式または式の中で使用して、1 つまたは複数の値を計算して返すことができます。 さらに簡単に説明すると、DAX は、現在のモデルに既に含まれているデータから新しい情報を作成するのに役立ちます。

DAX が重要である理由

新しい Power BI Desktop ファイルを作成し、そこにデータをインポートする操作は非常に簡単です。 DAX 数式をまったく使用せずに、価値ある洞察を表示するレポートを作成することもできます。 しかし、複数の製品カテゴリと、さまざまな日付範囲での成長率を分析する必要がある場合はどうでしょうか。 または、前年比の成長率を市場の傾向と比較して計算する必要がある場合はどうでしょうか。 DAX 数式は、そのような機能を備えており、その他にも多くの重要な機能があります。 効率の良い DAX 数式を作成する方法を習得すれば、データを最大限に活用するのに役立ちます。 必要な情報を取得する際に、最終結果に影響する実際のビジネス問題の解決を始めることができます。 これが Power BI の力であり、DAX は目的を達成するための助けになります。

前提条件

Microsoft Excel で数式を作成する操作に慣れていれば、その知識が DAX を理解するうえで役立ちます。 しかし、Excel の数式の使用経験がない場合でも、ここで説明する概念は、DAX の数式を作成し、実世界での BI の問題を解決するのに役立ちます。

ここでは、計算で使用される DAX の数式を理解することに焦点を合わせ、メジャーと計算列について具体的に説明します。 読者は Power BI Desktop でのデータのインポートやレポートへのフィールドの追加などの操作を既に理解しており、メジャーおよび計算列についても基礎的な概念を理解しているものと想定します。

ブックの例

DAX について学習する最善の方法は、基本的な数式を作成し、それを実際のデータに対して使用して、その結果を自分で見ることです。 この記事で取り上げる例とタスクでは、Contoso Sales Sample for Power BI Desktop Preview ファイルを使用します。 これは、「チュートリアル: Power BI Desktop で独自のメジャーを作成する」の記事で使用しているのと同じサンプル ファイルです。 ダウンロードするにはこちらをクリックしてください。

さあ始めましょう!

DAX について説明するにあたり、この記事では、 構文関数 、および コンテキスト という 3 つの基本的な概念を土台にします。 もちろん、DAX にはこれ以外にも重要な概念がありますが、これら 3 つの概念を理解することは、DAX のスキルを構築するための最適な土台を提供します。

構文

独自の数式を作成する前に、DAX の数式の構文を見てみましょう。 構文には、数式を構成するさまざまな要素が含まれています。さらに単純に言うと、数式をどのように書くか、ということが構文です。 たとえば、次のメジャー用の単純な DAX 数式を見てみましょう。

この式には、次の構文要素が含まれています。

A. メジャー名は Total Sales です。

B. 等号演算子 (=) は、数式の先頭を示します。 計算が完了すると、結果が返されます。

C. DAX 関数 SUM は、Sales[SalesAmount] 列にあるすべての数値を合計します。 関数については、後で詳しく説明します。

D. かっこ () は、1 つ以上の引数を含む式を囲みます。 すべての関数には、少なくとも 1 つの引数が必要です。 引数は、関数に値を渡します。

E. 参照先のテーブルは Sales です。

F. Sales テーブル内の参照先の列は [SalesAmount] です。 この引数により、合計を集計する列を SUM 関数に伝えます。

DAX の数式を解釈するときは、数式の各要素を分割し、日常会話の言葉に置き換えてみることが役立ちます。 たとえば、この式は、次のように読むことができます。 > ""Total Sales" という名前のメジャーについて、Sales テーブル内の [SalesAmount] 列の値の合計を計算する (=)。"

このメジャーをレポートに追加すると、組み込んだ他のフィールド (たとえば、"Cell Phones in the USA") のそれぞれについて売上高の合計値を計算して返します。

ここで、このような疑問が浮かぶかもしれません。「このメジャーは、前に別の記事でレポートに "SalesAmount" フィールドを追加しただけで実行できたのと同じものではないか」。 確かに、そうです。 しかし、"SalesAmount" フィールドからの値を合計する独自のメジャーを作成することには十分な理由があります。他の数式で引数として使用できるからです。 これは少し紛らわしいかもしれませんが、DAX の数式のスキルが上がると、これを使用することで数式やモデルの効率が上がることを理解できるはずです。 実際、この後で登場する Total Sales メジャーは、他の数式の引数として使用されています。

次に、この数式に関して、詳細な点をいくつか説明します。 まず、SUM という関数に注目します。 関数は、数値、日付、時刻、テキストなどを使用した複雑な計算や操作を容易に実行できるようにする、事前に記述された数式です。 関数については、後で詳しく説明します。

別の点として、列 [SalesAmount] の前に、その列が属するテーブル Sales が指定されていることに注目します。 これは、完全修飾列名というもので、テーブル名を列名の前に指定します。 同じテーブルから参照する列では、数式にテーブル名を含める必要はありません。 これにより、多数の列を参照する長い数式をできるだけ短く、また読みやすく書くことができます。 ただし、同じテーブルにある場合でも、メジャーの数式にテーブル名を含めることをお勧めします。 > 注: テーブル名にスペース、予約されたキーワード、または使用できない文字が含まれる場合は、テーブル名を単一引用符で囲む必要があります。 現在のロケールがその文字セットをサポートしているかどうかに関係なく、ANSI 英数字の範囲外のいずれかの文字が名前に含まれる場合にも、テーブル名を引用符で囲む必要があります。

数式は、正しい構文で記述することが重要です。 ほとんどの場合、構文が正しくないと、構文エラーが返されます。 他のケースとして、構文は正しくても、返される値が予期したものと違う場合があります。 Power BI Desktop の DAX エディターには、適切な要素を選択できるように支援し、正しい構文で数式を作成できるようにする提案機能があります。

シンプルな数式を作成してみましょう。 このタスクを実行すると、数式の構文について理解を深め、数式バーに表示される提案機能がどのように役立つかを知ることができます。

タスク: メジャーの式を作成する

このタスクを完了するには、Contoso Sales Sample Power BI Desktop ファイルを開く必要があります。

1.レポート ビューのフィールド リストで Sales テーブルを右クリックし、[新しいメジャー] をクリックします。

2.数式バーで、新しいメジャー名として「Previous Quarter Sales」と入力して、"Measure" をそれに置き換えます。

3.等号の後に「SUM」と入力し、開きかっこを入力します。 > ここでは、列名を入力してすぐに合計する代わりに、別の関数を入力して、合計するデータを フィルター によって抽出することにします。

4.かっこの間に「CALCULATE」と入力し、開きかっこを入力します。 > CALCULATE 関数は、CALCULATE 関数に渡す引数に基づいて、合計する金額をフィルター処理するために使用します。 これを、入れ子にした関数と呼びます。 CALCULATE 関数には、少なくとも 2 つの引数が必要です。 1 つ目の引数は評価する式、2 つ目の引数はフィルターです。

5.CALCULATE 関数のかっこ () の間に、「Sales[SalesAmount]」と入力します。 これは、CALCULATE 関数に対する最初の引数となる式です。

6.最初のフィルターを指定するためにコンマ (,) を入力した後、「PREVIOUSQUARTER」と入力し、開きかっこを入力します。 > PREVIOUSQUARTER というタイム インテリジェンス関数を使用すると、前の四半期にフィルター処理して SUM の結果を計算できます。

7.PREVIOUSQUARTER 関数のかっこ () の間に、「Calendar[DateKey]」と入力します。 > PREVIOUSQUARTER 関数には、1 つの引数として、連続した日付範囲を含む列を指定します。

8.PREVIOUSQUARTER 関数および CALCULATE 関数に渡された両方の引数が、2 つの閉じかっこ )) で閉じられていることを確認してください。

数式は、次のようになるはずです。 > Previous Quarter Sales = CALCULATE(SUM(Sales[SalesAmount]), PREVIOUSQUARTER(Calendar[DateKey]))

9.数式バーのチェック マーク をクリックするか、Enter キーを押して、数式を検証し、それをモデルに追加します。

これで完成です。 DAX を使用して、ある程度複雑なメジャーを 1 つ作成できました。 この式で実行する内容は、レポートに適用するフィルターに応じて、前の四半期の売上合計を計算することです。 たとえば、"SalesAmount" と、新しい "Previous Quarter Sales" メジャーをグラフに配置し、スライサーとして "Year" と "QuarterOfYear" を追加すると、次のようになります。

ここまでで、DAX 数式のいくつかの重要な側面を紹介しました。 まず、この式には 2 つの関数が含まれています。 また、PREVIOUSQUARTER タイム インテリジェンス関数が CALCULATE フィルター関数に渡される引数として入れ子になっていることに注目してください。 DAX 数式には、最大 64 個の入れ子になった関数を含めることができます。 もっとも、そこまで多くの入れ子にした関数を含む数式はほとんど使われないはずです。 実際、そのような数式を作成し、デバッグするのは非常に困難ですし、おそらく計算時間も長くなるでしょう。

この数式では、フィルターも使用しました。 フィルターは、計算する対象を絞り込みます。 その場合、引数として 1 つのフィルターを選択します。実際には、フィルターは別の関数の結果です。 フィルターについては、後で詳しく説明します。

最後に、CALCULATE 関数を使用しました。 これは、DAX で最も強力な関数の 1 つです。 モデルを作成してさらに複雑な数式を作成するようになると、おそらくこの関数を多数使用することになります。 CALCULATE 関数について説明するのはこの記事の範囲外ですが、DAX の知識が増すにつれて、この関数に特に注意を向けてください。

構文クイズ

  1. 数式バーのこのボタンはどのように機能しますか。 > >

  2. DAX の数式にある列名は常に何で囲まれていますか。

答えは、この記事の最後に記載します。

関数

関数は、特定の順序または構造で並んだ特定の値 (引数と呼びます) を使用して計算を実行する、定義済みの数式です。 引数として指定できるのは、別の関数、別の数式、式、列参照、数値、テキスト、TRUE または FALSE などの論理値、または定数です。

DAX に含まれる関数のカテゴリは次のとおりです: 日付と時刻タイム インテリジェンス情報論理数学統計テキスト親子、およびその他の関数。 Excel の数式の関数に慣れている読者は、DAX 関数の多くが Excel 関数に似ていると感じるかもしれません。ただし、DAX 関数は、次のような点が特有です。

  • DAX 関数は、常に、列全体またはテーブルを参照します。 テーブルまたは列の特定の値だけを使用する場合は、数式にフィルターを追加します。

  • 行ごとに計算をカスタマイズする必要がある場合、DAX は、現在の行の値または関連する値を一種の引数として使用し、コンテキストによって異なる計算を実行する機能を提供しています。 コンテキストについては、後で詳しく説明します。

  • DAX には、値ではなくテーブルを返す関数が多く含まれています。 テーブルは表示されませんが、他の関数への入力を提供するために使用されます。 たとえば、テーブルを取得してその中の個別の値をカウントしたり、フィルター選択した複数のテーブルまたは列にまたがる動的な合計を計算したりできます。

  • DAX には、さまざまなタイム インテリジェンス関数が含まれています。 これらの関数では、日付範囲を定義または選択し、それに基づいて動的な計算を実行できます。 たとえば、対応する期間ごとに合計を比較できます。

  • Excel には、VLOOKUP というよく使用される関数があります。 DAX 関数では、Excel での VLOOKUP のようには、セルまたはセル範囲を参照することがありません。 DAX 関数では、列またはテーブルを参照として受け取ります。 また、Power BI Desktop ではリレーショナル データ モデルを取り扱うという点に注意してください。 別のテーブル内の値を検索することは非常に簡単な操作で、ほとんどの場合、数式を作成する必要はまったくありません。

ご覧のとおり、DAX の関数を使用すると非常に強力な数式を作成できます。 ここでは、関数のごく基礎的な部分だけを紹介しました。 DAX のスキルが増すにつれて、多くの異なる関数を使用して数式を作成できるようになります。 各 DAX 関数の詳細について学ぶ最適な資料の 1 つは、「DAX 関数リファレンス」です。

関数クイズ

  1. 関数が常に参照するものは何ですか?

  2. 1 つの数式に複数の関数を含めることはできますか?

  3. 2 つのテキスト文字列を連結して 1 つの文字列にするために使用する関数のカテゴリは何ですか?

答えは、この記事の最後に記載します。

コンテキスト

コンテキストは、理解しておくべき最も重要な DAX の概念の 1 つです。 DAX には、行コンテキストとフィルター コンテキストという 2 種類のコンテキストがあります。 最初に、行コンテキストについて説明します。

行コンテキスト

最も簡単に考えると、行コンテキストは現在の行であると考えることができます。 行コンテキストは、テーブル内の単一行を識別するためのフィルターを適用する関数が数式に含まれている場合に適用されます。 この関数は、その本来的な機能として、フィルターの対象であるテーブルの各行の行コンテキストに適用されます。 この種類の行コンテキストは、通常、メジャーに適用されます。

フィルター コンテキスト

フィルター コンテキストは、行コンテキストよりも理解するのが難しい考え方です。 最も簡単に考えると、結果または値を決定する計算に適用される 1 つまたは複数のフィルターのことを、フィルター コンテキストと考えることができます。

フィルター コンテキストは、行コンテキストの代わりにはなりません。むしろ、行コンテキストに追加して適用されるものです。 たとえば、計算に含める値をさらに絞り込むために、行コンテキストを指定するだけでなく、その行コンテキスト内の特定の値 (フィルター) のみを指定するフィルター コンテキストを適用できます。

フィルター コンテキストは、レポート内で簡単に確認できます。 たとえば、視覚化に TotalCost を追加し、さらに Year と Region を追加すると、特定の年度と地域に基づいてデータのサブセットを選択するフィルター コンテキストを定義したことになります。

DAX でフィルター コンテキストが非常に重要なのはなぜでしょうか。 フィルター コンテキストを適用する最も簡単な方法は視覚エフェクトにフィールドを追加することですが、フィルター コンテキストは ALL、RELATED、FILTER、CALCULATE などの関数を使用してフィルターを定義したり、リレーションシップによって定義したり、他のメジャーや列によって定義したりする DAX 数式の中でも適用できるためです。 たとえば、次の数式に含まれる "Store Sales" という名前のメジャーについて考えてみましょう。

この式をよりよく理解するために、他の数式と同じように、細かく分割してみます。

この式には、次の構文要素が含まれています。

A. メジャー名は Store Sales です。

B. 等号演算子 (=) は、数式の先頭を示します。

C. CALCULATE 関数は、指定したフィルターによって変更されたコンテキストで、式を引数として評価します。

D. かっこ () は、1 つ以上の引数を含む式を囲みます。

E. メジャー [Total Sales] は式と同じテーブルに含まれます。 メジャー Total Sales の数式は、=SUM(Sales[SalesAmount]) です。

F. コンマ (,) は、式の最初の引数とフィルター引数を分離します。

G. 完全修飾された参照列 Channel[ChannelName] です。 この例では、これが行コンテキストです。 この列の各行には、販売経路 (Store、Online、その他) が指定されています。

H. フィルターとして指定した特定の値 (Store) です。 この例では、これがフィルター コンテキストです。

この数式では、メジャー "Total Sales" によって定義される売上値が、Channel[ChannelName] 列にフィルター値 "Store" が入っている行についてのみ計算されます。

ご想像のとおり、数式で定義できるフィルター コンテキストには、強力な機能が非常に多く含まれています。 関連するテーブルから特定の値のみを参照することは、その一例に過ぎません。 コンテキストについて今すぐに完全に理解できないとしても、問題ありません。 自分で独自の数式を作成するにつれて、コンテキストについて理解が深まり、コンテキストが DAX において非常に重要である理由をよく理解できるようになります。

コンテキストのクイズ

  1. コンテキストの 2 つの種類には何がありますか?

  2. フィルター コンテキストとは?

  3. 行コンテキストとは?

答えは、この記事の最後に記載します。

まとめ

ここまでで、DAX の最も重要な概念の基礎を理解できましたので、さっそく、独自のメジャーの DAX 数式を作成できます。 DAX には確かに理解しにくい部分がありますが、多くの参考資料を入手できます。 この記事を読みながら、独自の数式を実際に作成してみると、ビジネス上の実際の課題を解決するために役立つその他の DAX の概念や数式についても理解できるようになります。 入手可能な DAX リソースは多数ありますが、最も重要なものは「Data Analysis Expressions (DAX) リファレンス」です。

Power Pivot や Analysis Services 表形式モデルなどの Microsoft BI ツールで DAX が利用されるようになって数年が経ち、多くの情報が入手可能になりました。 また、Microsoft や指導的な BI プロフェッショナルが執筆した書籍、ホワイトペーパー、およびブログからも、さらに詳細な情報を知ることができます。 さらに、TechNet の DAX リソース センター Wiki から開始するのもよいでしょう。

クイッククイズの答え

構文:

  1. メジャーを検証し、モデルに入力します。
  2. 角かっこ [] です。

関数:

  1. テーブルと列です。
  2. はい。 数式には最大 64 個の入れ子になった関数を含めることができます。
  3. テキスト関数

コンテキスト:

  1. 行コンテキストとフィルター コンテキストです。
  2. 単一の値を決定するための計算に含まれる 1 つ以上のフィルターのことです。
  3. 現在の行のことです。