ラボ - Power BI Desktop で DAX 計算を作成する (パート 1)

完了

環境にアクセスする

(前のラボから続行する場合を除き) このラボを開始する前に、上の [ラボの起動] を選択します。

data-ai\student としてラボ環境に自動的にログインします。

これで、このラボの作業を開始できます。

ヒント

ラボ環境をドッキングしてウィンドウいっぱいに表示されるようにするには、上部中央にある画びょうのアイコンを選択します。

画びょうのアイコンが強調表示されているラボのスクリーンショット。

このラボの推定所要時間: 45 分

このラボでは、Data Analysis Expressions (DAX) を使用して、計算テーブル、計算列、およびシンプルなメジャーを作成します。

このラボでは、次の作業を行う方法について説明します。

  • 計算テーブルを作成する

  • 計算列を作成する

  • メジャーを作成する

ラボのストーリー

このラボは、データの準備に始まり、レポートおよびダッシュボードとして発行するまでの完全なストーリーとして設計されたラボ シリーズの 1 つです。 ラボは任意の順序で完了できます。 しかしながら、複数のラボに取り組む場合は、最初の 10 のラボについては、次の順序で行うことをお勧めします。

  1. Power BI Desktop でデータを準備する

  2. Power BI Desktop でデータを読み込む

  3. Power BI Desktop でデータをモデル化する (パート 1)

  4. Power BI Desktop でデータをモデル化する (パート 2)

  5. Power BI Desktop で DAX 計算を作成する (パート 1) << 現在はここです。 これは、現在のモジュールのラボです。

  6. Power BI Desktop で DAX 計算を作成する (パート 2)

  7. Power BI Desktop でレポートをデザインする (パート 1)

  8. Power BI Desktop でレポートをデザインする (パート 2)

  9. Power BI ダッシュボードを作成する

  10. Power BI Desktop でデータ分析を実行する

  11. Power BI のページ分割されたレポートを作成する

注意

各ラボは、前のラボ作業がすべて完了した PBIX ファイルを使用して開始されます。 何らかの理由で作業が失われた場合は、次のラボの冒頭に示されているフォルダーから、その時点までの進行状況を含む PBIX ファイルを開くことができます。

演習 1:計算テーブルを作成する

この演習では、2 つの計算テーブルを作成します。 1 つ目は、Sales テーブルとの間の直接的なリレーションシップを実現する、Salesperson テーブルです。 2 つ目は、Date テーブルです。

タスク 1: 開始する

このタスクでは、ラボの環境を設定します。

重要

前のラボから継続している (そのラボを正常に完了した) 場合は、このタスクは行わないでください。 代わりに、次のタスクから続行してください。

  1. Power BI Desktop を開くには、タスク バーにある Microsoft Power BI Desktop ショートカットを選択します。

  2. 開始ウィンドウを閉じるには、ウィンドウの左上にある [X] を選択します。

  3. スターター Power BI Desktop ファイルを開くには、[ファイル] リボン タブを選択して Backstage ビューを開きます。

  4. [レポートを開く] を選択します。

    [ファイル] メニューが展開され、[レポートを開く] オプションが強調表示されているスクリーンショット。

  5. [レポートを参照] を選択します。

  6. [開く] ウィンドウで、D:\DA100\Labs\create-dax-calculations-in-power-bi-desktop\Starter フォルダーに移動します。

  7. Sales Analysis ファイルを選択します。

  8. [Open] を選択します。

  9. 情報ウィンドウが開いている場合はすべて閉じます。

  10. ファイルのコピーを作成するには、[ファイル] リボン タブを選択して Backstage ビューを開きます。

  11. [名前を付けて保存] を選択します。

    [ファイル] メニューが展開され、[名前を付けて保存] オプションが強調表示されているスクリーンショット。

  12. 変更の適用を求めるメッセージが表示されたら、[適用] を選択します。

  13. [名前を付けて保存] ウィンドウで、D:\DA100\MySolution フォルダーに移動します。

  14. [保存] を選択します。

タスク 2: Salesperson テーブルを作成する

このタスクでは、Salesperson テーブル (Sales との直接的なリレーションシップ) を作成します。

  1. Power BI Desktop のレポート ビューで、[モデリング] リボンの [計算] グループの中から、[新しいテーブル] を選択します。

    [モデリング] リボンの [新しいテーブル] 機能のスクリーンショット。

  2. 数式バー (計算の作成または編集時に、リボンのすぐ下に表示されます) に、「Salesperson =」と入力して Shift + Enter キーを押し、「'Salesperson (Performance)'」と入力して Enter キーを押します。

    数式バーに入力された式のスクリーンショット。

    利便性のために、このラボ内のすべての DAX 定義は D:\DA100\Labs\create-dax-calculations-in-power-bi-desktop\Assets\Snippets.txt ファイルからコピーできます。

    計算テーブルを作成するには、最初にテーブル名を入力し、続けて等号 (=) と、テーブルが返される DAX 式を入力します。 データ モデル内に既に存在しているテーブル名は使用できないことに注意してください。

    数式バーでは、有効な DAX 式の入力がサポートされています。 オートコンプリート、Intellisense、色分けなどの機能が用意されているため、すばやく正確に数式を入力できます。

    このテーブル定義では、Salesperson (Performance) テーブルのコピーが作成されます。 コピーされるのはデータのみで、表示や書式設定などのプロパティはコピーされません。

    ヒント

    数式が長く複雑になる場合は特に、"空白" (復帰やタブなど) を入力して、直感的かつ読みやすい形式で数式をレイアウトすることをお勧めします。 復帰を入力するには、Shift + Enter キーを押します。 空白は省略可能です。

  3. [フィールド] ペインで、テーブル アイコンが青色の網掛けになっていることがわかります (計算テーブルを示します)。

    青色の網掛けになっているテーブル アイコンのスクリーンショット。

    計算テーブルは、テーブルが返される DAX 式を使用して定義します。 計算テーブルでは、値が具体化されて格納されるため、データ モデルのサイズが大きくなることを理解しておくことが重要です。 数式の依存関係が更新されるたびに再計算されます。このデータ モデルで新しい (将来の) 日付値がテーブルに読み込まれるときも同様です。

    Power Query に由来するテーブルとは異なり、計算テーブルを使用して外部データ ソースからデータを読み込むことはできません。 既にデータ モデルに読み込まれている内容に基づいてのみ変換できます。

  4. モデル ビューに切り替えます。

  5. Salesperson テーブルを使用できることがわかります (表示されていない場合もあります。水平方向にスクロールして見つけてください)。

  6. Salesperson | EmployeeKey 列から Sales | EmployeeKey 列へのリレーションシップを作成します。

  7. Salesperson (Performance) テーブルと Sales テーブルの間の非アクティブなリレーションシップを右クリックし、[削除] を選択します。

    非アクティブなリレーションシップの [削除] ボタンのスクリーンショット。

  8. 削除するかどうかを確認するメッセージが表示されたら、[削除] を選択します。

  9. Salesperson テーブルで、次の列を複数選択し、非表示にします。

    • EmployeeID

    • EmployeeKey

    • UPN

  10. ダイアグラムで、Salesperson テーブルを選択します。

  11. [プロパティ] ペインの [説明] ボックスに「売上に関連する販売員」と入力します。

    ユーザーがテーブルまたはフィールドの上にカーソルを置くと、[フィールド] ペインにヒントとして説明が表示されます。

  12. Salesperson (Performance) テーブルに対しては、次の説明を設定します。「地域に関連する販売員」。

    これで、販売員を分析するときに、データ モデルによって 2 つの代替手段が提供されるようになりました。 Salesperson テーブルを使用すると、販売員による売上を分析できます。一方、Salesperson (Performance) テーブルでは、販売員に割り当てられた販売地域での売上を分析できます。

タスク 3: Date テーブルを作成する

このタスクでは、Date テーブルを作成します。

  1. データ ビューに切り替えます。

    データ ビューに切り替えるアイコンのスクリーンショット。

  2. [ホーム] リボン タブの [計算] グループの中から、[新しいテーブル] を選択します。

    [ホーム] リボンの [新しいテーブル] 機能のスクリーンショット。

  3. 数式バーに次のように入力して、Enter キーを押します。

    Date =  
    ‎CALENDARAUTO(6)
    

    数式バーに入力された式のスクリーンショット。

    CALENDARAUTO() 関数では、日付値で構成される単一列のテーブルが返されます。 "自動的な" 動作により、すべてのデータ モデルの日付列がスキャンされ、データ モデルに格納されている最も古い日付値と最も新しい日付値が決定されます。 次に、この範囲内の各日付に対して 1 つの行が作成されます。範囲をいずれかの方向に拡張して、1 年分のデータが格納されるようにします。

    この関数には、年度の最終月の数字である 1 つの省略可能な引数を指定できます。 省略した場合、その値は 12 になります。12 月が年度の最終月であるという意味です。 この場合は「6」が入力されています。6 月が年度の最終月であるという意味です。

  4. 日付値の列に注目してください。

    列が表示されない場合は、[フィールド] ペインで別のテーブルを選択してから、Date テーブルを選択します。

    [フィールド] ペインの Date テーブルのスクリーンショット。

    表示される日付は、米国の地域設定を使用して書式設定されています (mm/dd/yyyy)。

  5. 左下隅のステータス バーに、テーブルの統計情報が表示されているのがわかります。1826 行のデータが生成されていることを確認します。これは 5 年間全体のデータを表します。

    1826 行のデータが生成されたことを示すメッセージのスクリーンショット。

タスク 4: 計算列を作成する

このタスクでは、新しい列を追加して、さまざまな期間によるフィルター処理とグループ化を可能にします。 また、計算列を作成して、他の列の並べ替え順序の制御も行います。

  1. [テーブル ツール] コンテキスト リボンの [計算] グループ内から、[新しい列] を選択します。

    [テーブル ツール] リボンの [新しい列] 機能のスクリーンショット。

  2. 数式バーに次のように入力して、Enter キーを押します。

    Year =
    
    "FY" & YEAR('Date'[Date]) + IF(MONTH('Date'[Date]) > 6, 1)
    

    計算列を作成するには、最初に列名を入力し、続けて等号 (=) と、単一値の結果が返される DAX 式を入力します。 テーブル内に既に存在している列名は使用できません。

    この数式では日付の年の値が使用されますが、月が 6 月よりも後の場合は、年の値に 1 が加算されます。 Adventure Works の会計年度はこのように計算されます。

  3. 新しい列が追加されたことを確認します。

    追加された Year 列のスクリーンショット。

  4. スニペットのファイル定義を使用して、Date テーブルに対して次の 2 つの計算列を作成します。

    • Quarter
    • Month

    Quarter 列と Month 列のスクリーンショット。

  5. 計算を確認するために、レポート ビューに切り替えます。

  6. 新しいレポート ページを作成するために、左下にあるプラス アイコンを選択します。

    新しいレポート ページの作成ボタンのスクリーンショット。

  7. 新しいレポート ページに行列の視覚エフェクトを追加するには、[視覚化] ペインで、行列の視覚エフェクトの種類を選択します。

    ヒント

    各アイコンの上にカーソルを置くと、視覚エフェクトの種類について説明するヒントが表示されます。

    [新しい列] タブのアイコンのスクリーンショット。

  8. [フィールド] ペインで、[Date] テーブル内から [Year] フィールドを [行] にドラッグします。

    Year を行にドラッグするアクションを示すスクリーンショット。

  9. [Month] フィールドを、[行] の、[Year] フィールドのすぐ下にドラッグします。

    Year のすぐ下の行に表示された Month のスクリーンショット。

  10. 行列の視覚エフェクトに隣接している 2 つに分かれた矢印アイコンを選択します (すべての年が 1 レベル下に展開されます)。

    すべての年を 1 レベル下に展開する、2 つに分かれた矢印アイコンのスクリーンショット。

  11. 年が月に展開され、月が時系列順ではなくアルファベット順に並べ替えられていることがわかります。

    アルファベット順に並べ替えられた月のスクリーンショット。

    既定では、テキスト値はアルファベット順に、数値は昇順に、日付は最も古いものから最も新しいものの順に並べ替えられます。

  12. Month フィールドの並べ替え順序をカスタマイズするために、データ ビューに切り替えます。

  13. Date テーブルに MonthKey 列を追加します。

    MonthKey =
    
    (YEAR('Date'[Date]) * 100) + MONTH('Date'[Date])
    

    この数式により、年と月の各組み合わせに対する数値が計算されます。

  14. データ ビューで、新しい列に数値が含まれていることを確認します (例: 2017 年 7 月に対して 201707、など)。

    数値を含む MonthKey 列のスクリーンショット。

  15. もう一度レポート ビューに切り替えます。

  16. [フィールド] ペインで、[Month] フィールドが選択されていることを確認します (選択されている場合は、背景が濃い灰色になります)。

  17. [列ツール] コンテキスト リボンで、[並べ替え] グループ内から [列で並べ替え] を選択して、[MonthKey] を選択します。

    [列で並べ替え] で [MonthKey] を選択したスクリーンショット。

  18. 行列の視覚エフェクト内で、月が時系列順に並べ替えられるようになったことがわかります。

    時系列順に並べ替えられた月のスクリーンショット。

タスク 5: Date テーブルを完成させる

このタスクでは、1 つの列を非表示にし、階層を作成することで、Date テーブルのデザインを完成させます。 その後、Sales テーブルと Targets テーブルに対するリレーションシップを作成します。

  1. モデル ビューに切り替えます。

  2. Date テーブルで、MonthKey 列を非表示にします。

  3. Date テーブルで、次の 3 つのレベルを持つ Fiscal という名前の階層を作成します。

    • Year
    • Quarter
    • Month

    Year、Quarter、Month の各レベルがある Date テーブルのスクリーンショット。

  4. 次の 2 つのモデル リレーションシップを作成します。

    • Date | Date から Sales | OrderDate
    • Date | Date から Targets | TargetMonth
  5. 次の 2 つの列を非表示にします。

    • Sales | OrderDate
    • Targets | TargetMonth

タスク 6: Date テーブルをマークする

このタスクでは、Date テーブルを日付テーブルとしてマークします。

  1. レポート ビューに切り替えます。

  2. [フィールド] ペインで、Date テーブル (Date フィールドではありません) を選択します。

  3. [テーブル ツール] コンテキスト リボンの [カレンダー] グループ内から、[日付テーブルとしてマーク] を選択して、[日付テーブルとしてマーク] を選択します。

    [日付テーブルとしてマーク] オプションのスクリーンショット。

  4. [日付テーブルとしてマーク] ウィンドウの [日付列] ドロップダウン リストから、[日付] を選択します。

    [日付列] フィールドのスクリーンショット。

  5. [OK] を選択します。

  6. Power BI Desktop ファイルを保存します。

    これで、このテーブルによって日付 (タイム) が定義されていることが Power BI Desktop に認識されるようになりました。 これは、タイム インテリジェンスの計算に依存する場合に重要となります。 タイム インテリジェンス計算については、Power BI Desktop で DAX 計算を作成する (パート 2) のラボで扱います。

    注意

    日付テーブルに対するこのデザイン方法は、データ ソース内に日付テーブルがない場合に適しています。 データ ウェアハウスにアクセスできる場合は、データ モデルで日付ロジックを "再定義" するよりも、日付のディメンション テーブルから日付データを読み込むことをお勧めします。

演習 2:メジャーを作成する

この演習では、いくつかのメジャーを作成して書式設定します。

タスク 1:シンプルなメジャーを作成する

このタスクでは、シンプルなメジャーを作成します。 シンプルなメジャーでは、1 つの列またはテーブルが集計されます。

  1. レポート ビューの [ページ 2][フィールド] ペインで、Sales | Unit Price フィールドを行列の視覚エフェクトの [値] セクションにドラッグします。

    このラボでは、フィールドを参照するために簡略表記を使用します。 Sales | Unit Price のようになります。 この例では、Sales はテーブル名、Unit Price はフィールド名です。

    行列の視覚エフェクト上の [Unit Price] のスクリーンショット。

    Power BI Desktop でデータをモデル化する (パート 2) のラボで、[Average] によって要約する [Unit Price] 列を選択します。 行列の視覚エフェクトに表示される結果は、月単位の平均単価 (単価値の合計を単価の数で割ったもの) です。

  2. 視覚エフェクトのフィールド ペイン ([視覚化] ペインの下にあります) の [値] で、[Unit Price] が表示されていることがわかります。

    [値] ウェルに表示された [Unit Price] のスクリーンショット。

  3. [Unit Price] の下向き矢印を選択して、使用可能なメニュー オプションを確認します。

    [Unit Price] の使用可能なメニュー オプションのスクリーンショット。

    数値列が表示されるようにすると、レポートの作成者が、レポートのデザイン時に、列をどのように集計するか (またはしないか) を決定できるようになります。 これにより、不適切なレポートが生成される可能性があります。 ただし、一部のデータ モデル作成者は、ものごとを成り行き任せにすることを好みません。これらの列を非表示にして、代わりにメジャーで定義される集計ロジックを公開します。 このラボでも、この方法を採用します。

  4. メジャーを作成するには、[フィールド] ペインで Sales テーブルを右クリックして、[新しいメジャー] を選択します。

    Sales テーブルの [新しいメジャー] 機能のスクリーンショット。

  5. 数式バーに、次のメジャーの定義を追加します。

    Avg Price = AVERAGE(Sales[Unit Price])
    
  6. 行列の視覚エフェクトの [値] セクションに、Avg Price メジャーを追加します。

  7. Unit Price 列と同じ結果が生成されることがわかります (ただし、書式設定は異なります)。

  8. [値] で、[Avg Price] フィールドのコンテキスト メニューを開き、集計手法を変更できないことを確認します。

    [Average Price] フィールドのコンテキスト メニューのスクリーンショット。

  9. スニペットのファイル定義を使用して、Sales テーブルに対して次の 5 つのメジャーを作成します。

    • Median Price
    • Min Price
    • Max Price
    • Orders
    • Order Lines

    Orders メジャーで使用される DISTINCTCOUNT() 関数では、各注文が 1 回だけカウントされます (重複は無視されます)。 Order Lines メジャーで使用される COUNTROWS() 関数は、テーブルに対して動作します。

    この場合、注文数は、SalesOrderNumber 列の一意の値をカウントすることによって計算されますが、注文の行の数はテーブルの行の数になります (各行が 1 つの注文の 1 行になります)。

  10. モデル ビューに切り替えて、価格の 4 つのメジャーを複数選択します。Avg PriceMax PriceMedian Price、および Min Price です。

  11. 複数選択したメジャーに対して、次の要件を構成します。

    • 書式を小数点以下 2 桁に設定する
    • Pricing という名前の表示フォルダーに割り当てる

    Average Price、Maximum Price、Median Price、Minimum Price を含む Pricing フォルダーのスクリーンショット。

  12. Unit Price 列を非表示にします。

    これで、レポート作成者が Unit Price 列を使用できなくなりました。 お客様がモデルに追加したメジャーを使用する必要があります。 このデザイン方法では、レポート作成者が不適切に価格を集計することができなくなります (たとえば、それらを合計する)。

  13. Orders メジャーと Order Lines メジャーを複数選択して、次の要件を構成します。

    • 桁区切り記号を使用するように書式を設定する
    • Counts という名前の表示フォルダーに割り当てる

    Order lines と Orders を含む Counts フォルダーのスクリーンショット。

  14. レポート ビューで、行列の視覚エフェクトの [値] で、[Unit Price] フィールドの [X] を選択して削除します。

    Unit Price フィールドを削除する X のスクリーンショット。

  15. ページの幅と高さに合わせて、行列の視覚エフェクトのサイズを大きくします。

  16. 行列の視覚エフェクトに、次の 5 つの新しいメジャーを追加します。

    • Median Price
    • Min Price
    • Max Price
    • Orders
    • Order Lines
  17. 結果が適切に表示され、正しく書式設定されていることを確認します。

    正しく書式設定された結果のスクリーンショット。

タスク 2:追加のメジャーを作成する

このタスクでは、より複雑な式が使用される追加のメジャーを作成します。

  1. レポート ビューで、[ページ 1] を選択します。

    [ページ 1] レポート ビューのスクリーンショット。

  2. テーブルの視覚エフェクトを確認すると、Target 列の合計に気付きます。

    Total の Target 列の値のスクリーンショット。

    前のラボでは、販売員と地域の間に多対多のリレーションシップがあることを学習しました。 目標値を合計しても意味はありません。販売員の目標は、それぞれの販売員に対して、販売地域の割り当てに基づいて設定されるためです。 目標値は、1 人の販売員がフィルター処理されている場合にのみ表示する必要があります。 ここでは、まさにこれを行うメジャーを実装します。

  3. テーブルの視覚エフェクトを選択し、[視覚化] ペインで [Target] フィールドを削除します。

    Target フィールドを削除する X のスクリーンショット。

  4. Targets | Target 列の名前を、Targets | TargetAmount に変更します。

    ヒント

    レポート ビューで列の名前を変更するには、いくつかの方法があります。

    • [フィールド] ペインで、列を右クリックして [名前の変更] を選択します
    • 列をダブルクリックします
    • それを選択して F2 キーを押します

    Target という名前のメジャーを作成しようとしています。 同じテーブル内に、同じ名前を持つ列とメジャーを持つことはできません。

  5. Targets テーブルに対して、次のメジャーを作成します。

    Target =
    
    IF(
    
    HASONEVALUE('Salesperson (Performance)'[Salesperson]),
    
    SUM(Targets[TargetAmount])
    
    )
    

    HASONEVALUE() 関数によって、Salesperson 列内の単一の値がフィルター処理されているかどうかがテストされます。 true の場合は、式によって (その販売員のみの) 目標金額の合計が返されます。 false の場合は、空白が返されます。

  6. Target メジャーを、小数点以下 0 桁に書式設定します。

    ヒント

    [メジャー ツール] コンテキスト リボンを使用できます。

  7. TargetAmount 列を非表示にします。

    ヒント

    [フィールド] ペインで列を右クリックして [非表示] を選択することができます。

  8. テーブルの視覚エフェクトに Target メジャーを追加します。

  9. Target 列の合計が空白になっていることがわかります。

    Target の合計が空白の値になっているスクリーンショット。

  10. スニペットのファイル定義を使用して、Targets テーブルに対して次の 2 つのメジャーを作成します。

    • Variance
    • Variance Margin
  11. Variance メジャーを、小数点以下 0 桁に書式設定します。

  12. Variance Margin メジャーを、小数点以下 2 桁のパーセンテージとして書式設定します。

  13. テーブルの視覚エフェクトに、Variance メジャーと Variance Margin メジャーを追加します。

  14. テーブルの視覚エフェクトのサイズを変更して、すべての列と行が見えるようにします。

    すべての値が表示されるように幅が拡張されたテーブルのスクリーンショット。

    販売員が目標を達成していないように見えますが、テーブルの視覚エフェクトはまだ、特定の期間でフィルター処理されていないことを思い出してください。 Power BI Desktop でレポートをデザインする (パート 1) のラボでは、ユーザーが選択した期間でフィルター処理を行う販売実績レポートを生成します。

  15. [フィールド] ペインの右上隅で、ペインを折りたたんでから展開して、開きます。

    [フィールド] ペインを展開するアイコンのスクリーンショット。

    ペインを折りたたんで再び開くと、内容がリセットされます。

  16. 一覧の先頭に [Targets] テーブルが表示されるようになったことがわかります。

    一覧の先頭にある [Targets] テーブルのスクリーンショット。

    表示されるメジャーのみを含むテーブルは、自動的に一覧の先頭に表示されます。

仕上げ

このタスクでは、ラボを完了します。

  1. Power BI Desktop ファイルを保存します。

  2. 次のラボを開始する場合は、Power BI Desktop を開いたままにすることを選択できます。

    警告

    ラボを開いたままにしておくと、1 時間から 4 時間後にタイムアウトになります。 "現在" のモジュールのラボでの作業は失われますが、最初のラボの後の各ラボには、前のラボのすべての作業が完了した PBIX ファイルが含まれているので、最初からやり直す必要はありません。

Power BI Desktop で DAX 計算を作成する (パート 2) のラボでは、DAX を使用して、より高度な計算でデータ モデルを強化します。

ラボを終了する

このラボを終了するには、この指示ウィンドウの右下隅にある [完了] ボタンを選択します。