ExcelDAX-クイックガイド
DAXは Dアタ A分析Ex圧力。DAXは数式言語であり、数式または式で1つ以上の値を計算して返すために使用できる関数、演算子、および定数のコレクションです。DAXは、Excel PowerPivotのデータモデルに関連付けられている数式言語です。
これはプログラミング言語ではありませんが、ユーザーが計算列と計算フィールド(メジャーとも呼ばれます)でカスタム計算を定義できるようにする数式言語です。DAXは、データモデルにすでに存在するデータから新しい情報を作成するのに役立ちます。DAX式を使用すると、データモデリング、データ分析を実行し、その結果をレポートと意思決定に使用できます。
DAXには、Excelの数式で使用される関数の一部が含まれていますが、機能が変更され、リレーショナルデータを処理して動的な集計を実行するように設計された追加の関数が含まれています。
DAXの重要性
DAXの基盤は、ExcelのPowerPivotデータベースであるデータモデルです。データモデルは、さまざまなソースからのデータを組み合わせるために関係を定義できるテーブルで構成されます。データモデルへのデータ接続は、ソースデータが変更されたときに更新できます。データモデルは、Power Pivot xVelocityインメモリ分析エンジン(VertiPaq)を利用して、数千行のデータに対応するだけでなく、データ操作を可能な限り高速化します。データモデルの詳細については、チュートリアル– PowerPivotを参照してください。
DAXをデータモデルと組み合わせることで、Excelのいくつかのパワー機能(パワーピボット、パワーピボットテーブル、パワーピボットグラフ、パワービュー)が有効になります。DAXを使用して、いくつかの基本的な計算およびデータ分析の問題を解決できます。
DAXは、PowerBIで新しいPowerBIデスクトップファイルを作成し、そのファイルにデータをインポートする場合にも役立ちます。さらに、DAX数式は、製品カテゴリ全体およびさまざまな日付範囲の成長率の分析、市場動向や他の多くの傾向と比較した前年比の成長の計算などの機能を提供します。
効果的なDAX数式を作成する方法を学ぶことは、データを最大限に活用するのに役立ちます。必要な情報を入手したら、収益に影響を与える実際のビジネス上の問題の解決を開始できます。これはPowerBIのパワーであり、DAXはそこに到達するのに役立ちます。
このチュートリアルの前提条件
このチュートリアルは、ExcelのPower Pivotチュートリアルの拡張版であり、Power Pivot機能、データモデル、関係、Power PivotTables、Power Pivot Chartsなどについて学習しました。掘り下げる前に、このチュートリアルをブラッシュアップすることをお勧めします。このチュートリアルは、データモデルでデータを分析するための式を記述し、それらの結果を報告するDAX言語に関するものであるため、DAXに組み込まれます。
このチュートリアルでは、Excel関数に似ていますが、いくつかのバリエーションがあるDAX関数も紹介します。Excel関数とDAX関数の比較は、両方を区別するのに役立つように提供されています。同様に、Excelの数式とDAXの数式を比較し、類似点と相違点について説明します。これらの違いをよく理解すると、効果的なDAX式を効率的に作成するのに役立ちます。
DAXは完全にPowerPivotウィンドウのデータモデル用であるため、このチュートリアルではExcel関数とExcel式の知識は必要ありません。Excelワークシートにアクセスして、データモデルに基づくPower PivotTables、Power Pivot Charts、およびPowerViewビジュアライゼーションを表示するだけです。ただし、Excelの関数と数式について十分な知識を持っているExcelの専門家の場合は、前のセクションで説明した内容と、このチュートリアルのコースで説明した詳細をメモしておいてください。
計算列
計算列は、DAX式を使用してデータモデルのテーブルに追加できる列です。これらについてはExcelPower Pivotチュートリアルで既に学習しましたが、「計算列」の章で詳細に学習します。DAXはすべて計算列、計算フィールド、およびDAX関数に関するものです。
計算フィールド/メジャー
編集によってデータモデルのテーブルの値を変更することはできません。ただし、PowerPivotTablesで使用できるテーブルに計算フィールドを追加することはできます。計算フィールドは、名前を付け、DAX式を定義することによって定義されます。詳細については、「計算フィールド」の章を参照してください。
計算フィールドは、Excel 2013より前のバージョンのExcelではメジャーとして名前が付けられていました。Excel2016ではメジャーに名前が変更されています。このチュートリアルでは、計算フィールドと呼びます。ただし、用語(計算フィールドとメジャー)は同義語であり、すべての面で同じことを指していることに注意してください。
計算フィールドは、定義して保存した後で編集できます。定義で使用されているDAX式を変更するか、計算フィールドの名前を変更できます。これについては、「計算フィールドの編集」の章で学習します。計算フィールドを削除できます。「計算フィールドの削除」の章を参照してください。
DAXフォーミュラ
DAX式は、DAX言語の中心を形成します。DAX数式で定義することにより、計算フィールドと計算列を作成できます。データ分析操作用のDAX式を記述できます。DAX数式は、テーブル内の個々のセルまたはセルの範囲を参照するのではなく、データモデル内のテーブルと列を参照します。データモデルのテーブルの列には、同じデータ型が含まれている必要があります。
DAX数式には、テーブル、列、計算列、計算フィールド、DAX演算子、およびDAX関数が含まれています。詳細については、「DAX式」の章を参照してください。
DAX構文
他の言語であるDAXの場合と同様に、数式言語にも構文があります。DAX数式はDAX構文に従う必要があります。そうでない場合、設計時または実行時にエラーが発生するか、誤った結果が返されます。
この章では、次のことを学習します– DAX構文–
- テーブル、列のDAX命名要件
- DAX演算子
- DAXの特別な値
- DAXデータ型
- DAXの暗黙的なデータ型の変換
DAX演算子
DAXは数式言語であるため、数式の定義に演算子を使用します。DAXには次のタイプの演算子があります-
- DAX算術演算子
- DAX比較演算子
- DAXテキスト連結演算子
- DAX論理演算子
DAX演算子の優先順位も定義されており、Excel演算子の優先順位とは異なります。「DAX演算子」の章を参照してください。
DAX標準パラメーター
DAX関数の構文には、パラメーターに関する特定の要件があります。これは、DAX関数の引数がテーブル、列、計算フィールド、またはその他のDAX関数である可能性があるためです。「DAX標準パラメータ」の章を参照してください。
DAX関数
Excel 2013には、DAX数式で使用できる246個のDAX関数があります。これらの機能については、この章のカテゴリレベルで学習します–DAX Functions。-しかし、各DAX関数の構文、パラメータ、使用方法と戻り値の詳細については、あなたは上のチュートリアルを参照する必要がDAX機能。各DAX関数の説明に使用されるセクション名は、「DAX関数について」の章に記載されています。
DAX数式の記述にはDAX関数が必要であり、使用されるDAX関数の結果は使用されるコンテキストによって異なるため、データで使用するDAXを把握するには、これら2つのチュートリアルを行ったり来たりする必要があります。 DAXとPowerBIを使用したモデリング。
DAXの特殊機能
DAXには、DAXを強力にするいくつかの機能があります。これらのDAX関数は、DAXタイムインテリジェンス関数とDAXフィルター関数のカテゴリに分類され、特別な言及が必要です。DAXタイムインテリジェンス機能については、「DAXタイムインテリジェンスについて」の章で学習します。-あなたは章のDAXフィルター機能の使用方法について学習しますDAXフィルター機能。
DAX評価コンテキスト
DAX式の結果は、評価に使用されるコンテキストに基づいて異なる場合があります。DAXには、行コンテキストとフィルターコンテキストの2種類の評価コンテキストがあります。「DAX評価コンテキスト」の章を参照してください。
DAXフォーミュラ
DAXは数式言語であり、DAX数式を作成する際にそれを最大限に活用する必要があります。数式の構文とそれらを簡単かつ正確に作成する方法については、「DAX数式」の章を参照してください。
DAX数式の結果は、データが更新されるたび、およびDAX数式が再計算されるたびに変更されます。データの更新と再計算の違いを理解する必要があります。「DAX式の結果の更新」の章を参照してください。
データモデルのデータは予想され、随時変更される可能性があります。これは、データが任意の時点で最新のデータを必要とするデータ分析アクティビティに使用されるためです。データを更新するさまざまな方法を理解するには、「データモデルでのデータの更新」の章を参照してください。
-あなたは章でDAX数式の再計算の種類を理解して再計算DAX式。
DAX数式の再計算では、データの依存関係を考慮し、特定の順序に従う必要があります。そうしないと、エラーまたは誤った結果が得られる可能性があります。詳細については、「DAX式の再計算のトラブルシューティング」の章を参照してください。
一般的なDAX数式エラーのいくつかについて洞察を得て、それらのエラーを修正する方法を「DAX数式エラー」の章で学習します。
DAXシナリオ
新しい言語を学び始めた場合、その言語に精通するための最良の方法は、どこで何を使用するかを理解することです。同様に、DAXはデータ分析を目的とした数式言語であるため、DAXを使用できるさまざまなシナリオを理解する必要があります。
詳細については、次の章を参照してください。
- DAXシナリオ
- シナリオ-複雑な計算の実行
- シナリオ-テキストと日付の操作
- シナリオ-条件値とエラーのテスト
- シナリオ-タイムインテリジェンスの使用
- シナリオ-値のランク付けと比較
A calculated columnは、列の値を定義するDAX式を使用して、ブックのデータモデルの既存のテーブルに追加する列です。列の値をインポートする代わりに、計算列を作成します。
計算された列は、他のテーブル列と同じように、ピボットテーブル、ピボットグラフ、Power PivotTable、Power PivotChart、またはPowerViewレポートで使用できます。
計算列を理解する
計算列の作成に使用されるDAX数式は、Excelの数式に似ています。ただし、DAX数式では、テーブルの行ごとに異なる数式を作成することはできません。DAX式は、列全体に自動的に適用されます。
たとえば、1つの計算列を作成して、既存の列から年を抽出することができます–日付、DAX式–
= YEAR ([Date])
YEARはDAX関数であり、Dateはテーブルの既存の列です。ご覧のとおり、テーブル名は角かっこで囲まれています。これについては、「DAX構文」の章で詳しく説明します。
このDAX数式を使用してテーブルに列を追加すると、数式を作成するとすぐに列の値が計算されます。年の値で満たされたヘッダーCalculatedColumn1を持つ新しい列が作成されます。
列の値は、基になるデータが更新されるときなど、必要に応じて再計算されます。既存の列、計算フィールド(メジャー)、およびその他の計算列に基づいて計算列を作成できます。
計算列の作成
次のスクリーンショットに示すように、オリンピックの結果を含むデータモデルについて考えてみます。
- データビューをクリックします。
- [結果]タブをクリックします。
結果テーブルが表示されます。
上のスクリーンショットに見られるように、右端の列にはヘッダー– AddColumnがあります。
- リボンの[デザイン]タブをクリックします。
- [列]グループの[追加]をクリックします。
ポインタが数式バーに表示されます。つまり、DAX数式を使用して列を追加しているということです。
- 数式バーに= YEAR([日付])と入力します。
上のスクリーンショットに見られるように、ヘッダーのある右端の列– AddColumnが強調表示されています。
- Enterキーを押します。
計算が完了するまでにしばらく(数秒)かかります。お待ちください。
新しい計算列は、右端の[列の追加]の左側に挿入されます。
上のスクリーンショットに示されているように、新しく挿入された計算列が強調表示されます。列全体の値は、使用されているDAX式に従って表示されます。列ヘッダーはCalculatedColumn1です。
計算列の名前を変更する
計算列の名前を意味のある名前に変更するには、次のようにします。
- 列ヘッダーをダブルクリックします。列名が強調表示されます。
- 列名を選択します。
- Year(新しい名前)と入力します。
上のスクリーンショットに見られるように、計算された列の名前が変更されました。
列を右クリックし、ドロップダウンリストの[名前の変更]をクリックして、計算列の名前を変更することもできます。
新しい名前がテーブル内の既存の名前と競合しないことを確認してください。
計算列のデータ型の確認
計算列のデータ型は次のように確認できます-
- リボンの[ホーム]タブをクリックします。
- データ型をクリックします。
上のスクリーンショットでわかるように、ドロップダウンリストには列の可能なデータ型があります。この例では、デフォルトの(自動)データ型、つまり整数が選択されています。
計算列のエラー
次の理由により、計算列でエラーが発生する可能性があります-
テーブル間の関係を変更または削除します。これは、これらのテーブルの列を使用する数式が無効になるためです。
数式には、循環依存関係または自己参照依存関係が含まれています。
パフォーマンスの問題
オリンピックの結果の例で前述したように、結果テーブルには約35000行のデータがあります。したがって、DAX数式を使用して列を作成すると、列内の35000以上のすべての値が一度に計算され、少し時間がかかりました。データモデルとテーブルは、数百万行のデータを処理することを目的としています。したがって、DAX式に参照が多すぎると、パフォーマンスに影響を与える可能性があります。次のようにすることで、パフォーマンスの問題を回避できます。
DAX数式に多くの複雑な依存関係が含まれている場合は、一度に1つの大きな数式を作成するのではなく、段階的に作成して結果を新しい計算列に保存します。これにより、結果を検証し、パフォーマンスを評価できます。
データの変更が発生した場合、計算列を再計算する必要があります。再計算モードを手動に設定して、頻繁な再計算を節約できます。ただし、計算された列の値が正しくない場合は、データを更新して再計算するまで、列はグレー表示されます。
A calculated fieldデータモデルのテーブルには、DAX式によって取得されたフィールドがあります。Power Pivotの以前のバージョンでは、計算フィールドはメジャーと呼ばれていました。Excel 2013では、計算フィールドに名前が変更されました。ただし、Excel 2016で測定するように名前が変更されています。ドキュメントを参照すると、これら2つの用語が混同されていることがわかります。計算フィールドとメジャーという用語は同義語であることに注意してください。このチュートリアルでは、計算フィールドという用語を使用します。
計算フィールドを理解する
計算フィールドは、ピボットテーブル(またはピボットグラフ)で使用するために特別に作成された数式です。
COUNTやSUMなどの標準の集計関数に基づいて、または独自のDAX数式を定義することにより、計算フィールドを作成できます。
以下は、計算フィールドと計算列の違いです-
計算フィールドは、ピボットテーブルのVALUES領域でのみ使用できます。
計算結果を含む計算列は、ROWS、COLUMNS、およびFILTERS領域でも使用できます。
計算フィールドの保存
計算されたフィールドは、そのソーステーブルとともにデータモデルに保存されます。これは、PowerPivotTableまたはPowerPivotChartFieldsリストにテーブルのフィールドとして表示されます。
計算フィールドの使用
計算フィールドを使用するには、[Power PivotTableFields]リストからフィールドを選択する必要があります。計算フィールドがVALUES領域に追加され、計算フィールドに使用される数式が評価されます。行フィールドと列フィールドの組み合わせごとに結果が作成されます。
計算フィールド–例
オリンピックデータの次のデータモデルを検討してください-
上のスクリーンショットに示されているように、結果テーブルには、スポーツ-イベント-国-日付の組み合わせを含む各行の値-ゴールド、シルバー、またはブロンズを含むフィールドメダルがあります。国ごとのメダル数が必要な場合は、次のDAX式を使用して計算フィールドのメダル数を作成できます。
Medal Count := COUNTA([Medal])
テーブルに計算フィールドを作成する
結果テーブルに計算フィールドメダルカウントを作成するには、次のようにします。
結果テーブルのメダル列の下にある計算領域のセルをクリックします。セルが強調表示されます。
数式バーにMedalCount:= COUNTA([Medal])と入力します。
Enterキーを押します。
上のスクリーンショットに見られるように、計算フィールドが選択したセルに表示され、値が34,094と表示されます。この数は、結果テーブルの行の総数です。したがって、一見しただけではあまり意味がありません。前に説明したように、計算フィールドの実際の使用法は、PowerPivotTableまたはPowerPivotChartに追加することによってのみ確認できます。
パワーピボットテーブルでの計算フィールドの使用
計算フィールドを使用して各国のメダル数をカウントするには、次のようにします。
- [パワーピボット]ウィンドウのリボンの[ピボットテーブル]をクリックします。
- ドロップダウンリストでピボットテーブルをクリックします。
[ピボットテーブルの作成]ダイアログボックスが表示されます。
- 既存のワークシートをクリックします。
- ピボットテーブルを配置する場所を選択します。
空のピボットテーブルが作成されます。
- [ピボットテーブルフィールド]リストの[結果]テーブルをクリックします。
- [国]と[メダル数]のフィールドをクリックします。
ご覧のとおり、メダル数はVALUES領域に追加され、国はROWS領域に追加されます。ピボットテーブルは、フィールドCountryvaluesが行に表示された状態で作成されます。また、各行について、メダル数の値が計算されて表示されます。このようにして、計算フィールドは使用されたDAX数式を評価し、値を表示します。
- 結果テーブルからROWS領域にフィールドSportを追加します。
上のスクリーンショットでわかるように、メダル数は国ごとに計算されます-スポーツごとに、国自体の小計です。
これは、DAXがPower機能を補完する方法です。
計算フィールドの種類
計算フィールドには、暗黙的フィールドと明示的フィールドの2種類があります。
アン implicit calculated field Power PivotTableFieldsリストペインに作成されます。
アン explicit calculated field Power Pivotウィンドウのテーブル、またはExcelウィンドウのPowerPivotリボンから作成されます。
暗黙の計算フィールドの作成
暗黙的な計算フィールドは、[Power PivotTableFields]ペインの2つの方法で作成できます。
ピボットテーブルフィールドリストでの暗黙的な計算フィールドの作成
次のように、ピボットテーブルフィールドリストのメダルフィールドからメダルフィールドの数を作成できます。
- フィールドメダルカウントの選択を解除します。
- [メダル]フィールドを右クリックします。
- ドロップダウンリストの[値に追加]をクリックします。
メダルの数が[値]領域に表示されます。メダルの数の列がピボットテーブルに追加されます。
VALUES領域に暗黙の計算フィールドを作成する
暗黙の計算フィールド([値]領域の[親行の%])を作成して、その国が獲得した各スポーツのメダル数を、その国が獲得したメダルの総数のパーセンテージとして表すことができます。
- [値]領域の[メダル数]ボックスの下矢印をクリックします。
- ドロップダウンリストの[値フィールド設定]をクリックします。
[値フィールドの設定]ダイアログボックスが表示されます。
- [カスタム名]ボックスに「%メダル」と入力します。
- [値を名前を付けて表示]タブをクリックします。
- [値を表示]の下のボックスをクリックします。
- 親行の合計の%をクリックします。
- [数値フォーマット]ボタンをクリックします。
[セルの書式設定]ダイアログボックスが表示されます。
- [パーセンテージ]をクリックします。
- 小数点以下0桁で入力してください。
- [OK]をクリックします。
- [値フィールドの設定]ダイアログボックスで[OK]をクリックします。
- [小計を表示しない]を選択します。
別の暗黙の計算フィールド%メダルを作成しました。観察できるように、国ごとに、スポーツごとのメダルのパーセンテージが表示されます。
暗黙の計算フィールドの欠点
暗黙の計算フィールドは簡単に作成できます。実際、Excelのピボットテーブルやピボットグラフでも作成しています。ただし、次のような欠点があります。
They are volatile。つまり、計算フィールドに使用したフィールドの選択を解除すると、そのフィールドは削除されます。もう一度表示したい場合は、もう一度作成する必要があります。
Their scope is limitedそれらが作成されたピボットテーブルまたはピボットグラフに移動します。別のワークシートに別のピボットテーブルを作成する場合は、計算フィールドを再度作成する必要があります。
一方、明示的な計算フィールドはテーブルとともに保存され、そのテーブルを選択するたびに使用できるようになります。
明示的な計算フィールドの作成
明示的な計算フィールドは2つの方法で作成できます-
データモデルのテーブルの計算領域。これについては、「テーブルでの計算フィールドの作成」のセクションですでに学習しています。
ExcelテーブルのPowerPivotリボンから。次のセクションでは、明示的な計算フィールドを作成するこの方法を学習します。
PowerPivotリボンからの明示的な計算フィールドの作成
PowerPivotリボンから明示的な計算フィールドを作成するには、次のようにします。
- ブックのリボンの[POWERPIVOT]タブをクリックします。
- [計算]領域の[計算フィールド]をクリックします。
- ドロップダウンリストで[新しい計算フィールド]をクリックします。
[計算フィールド]ダイアログボックスが表示されます。
- 次のスクリーンショットに示すように、必要な情報を入力します。
- [数式を確認]ボタンをクリックします。
- 数式にエラーがない場合にのみ[OK]をクリックします。
ご覧のとおり、このダイアログボックスで計算フィールドのカテゴリと形式を定義できます。さらに、IntelliSense機能を使用して関数の使用法を理解し、オートコンプリート機能を使用して関数、テーブル、および列の名前を簡単に入力できます。IntelliSense機能の詳細については、「DAX式」の章を参照してください。
これは、明示的な計算フィールドを作成するための推奨される方法です。
計算フィールドを編集して変更できます。ただし、計算フィールドを編集する前に、それがどこに保存されているかを知っておく必要があります。つまり、計算されたフィールドがどのテーブルに格納されているかを意味します。これは、暗黙的および明示的な計算フィールドの両方に当てはまります。計算フィールドは、データモデル内の1つのテーブルにのみ関連付けることができます。
計算フィールドの検索
データモデルで計算フィールドを見つけるには、次のようにします。
- PowerPivotウィンドウのリボンの[詳細設定]タブをクリックします。
- [暗黙の計算フィールドを表示]をクリックします。
- ダイアグラムビューをクリックします。
上のスクリーンショットでわかるように、リボンで[暗黙の計算フィールドを表示]が強調表示されています。強調表示されていない場合は、もう一度クリックします。
また、列、計算フィールド、階層、およびKPIの4つのチェックボックスがあることも確認できます。デフォルトでは、4つすべてが選択されています。
- [列]、[階層]、[KPI]のチェックボックスをオフにします。
これにより、[計算フィールド]ボックスのみがオンのままになります。
上のスクリーンショットに見られるように、結果テーブルのみにフィールドが表示されています。他の2つのテーブルは空白です。これは、結果テーブルのみが計算フィールドを持っていることを示しています。また、暗黙の計算フィールドにはアイコンが
テーブル内の計算フィールドの表示
表の計算フィールドは次のように表示できます-
- 計算フィールドをクリックします。
- 右クリックして、ドロップダウンリストから[移動]を選択します。
テーブルがデータビューに表示されます。
上のスクリーンショットに見られるように、計算されたフィールドはテーブルの計算領域に表示されます。
テーブルの計算フィールドの変更
テーブルの計算フィールドに使用される式を変更できます。
- データモデルのデータビューで、テーブルの計算フィールドをクリックします。
- 数式バーで数式を選択します–:=の右側にあります。
数式が強調表示されます。
- 新しい数式を入力します。
- Enterキーを押します。
DAXの式については、次の章で詳しく説明します。
データモデルの計算フィールドの名前を変更する
データビューまたはダイアグラムビューのいずれかで、データテーブルの計算フィールドの名前を変更できます。
データビューの計算フィールドの名前を変更する
- データモデルのデータビューで、テーブルの計算フィールドをクリックします。
- 数式バーで計算されたフィールド名を選択します–:=の左側にあります。
計算されたフィールド名が強調表示されます。
- 計算フィールドの新しい名前を入力します。
- Enterキーを押します。
DAX構文の詳細については、以降の章で学習します。
ダイアグラムビューで計算フィールドの名前を変更する
- ダイアグラムビューのテーブルで計算フィールド名を右クリックします。
- ドロップダウンリストで[名前の変更]をクリックします。
名前が編集モードになります。計算フィールドの新しい名前を入力します。
Excelウィンドウでの計算フィールドの表示
次のように、Excelウィンドウで計算フィールドを表示できます-
- リボンの[POWERPIVOT]タブをクリックします。
- [計算]グループの[計算フィールド]をクリックします。
- ドロップダウンリストで[計算フィールドの管理]をクリックします。
[計算フィールドの管理]ダイアログボックスが表示されます。データモデルの明示的な計算フィールドの名前がダイアログボックスに表示されます。
計算フィールドの管理で計算フィールドを変更する
[計算フィールドの管理]ダイアログボックスで計算フィールドを変更できます。
- メダル数をクリックします。
- [編集]ボタンをクリックします。
[計算フィールド]ダイアログボックスが表示されます。
- 数式ボックスで=の右側にある数式を選択します。
- 新しい数式を入力します。
- [OK]をクリックします。
- [計算フィールドの管理]ダイアログボックスで[閉じる]をクリックします。
計算フィールドの管理で計算フィールドの名前を変更する
[計算フィールドの管理]ダイアログボックスで、計算フィールドの名前を変更できます。
- メダル数をクリックします。
- [編集]ボタンをクリックします。
[計算フィールド]ダイアログボックスが表示されます。
- [計算フィールド名]ボックスで名前を選択します。
- 計算フィールドの新しい名前を入力します。
- [OK]をクリックします。
- [計算フィールドの管理]ダイアログボックスで[閉じる]をクリックします。
データモデル内の計算フィールドの移動
計算フィールドは、それが作成されたテーブルの計算領域内で移動できます。ただし、別のテーブルに移動することはできません。
- 計算フィールドを右クリックします。
- [切り取り]をクリックします。
- 同じテーブルの計算領域内の別の場所にポインタを移動します。
- [貼り付け]をクリックします。
Note −計算フィールドのDAX式のデータ参照は列名によるものであり、明示的に記述されているため、計算フィールドがテーブルの計算領域内のどこにあるかは実際には問題ではありません。
明示的および暗黙的な計算フィールドの両方を削除できます。これを行うにはいくつかの方法があり、この章で学習します。
ただし、計算フィールドを削除する前に、次の点を覚えておく必要があります-
明示的な計算フィールドは、複数のピボットテーブルやピボットグラフで使用できます。したがって、明示的な計算フィールドを削除しても、すでに生成したレポートに影響がないことを確認する必要があります。
明示的な計算フィールドは、他の明示的な計算フィールドの計算に使用できます。したがって、明示的な計算フィールドが他の明示的な計算フィールドの計算で使用されていないことを確認する必要があります。
暗黙の計算フィールドは、それが使用されるピボットテーブルまたはピボットグラフに制限されます。したがって、暗黙の計算フィールドを削除する前に、対応するピボットテーブルまたはピボットグラフから削除できることを確認するだけで十分です。
暗黙的な計算フィールドの作成は、明示的な計算フィールドの作成よりも簡単です。したがって、明示的な計算フィールドを削除する前に、さらに注意が必要です。
名前が暗黙の計算フィールドの名前と競合する場合、明示的な計算フィールドを作成することはできません。したがって、明示的な計算フィールドを作成する前に、その暗黙的な計算フィールドを削除する必要がある場合があります。
データモデルの明示的な計算フィールドの削除
データビューまたはデータモデルのダイアグラムビューのいずれかで、明示的な計算フィールドを削除できます。
データビューでの明示的な計算フィールドの削除
- データビューの計算領域で計算フィールドを見つけます。
- 計算フィールドを右クリックします。
- ドロップダウンリストで[削除]をクリックします。
削除確認のメッセージが表示されます。
[モデルから削除]をクリックします。明示的な計算フィールドは削除されます。
ダイアグラムビューでの明示的な計算フィールドの削除
- ダイアグラムビューのデータテーブルで計算フィールドを見つけます。
- 計算されたフィールド名を右クリックします。
- ドロップダウンリストで[削除]をクリックします。
削除確認のメッセージが表示されます。
[モデルから削除]をクリックします。明示的に計算されたフィールドは削除され、データテーブルのフィールドリストには表示されません。
Excelウィンドウで明示的な計算フィールドを削除する
次のように、Excelウィンドウから明示的な計算フィールドを削除できます。
- リボンの[POWERPIVOT]タブをクリックします。
- [計算]グループの[計算フィールド]をクリックします。
- ドロップダウンリストで[計算フィールドの管理]をクリックします。
[計算フィールドの管理]ダイアログボックスが表示されます。
- 明示的に計算されたフィールド名をクリックします。
- [削除]ボタンをクリックします。
削除の確認メッセージが表示されます。
- [はい]をクリックします。データモデルが変更されたという情報メッセージが上部に表示されます。
- ダイアログボックスの[閉じる]ボタンをクリックします。
明示的に計算されたフィールドは削除され、ブックの[ピボットテーブル/ピボットグラフフィールド]リストには表示されません。
暗黙の計算フィールドの削除
データビューまたはデータモデルのダイアグラムビューのいずれかで、暗黙の計算フィールドを削除できます。
データビューの暗黙の計算フィールドの削除
- データビューの計算領域で計算フィールドを見つけます。
- 計算フィールドを右クリックします。
- ドロップダウンリストで[削除]をクリックします。
削除確認のメッセージが表示されます。
- [モデルから削除]をクリックします。暗黙の計算フィールドは削除されます。
ダイアグラムビューでの暗黙の計算フィールドの削除
- ダイアグラムビューのデータテーブルで計算フィールドを見つけます。
- 計算されたフィールド名を右クリックします。
- ドロップダウンリストで[削除]をクリックします。
削除確認のメッセージが表示されます。
[モデルから削除]をクリックします。暗黙の計算フィールドは削除され、データテーブルのフィールドリストには表示されません。
前述のように、DAXは、演算子、値、関数、および数式で構成される数式言語です。この章では、DAX構文について学習します。
DAX Syntax 次のように分類できます-
- DAX式の構文
- DAXの命名要件
- DAXの特別な価値
- DAX関数
- DAX演算子
- DAXデータ型
DAX構文の学習に進む前に、Excelの数式とDAXの数式の違いを理解する必要があります。
Excelの数式とDAXの数式の違い
DAX数式はExcelの数式に似ており、数式バーに入力できます。ただし、2つの間にいくつかの重要な違いがあります。
Excelの数式 | DAXフォーミュラ |
---|---|
Excelの数式は、Excelウィンドウの数式バーに入力されます。 |
DAX数式は、PowerPivotウィンドウの数式バーに入力されます。 |
Excelの数式では、データの個々のセルまたは配列を参照できます。 |
DAX式では、完全なテーブルまたはデータの列のみを参照できます。つまり、参照はテーブルとテーブル内のフィールドのみを参照できます。 ただし、列データの一部に対してのみ計算を実行する必要がある場合は、計算に必要な一意のデータ値をフィルタリングして提供するDAX関数を使用して実行できます。 |
Excelの数式は、特定のデータ型をサポートしています。 |
DAXは、Excelよりも多くのデータ型を提供します。したがって、DAX式は追加のデータ型も使用できます。 |
Excelは、暗黙的なデータ変換をサポートしていません。 |
DAXは、計算中に暗黙的なデータ型変換を実行します。 |
DAXは、1つ以上の値を計算して返すために、数式または式で使用できる関数、演算子、および値で構成される数式言語です。
使用できます DAX operators値を比較し、算術計算を実行し、文字列を連結します。この章では、DAX演算子とその使用方法について学習します。
DAX演算子の種類
DAXは次のタイプの演算子をサポートします-
- DAX算術演算子
- DAX比較演算子
- DAXテキスト連結演算子
- DAX論理演算子
DAX演算子の優先順位
複数の値または式を組み合わせた多くのDAX演算子を含むDAX数式を作成できます。このような場合、最終的な結果は、操作が実行される順序によって異なります。DAXは、デフォルトの演算子の優先順位と、デフォルトの優先順位をオーバーライドする方法を提供します。
DAXのデフォルトの演算子の優先順位を次の表に示します。
優先順位 | オペレーター | 操作 |
---|---|---|
1 | ^ | べき乗 |
2 | – | 符号 |
3 | *および/ | 乗算と除算 |
4 | ! | ない |
5 | +および– | 足し算と引き算 |
6 | & | 連結 |
7 | =、<、>、<=、> =および<> | 等しい、より小さい、より大きい、以下、以上、等しくない |
DAX式の構文
最初に、DAX式の構文と、オペランドと演算子を使用して式の評価がどのように行われるかを理解する必要があります。
すべての式は常に等号(=)で始まります。等号は、後続の文字が式を構成することを示します。
等号の右側には、DAX演算子によって接続されたオペランドがあります。たとえば、= 5 + 4> 5です。
= 5 * 6-3。
式は常に左から右に読み取られ、計算は前のセクションで示したDAX演算子の優先順位に基づいてその順序で実行されます。
DAX演算子の優先順位の値が等しい場合、それらは左から右に評価されます。たとえば、= 5 * 6/10です。*と/の両方の前例の順序は同じです。したがって、式は30/10 = 3として評価されます。
式のDAX演算子の優先順位の値が異なる場合、それらは左から右の優先順位で評価されます。
= 5 + 4> 7。デフォルトの優先順位は+ firstおよび> nextです。したがって、式は左から右に計算されます。-5 + 4が最初に計算されて9になり、次に9> 5が評価されてTRUEになります。
= 5 * 6-3。デフォルトの優先順位は* firstと--nextです。したがって、式は左から右に計算されます。-5 * 6が最初に計算されて30になり、次に30-3が計算されて27になります。
= 2 * 5-6 * 3.デフォルトの優先順位は、*最初、*次、次に-です。したがって、式は10 – 18と評価され、次に-8と評価されます。10-6ではないことに注意してください。結果は4になり、4 * 3は12になります。
括弧を使用したDAX計算順序の制御
括弧を使用し、オペランドと演算子をグループ化して計算シーケンスを制御することにより、DAXのデフォルトの演算子の優先順位を変更できます。
たとえば、= 5 * 6-3は、DAXのデフォルトの演算子の優先順位で27と評価されます。括弧を使用してオペランドと演算子を= 5 *(6-3)としてグループ化すると、最初に6-3が計算されて3になり、次に5 * 3が計算されて15になります。
= 2 * 5-6 * 3は、DAXのデフォルトの演算子の優先順位で-8と評価されます。括弧を使用してオペランドと演算子を= 2 *(5-6)* 3としてグループ化すると、最初に5-6が計算されて-1になり、次に2 *(-1)* 3が計算されて-6になります。 。
ご覧のとおり、同じオペランドと演算子を使用すると、それらをグループ化する方法によって異なる結果が生じる可能性があります。したがって、DAX数式でDAX演算子を使用する場合は、計算シーケンスがどのようになるかに注意する必要があります。
ExcelとDAXの違い
DAXはExcelの数式と類似していますが、2つの間に特定の重要な違いがあります。
DAXは、基盤となるメモリ常駐計算エンジンがあるため、Excelよりも強力です。
DAXはExcelよりも多くのデータ型をサポートしています。
DAXは、日付と時刻のタイプのより豊富なサポートを含む、リレーショナルデータベースであるデータモデルの追加の高度な機能を提供します。
場合によっては、DAXの計算結果や関数の動作がExcelの場合と同じにならないことがあります。これは、以下の違いによるものです。
- データ型キャスト
- データ型
データ型キャストの違い
DAXでは、式= value1の演算子value2がある場合、2つのオペランドvalue1とvalue2は同じデータ型である必要があります。データ型が異なる場合、DAXは最初にそれらを共通のデータ型に暗黙的に変換します。詳細については、「DAX構文」の章を参照してください。
たとえば、異なるデータ型の2つのオペランドを比較する必要があります。たとえば、= [Amount] * 0.08などの数式から得られる数値と整数です。最初の数値は小数点以下の桁数が多い10進数にすることができますが、2番目の数値は整数です。次に、DAXはそれを次のように処理します-
まず、DAXは、両方の種類の数値を格納できる最大の数値形式を使用して、両方のオペランドを実数に変換します。
次に、DAXは2つの実数を比較します。
対照的に、Excelは、最初に共通のデータ型に強制せずに、異なるデータ型の値を比較しようとします。このため、同じ比較式に対して、DAXとExcelで異なる結果が見つかる場合があります。
データタイプの違い
DAXとExcelの演算子の優先順位は同じです。ただし、Excelがサポートする演算子のパーセント(%)とデータ範囲は、DAXではサポートされていません。さらに、DAXはデータ型としてテーブルをサポートしていますが、Excelではサポートされていません。
さらに、Excelの数式では、単一のセル、配列、またはセルの範囲を参照できます。DAX式では、これらのいずれも参照できません。データへのDAX数式参照は、テーブル、列、計算フィールド、および計算列である必要があります。
Excelから数式をコピーしてDAXに貼り付ける場合は、DAX構文がExcel数式構文とは異なるため、DAX数式が正しいことを確認してください。また、DAXとExcelで関数の名前が同じであっても、そのパラメーターが異なる場合があり、関数の結果も異なる場合があります。
これらすべてについては、次の章で詳しく説明します。
ExcelDAX-標準パラメータ
DAXは standard parameterDAX関数の使用法と理解を容易にするための名前。さらに、パラメータ名に特定のプレフィックスを使用できます。プレフィックスが十分に明確である場合は、プレフィックス自体をパラメータ名として使用できます。
標準パラメータ名
以下はDAX標準パラメータ名です-
シニア番号 | パラメータ名と説明 |
---|---|
1 | expression 単一のスカラー値を返すDAX式。式は、(行/コンテキストごとに)複数回評価されます。 |
2 | value 単一のスカラー値を返すDAX式で、式は他のすべての操作の前に1回だけ評価されます。 |
3 | table データのテーブルを返すDAX式。 |
4 | tableName 標準のDAX構文を使用した既存のテーブルの名前。式にすることはできません。 |
5 | columnName 標準のDAX構文を使用する既存の列の名前。通常は完全修飾されています。式にすることはできません。 |
6 | name 新しいオブジェクトの名前を提供するために使用される文字列定数。 |
7 | order ソート順を決定するために使用される列挙。 |
8 | ties タイ値の処理を決定するために使用される列挙。 |
9 | type PathItemおよびPathItemReverseのデータ型を決定するために使用される列挙。 |
パラメータ名のプレフィックス
パラメータ名は接頭辞-で修飾できます
プレフィックスは、引数の使用方法を説明するものでなければなりません。
プレフィックスは、パラメータのあいまいな読み取りが回避されるような方法である必要があります。
例えば、
Result_ColumnName − DAX LOOKUPVALUE()関数で結果値を取得するために使用される既存の列を参照します。
Search_ColumnName − DAX LOOKUPVALUE()関数で値を検索するために使用される既存の列を参照します。
プレフィックスのみをパラメータとして使用
プレフィックスがパラメータを説明するのに十分明確である場合は、パラメータ名を省略してプレフィックスのみを使用できます。パラメータ名を省略し、プレフィックスのみを使用すると、読み取りが煩雑になるのを防ぐのに役立つ場合があります。
たとえば、DATE(Year_value、Month_value、Day_value)について考えてみます。3回繰り返されるパラメーター名–値を省略して、DATE(年、月、日)と書くことができます。ご覧のとおり、プレフィックスのみを使用すると、関数が読みやすくなります。
ただし、わかりやすくするために、パラメーター名とプレフィックスを指定する必要がある場合があります。
たとえば、Year_columnNameについて考えてみます。パラメータ名はColumnNameで、プレフィックスはYearです。パラメータには既存の年の列への参照が必要であることをユーザーに理解させるには、両方が必要です。
ExcelDAX-関数
ほとんど DAX functionsExcel関数と同じ名前と機能を持っています。ただし、DAX関数は、DAXデータ型を使用し、テーブルと列を操作するように変更されています。
DAXには、Excelにはない追加機能がいくつかあります。これらのDAX関数は、データモデルのリレーショナルデータベースの側面に関連付けられた関係に基づくルックアップ、再帰計算を実行するためにテーブルを反復処理する機能、動的集計を実行する機能、タイムインテリジェンスを利用した計算などの特定の目的で提供されます。
この章では、DAX言語でサポートされている関数について学習します。これらのDAX関数の使用法の詳細については、このチュートリアルライブラリのチュートリアル–DAX関数を参照してください。
DAX関数とは何ですか?
DAX関数は、DAX言語で提供される組み込み関数であり、データモデルのテーブル内のデータに対してさまざまなアクションを実行できるようにします。前に説明したように、DAXは、データ分析およびビジネスインテリジェンスの目的で使用され、データから洞察を抽出、同化、および導出するためのサポートが必要です。データモデルに基づくDAX関数は、DAX言語とDAX関数の使用法を理解すると、作業を簡単にするこれらのユーティリティを提供します。
Excel関数とDAX関数
知っているExcel関数とDAX関数の間には特定の類似点があります。ただし、特定の違いもあります。DAX関数の使用法や、DAX関数を含むDAX数式の記述を間違えないように、これらを明確にする必要があります。
Excel関数とDAX関数の類似点
多くのDAX関数は、Excel関数と同じ名前と同じ一般的な動作を持っています。
DAXには、Excelの配列およびベクトルルックアップ関数と同様のルックアップ関数があります。
Excel関数とDAX関数の違い
DAX関数は、さまざまなタイプの入力を受け取るように変更されており、一部のDAX関数は異なるデータ型を返す場合があります。したがって、これらの関数は同じ名前ですが、これらの関数の使用法を個別に理解する必要があります。このチュートリアルでは、Excel関数との混同を避けるために、接頭辞DAXが付いたすべてのDAX関数を見つけます。
必要な変更を加えずに、Excel数式でDAX関数を使用したり、DAXでExcel数式/関数を使用したりすることはできません。
Excel関数は、セル参照またはセルの範囲を参照として受け取ります。DAX関数は、セル参照またはセル範囲を参照として受け取ることはなく、代わりに列またはテーブルを参照として受け取ります。
Excelの日付と時刻の関数は、日付をシリアル番号として表す整数を返します。DAXの日付と時刻の関数は、DAXにはあるが、Excelにはない日時データ型を返します。
Excelにはテーブルを返す関数はありませんが、一部の関数は配列で機能します。DAX関数の多くは、完全なテーブルと列を簡単に参照して計算を実行し、テーブルまたは値の列を返すことができます。DAXのこの機能により、DAXが使用されるPower Pivot、Power View、およびPowerBIに電力が追加されます。
DAXルックアップ関数では、テーブル間に関係が確立されている必要があります。
Excelは、データの列でバリアントデータ型をサポートします。つまり、列にさまざまなデータ型のデータを含めることができます。一方、DAXは、テーブルの列のデータが常に同じデータ型であることを想定しています。データが同じデータ型でない場合、DAXは列全体を、列のすべての値に最適なデータ型に変更します。ただし、データがインポートされてこの問題が発生した場合、DAXはエラーにフラグを立てることができます。
DAXデータ型とデータ型キャストについては、「DAX構文リファレンス」の章を参照してください。
DAX関数の種類
DAXは以下のタイプの機能をサポートします。
- DAXテーブル値関数
- DAXフィルター機能
- DAX集計関数
- DAXタイムインテリジェンス機能
- DAXの日付と時刻の関数
- DAX情報関数
- DAX論理関数
- DAX数学および三角関数
- DAXその他の機能
- DAXの親関数と子関数
- DAX統計関数
- DAXテキスト関数
このセクションでは、関数カテゴリレベルでDAX関数について学習します。DAX関数の構文と、DAX関数が返し、実行する内容の詳細については、このチュートリアルライブラリのDAX関数のチュートリアルを参照してください。
DAXタイムインテリジェンス機能とDAXフィルター機能は強力であり、特別な言及が必要です。詳細については、「DAXタイムインテリジェンスとDAXフィルター機能について」の章を参照してください。
DAXテーブル値関数
多くのDAX関数は、テーブルを入力テーブルまたは出力テーブル、あるいはその両方として受け取ります。これらのDAX関数は、DAXテーブル値関数と呼ばれます。テーブルは単一の列を持つことができるため、DAXテーブル値関数も入力として単一の列を取ります。次のタイプのDAXテーブル値関数があります-
- DAX集計関数
- DAXフィルター機能
- DAXタイムインテリジェンス機能
DAXテーブル値関数を理解すると、DAX式を効果的に作成するのに役立ちます。
DAX集計関数
DAX集計関数は、テーブルの行全体の式を集計し、計算に役立ちます。
以下は、いくつかのDAX集計関数です-
ADDCOLUMNS(<テーブル>、<名前>、<式>、[<名前>、<式>]…)
平均(<列>)
AVERAGEA(<列>)
AVERAGEX(<テーブル>、<式>)
COUNT(<列>)
COUNTA(<列>)
COUNTAX(<テーブル>、<式>)
COUNTBLANK(<列>)
COUNTROWS(<テーブル>)
COUNTX(<テーブル>、<式>)
CROSSJOIN(<table1>、<table2>、[<table3>]…)
DISTINCTCOUNT(<列>)
GENERATE(<table1>、<table2>)
GENERATEALL(<table1>、<table2>)
MAX(<列>)
MAXA(<列>)
MAXX(<テーブル>、<式>)
MIN(<列>)
MINA(<列>)
MINX(<テーブル>、<式>)
PRODUCT(<column>)
PRODUCTX(<テーブル>、<式>)
ROW(<名前>、<式>、[<名前>、<式>]…)
SELECTCOLUMNS(<テーブル>、<名前>、<スカラー式>、
[<name>、<scalar_expression>]…)
SUM(<列>)
SUMMARIZE(<table>、<groupBy_columnName>、[<groupBy_columnName>]…、[<name>、<expression>]…)
SUMX(<テーブル>、<式>)
TOPN(<n_value>、<table>、<orderBy_expression>、[<order>]、[<orderBy_expression>、[<order>]]…)
DAXフィルター機能
DAXフィルター関数は、現在の行に関連する列、テーブル、または値を返します。DAXフィルター関数を使用して、特定のデータ型を返し、関連するテーブルで値を検索し、関連する値でフィルター処理できます。DAXルックアップ関数は、テーブルとそれらの間の関係を使用して機能します。DAXフィルター関数を使用すると、データコンテキストを操作して、動的な計算を作成できます。
以下はいくつかのDAXフィルター機能です-
ADDMISSINGITEMS(<showAllColumn>、[<showAllColumn>]…、<table>、<groupingColumn>、[<groupingColumn>]…[filterTable]…)
ALL({<テーブル> | <列>、[<列>]、[<列>]…})
ALLEXCEPT(<テーブル>、<列>、[<列>]…)
ALLNOBLANKROW(<table>|<column>)
ALLSELECTED([<tableName> | <columnName>])
CALCULATE(<式>、<フィルター1>、<フィルター2>…)
CALCULATETABLE(<式>、<フィルター1>、<フィルター2>…)
CROSSFILTER(<columnName1>、<columnName2>、<direction>)
DISTINCT(<列>)
EARLIER(<列>、<数値>)
EARLIEST(<column>)
FILTER(<table>,<filter>)
FILTERS(<columnName>)
HASONEFILTER(<columnName>)
HASONEVALUE(<columnName>)
ISCROSSFILTERED(<columnName>)
ISFILTERED(<columnName>)
KEEPFILTERS(<式>)
RELATED(<column>)
RELATEDTABLE(<tableName>)
SUBSTITUTEWITHINDEX(<table>、<indexColumnName>、<indexColumnsTable>、<orderBy_expression>、[<order>]、[<orderBy_expression>、[<order>]]…])
USERELATIONSHIP(<columnName1>,<columnName2>)
VALUES(<TableNameOrColumnName>)
DAX Time Intelligence Functions
DAX Time Intelligence functions return a table of dates or use a table of dates to calculate an aggregation. These DAX functions help you create calculations that support the needs of Business Intelligence analysis by enabling you to manipulate data using time periods, including days, months, quarters and years.
Following are some DAX Time Intelligence functions −
CLOSINGBALANCEMONTH (<expression>,<dates>[,<filter>])
CLOSINGBALANCEQUARTER (<expression>,<dates>, [<filter>])
CLOSINGBALANCEYEAR (<expression>,<dates>, [<filter>], [<year_end_date>])
DATEADD (<dates>,<number_of_intervals>, <interval>)
DATESBETWEEN (<dates>,<start_date>,<end_date>)
DATESINPERIOD (<dates>,<start_date>, <number_of_intervals>,<interval>)
DATESMTD (<dates>)
DATESQTD (<dates>)
DATESYTD (<dates>, [<year_end_date>])
ENDOFMONTH (<dates>)
ENDOFQUARTER (<dates>)
ENDOFYEAR (<dates> , [<year_end_date>])
FIRSTDATE (<dates>)
FIRSTNONBLANK (<column>,<expression>)
LASTDATE (<dates>)
LASTNONBLANK (<column>,<expression>)
NEXTDAY (<dates>)
NEXTMONTH (<dates>)
NEXTQUARTER (<dates>)
NEXTYEAR (<dates>, [<year_end_date>])
OPENINGBALANCEMONTH (<expression>,<dates>, [<filter>])
OPENINGBALANCEQUARTER (<expression>,<dates>, [<filter>])
OPENINGBALANCEYEAR (<expression>,<dates>, [<filter>], [<year_end_date>])
PARALLELPERIOD (<dates>,<number_of_intervals>, <interval>)
PREVIOUSDAY(<dates>)
PREVIOUSMONTH(<dates>)
PREVIOUSQUARTER(<dates>)
PREVIOUSYEAR (<dates>, [<year_end_date>])
SAMEPERIODLASTYEAR(<dates>)
STARTOFMONTH(<dates>)
STARTOFQUARTER(<dates>)
STARTOFYEAR(<dates>)
TOTALMTD (<expression>,<dates>, [<filter>])
TOTALQTD(<expression>,<dates>, [<filter>])
TOTALYTD(<expression>,<dates>, [<filter>], [<year_end_date>])
DAX Date and Time Functions
DAX Date and Time functions are similar to the Excel date and time functions. However, DAX Date and Time functions are based on the datetime data type of DAX.
Following are DAX Date and Time functions −
- DATE(<year>, <month>, <day>)
- DATEVALUE(date_text)
- DAY(<date>)
- EDATE(<start_date>, <months>)
- EOMONTH(<start_date>, <months>)
- HOUR(<datetime>)
- MINUTE(<datetime>)
- MONTH(<datetime>)
- NOW()
- SECOND(<time>)
- TIME(hour, minute, second)
- TIMEVALUE(time_text)
- TODAY()
- WEEKDAY(<date>, <return_type>)
- WEEKNUM(<date>, <return_type>)
- YEAR(<date>)
- YEARFRAC(<start_date>, <end_date>, <basis>)
DAX Information Functions
DAX Information functions look at the cell or row that is provided as an argument and tell you whether the value matches the expected type.
Following are some DAX Information functions −
CONTAINS (<table>, <columnName>, <value>, [<columnName>, <value>]…)
CUSTOMDATA()
ISBLANK(<value>)
ISERROR(<value>)
ISEVEN(number)
ISLOGICAL(<value>)
ISNONTEXT(<value>)
ISNUMBER(<value>)
ISONORAFTER (<scalar_expression>, <scalar_expression>, [sort_order], [<scalar_expression>, <scalar_expression>, [sort_order]]…)
ISTEXT(<value>)
LOOKUPVALUE (<result_columnName>, <search_columnName>, <search_value>, [<search_columnName>, <search_value>]…)
USERNAME()
DAX Logical Functions
DAX Logical Functions return information about values in an expression. For example, DAX TRUE function lets you know whether an expression that you are evaluating returns a TRUE value.
Following are DAX Logical functions −
- AND(<logical1>,<logical2>)
- FALSE()
- IF(logical_test>,<value_if_true>, value_if_false)
- IFERROR(value, value_if_error)
- NOT(<logical>)
- OR(<logical1>,<logical2>)
- SWITCH(<expression>, <value>, <result>, [<value>, <result>]…, [<else>])
- TRUE()
DAX Math and Trig Functions
DAX Mathematical and Trigonometric functions are very similar to the Excel mathematical and trigonometric functions.
Following are some DAX Math and Trig functions −
- ABS(<number>)
- ACOS(number)
- ACOSH(number)
- ASIN(number)
- ASINH(number)
- ATAN(number)
- ATANH(number)
- CEILING(<number>, <significance>)
- COMBIN(number, number_chosen)
- COMBINA(number, number_chosen)
- COS(number)
- COSH(number)
- CURRENCY(<value>)
- DEGREES(angle)
- DIVIDE(<numerator>, <denominator>, [<alternateresult>])
- EVEN(number)
- EXP(<number>)
- FACT(<number>)
- FLOOR(<number>, <significance>)
- GCD(number1, [number2], ...)
- INT(<number>)
- ISO.CEILING(<number>, [<significance>])
- LCM(number1, [number2], ...)
- LN(<number>)
- LOG(<number>,<base>)
- LOG10(<number>)
- INT(<number>)
- MROUND(<number>, <multiple>)
- ODD(number)
- PI()
- POWER(<number>, <power>)
- PRODUCT(<column>)
- PRODUCTX(<table>, <expression>)
- QUOTIENT(<numerator>, <denominator>)
- RADIANS(angle)
- RAND()
- RANDBETWEEN(<bottom>,<top>)
- ROUND(<number>, <num_digits>)
- ROUNDDOWN(<number>, <num_digits>)
- ROUNDUP(<number>, <num_digits>)
- SIN(number)
- SINH(number)
- SIGN(<number>)
- SQRT(<number>)
- SUM(<column>)
- SUMX(<table>, <expression>)
- TAN(number)
- TANH(number)
- TRUNC(<number>,<num_digits>)
DAX Other Functions
These DAX functions perform unique actions that cannot be defined by any of the categories most other functions belong to.
Following are some DAX Other functions −
EXCEPT(<table_expression1>, <table_expression2>
GROUPBY (<table>, [<groupBy_columnName1>], [<name>, <expression>] … )
INTERSECT(<table_expression1>, <table_expression2>)
ISEMPTY(<table_expression>)
NATURALINNERJOIN(<leftJoinTable>, <rightJoinTable>)
NATURALLEFTOUTERJOIN(<leftJoinTable>, <rightJoinTable>)
SUMMARIZECOLUMNS (<groupBy_columnName>, [<groupBy_columnName>]…, [<filterTable>] …, [<name>, <expression>]…)
UNION (<table_expression1>, <table_expression2>, [<table_expression>]…)
VAR <name> = <expression>
DAX Parent and Child Functions
DAX Parent and Child functions are useful in managing data that is presented as a parent/child hierarchy in the Data Model.
Following are some DAX Parent and Child functions −
- PATH(<ID_columnName>, <parent_columnName>)
- PATHCONTAINS(<path>, <item>)
- PATHITEM(<path>, <position>, [<type>])
- PATHITEMREVERSE(<path>, <position>, [<type>])
- PATHLENGTH(<path>)
DAX Statistical Functions
DAX Statistical functions are very similar to the Excel Statistical functions.
Following are some DAX Statistical functions −
BETA.DIST(x, alpha, beta, cumulative,[A],[B])
BETA.INV(probability, alpha, beta,[A],[B])
CHISQ.INV(probability, deg_freedom)
CHISQ.INV.RT(probability, deg_freedom)
CONFIDENCE.NORM(alpha, standard_dev, size)
CONFIDENCE.T(alpha, standard_dev, size)
DATATABLE (ColumnName1, DataType1, ColumnName2, DataType2 ..., {{Value1, Value2...}, {ValueN, ValueN+1...}...})
EXPON.DIST(x, lambda, cumulative)
GEOMEAN(<column>)
GEOMEANX(<table>, <expression>)
MEDIAN(<column>)
MEDIANX(<table>, <expression>)
PERCENTILE.EXC(<column>, <k>)
PERCENTILE.INC(<column>, <k>)
PERCENTILEX.EXC(<table>, <expression>, k)
PERCENTILEX.EXC(<table>, <expression>, k)
POISSON.DIST(x, mean, cumulative)
RANK.EQ(<value>, <columnName>[, <order>])
RANKX(<table>, <expression>[, <value>[, <order>[, <ties>]]])
SAMPLE (<n_value>, <table>, <orderBy_expression>, [<order>], [<orderBy_expression>, [<order>]]…)
STDEV.P(<ColumnName>)
STDEV.S(<ColumnName>)
STDEVX.P(<table>, <expression>)
STDEVX.S(<table>, <expression>)
SQRTPI(number)
VAR.P(<columnName>)
VAR.S(<columnName>)
VARX.P(<table>, <expression>)
VARX.S(<table>, <expression>)
XIRR(<table>, <values>, <dates>, [guess])
XNPV(<table>, <values>, <dates>, <rate>)
DAX Text Functions
DAX Text functions work with tables and columns. With DAX Text functions you can return the part of a string, search for text within a string or concatenate string values. You can also control the formats for dates, times, and numbers.
Following are some DAX Text functions −
- BLANK()
- CODE(text)
- CONCATENATE(<text1>, <text2>)
- CONCATENATEX(<table>, <expression>, [delimiter])
- EXACT(<text1>,<text2>)
- FIND(<find_text>, <within_text>, [<start_num>], [<NotFoundValue>])
- FIXED(<number>, <decimals>, <no_commas>)
- FORMAT(<value>, <format_string>)
- LEFT(<text>, <num_chars>)
- LEN(<text>)
- LOWER(<text>)
- MID(<text>, <start_num>, <num_chars>)
- REPLACE(<old_text>, <start_num>, <num_chars>, <new_text>)
- REPT(<text>, <num_times>)
- RIGHT(<text>, <num_chars>)
- SEARCH(<find_text>, <within_text>, [<start_num>], [<NotFoundValue>])
- SUBSTITUTE(<text>, <old_text>, <new_text>, <instance_num>)
- TRIM(<text>)
- UPPER (<text>)
- VALUE(<text>)
Excel DAX - Understanding DAX Functions
In Excel 2013, DAX has 246 functions. You have already learnt about the different types of DAX functions in the chapter – DAX Functions. However, if you have to use a DAX function in a DAX formula, you need to understand the function in detail. You should know the syntax of the function, the parameter types, what the function returns, etc.
If you are writing a DAX formula, it is suggested to use the DAX functions where applicable. For this, you can refer to the tutorial – DAX Functions in this tutorials library for an indepth understanding of where and how to use each of the 246 DAX functions. You can always go back and forth between this tutorial and DAX Functions tutorial to obtain mastery on DAX.
In this chapter, you will understand how to read and interpret the DAX functions in the DAX Functions tutorial.
DAX Function – Explanation Structure
In the DAX functions tutorial, each DAX function is explained in a standard structure, comprising of the following sections −
- Description
- Syntax
- Parameters
- Return Value
- Remarks
- Example
You will learn about each of these in the following sections.
Description
In the Description section, you will learn what the DAX function is about and where it can be used.
Syntax
In the Syntax section, you will learn the exact function name and the respective parameters.
Parameters
In the Parameters section, you will learn about each of the parameters of the specific DAX function, whether a parameter is an input or an output and if there are any options. As seen in the chapter - DAX Standard Parameters, only the standard parameter names will be used.
Return Value
In the Return Value section, you will learn about what value the DAX function will return and its data type.
Remarks
In the Remarks section, you will learn about any extra information that you need to know about the usage of the DAX function.
Example
The DAX function description will be ended with an example of the usage of the function.
Excel DAX - Evaluation Context
In DAX, context is an important term that you should be aware of, while writing DAX formulas. Also referred to as evaluation context, DAX context is used to determine the evaluation of a DAX formula and the corresponding result. This means, the results of a DAX formula can vary according to the context. You should clearly understand how a specific DAX context is used and how the results can be different.
Evaluation context enables you to perform dynamic analysis, in which the results of a DAX formula can change to reflect the current row or a cell selection and also any related data. Understanding context and using context effectively are very important to build powerful DAX formulas, perform dynamic data analysis, and troubleshoot problems in DAX formulas. Evaluation contexts are the basis of all of the advanced features of DAX that you need to master to create complex data analysis reports.
As you keep referencing to DAX functions for relevant usage in DAX formulas, you need to refer to this chapter on DAX context to obtain clarity on the results.
Types of Context in DAX
DAX supports the following evaluation contexts −
- Row Context
- Filter Context
When a DAX formula is evaluated, all the contexts will be taken into account and are applied as relevant. The contexts exist together and the result of the formula will be different based on the context that is used while calculating a value. For example, when you select fields for rows, columns, and filters in a PivotTable, the subtotals are dynamically calculated based on which row and which column the subtotal/total is associated with and the values in the rows and columns are determined by the filters used.
Row Context
Row context means that the DAX formula or the DAX function knows which row of the table it is referencing at any point in time. You can consider row context as the current row. The formula will get calculated row-by-row with the row context.
Some DAX functions (e.g., the X-functions, FILTER ()) and all calculated columns have a row context. For example, if you create a calculated column Year with the DAX formula = YEAR ([Date]), the values of the calculated column are obtained by applying the given DAX formula on the given column in the table, row by row.
This means that if you have created a calculated column, the row context consists of the values in each individual row and the values in the columns that are related to the current row, as determined by the DAX formula used. Though the DAX formula does not contain the reference to a row, DAX implicitly understands the row context while calculating values.
DAX creates a row context automatically when you define a calculated column and all the calculated values with the DAX formula used will appear in the calculated column.
In contrast, when you have a DAX function such as SUMX, the values calculated row by row get summed up and only the final result will be displayed. That is, the intermediate values are discarded.
When you have related tables, the row context determines which rows in the related table are associated with the current row. However, the row context does not propagate through relationships automatically. You have to use the DAX functions - RELATED and RELATEDTABLE for this.
Multiple Row Context
DAX has iterator functions like SUMX. You can use these functions to nest row contexts. With this, programmatically you can have a recursion over an inner loop and an outer loop, where you can have multiple current rows and current row contexts.
For example, you can use the DAX function Earlier () that stores the row context from the operation that preceded the current operation. This function stores two sets of context in memory - one set of context represents the current row for the inner loop of the formula, and another set of context represents the current row for the outer loop of the formula. DAX automatically feeds the values between the two loops so that you can create complex aggregates.
For an example, refer to the scenario - Creating a DAX Formula that Dynamically Ranks Values in the chapter Scenarios - Ranking and Comparing Values.
Filter Context
Filter context refers to any filtering that is applied to the Data Model in DAX. Filter context is created by a PivotTable and also by the DAX functions.
Filter Context Created by a PivotTable
Filter Context created by a PivotTable is the natural filtering that is applied by the selections made on the PivotTable fields from the following −
- Rows
- Columns
- Filters
- Slicers
The filter context created by a PivotTable, filters the underlying tables in the Data Model. If the tables are related, then the filters flow down from the lookup tables to data tables. That means, you can filter the data tables based on the results from the lookup tables. The filter propagation does not happen the other way round. However, you can use DAX formulas to filter the lookup tables based on the results from the data tables.
Filter Context Created by DAX Functions
You can use DAX Filter functions to define calculated fields and calculated columns, containing filter expressions that control the values used by the DAX formula. These calculated fields and calculated columns then become part of the PivotTable fields list and you can add them to the PivotTable. You can also selectively clear the filters on particular columns with these DAX Filter functions. An example of a powerful DAX Filter function to create Filter Context is CALCULATE (). For an example, refer to the chapter Scenarios - Performing Complex Calculations.
Filter Context as an Addition to Row Context
Row context does not automatically create a filter context. You can achieve the same with the DAX formulas containing DAX Filter functions.
Excel DAX - Formulas
DAX is a formula language for creating custom calculations in Power PivotTables. You can use the DAX functions that are designed to work with relational data and perform dynamic aggregation in DAX formulas.
DAX formulas are very similar to Excel formulas. To create a DAX formula, you type an equal sign, followed by a function name or expression and any required values or arguments.
DAX Functions vs. DAX Formulas
DAX formulas can include DAX functions and leverage their usage. This is where DAX formulas tend to differ from DAX functions in important ways.
A DAX function always reference a complete column or a table. If you want to use only particular values from a table or column, you can add filters to the formula.
If you want to customize calculations on a row by row basis, Power Pivot provides functions that let you use the current row value or a related value to perform calculations that vary by context.
DAX includes a type of function that returns a table as its result, rather than a single value. These functions can be used to provide input to other functions, thus calculating values for entire tables or columns.
Some DAX functions provide time intelligence, which lets you create calculations using meaningful ranges of dates and compare the results across parallel periods.
Understanding DAX Formula Syntax
Every DAX formula has the following syntax −
Each formula must begin with an equal sign.
To the right of the equal sign, you can either type or select a function name, or type an expression. The expression can contain table names and column names connected by DAX operators.
Following are some valid DAX formulas −
- [column_Cost] + [column_Tax]
- = Today ()
Understanding IntelliSense Feature
DAX provides the IntelliSense feature that will enable you to write DAX formulas promptly and correctly. With this feature, you need not type the table, column, and function names completely, but select the relevant names from the dropdown list while writing a DAX formula.
Begin to type the first few letters of the function name. AutoComplete displays a list of available functions with the names beginning with those letters.
Place the pointer on any of the function names. IntelliSense tooltip will be displayed giving you the use of the function.
Click the function name. The function name appears in the formula bar and the syntax is displayed, which will guide you as you select the arguments.
Type the first letter of the table name that you want. AutoComplete displays a list of available tables and columns with the names beginning with that letter.
Press TAB or click the name to add an item from the AutoComplete list to the formula.
Click the Fx button to display a list of available functions. To select a function from the dropdown list, use the arrow keys to highlight the item and click OK to add the function to the formula.
Supply the arguments to the function by selecting them from a dropdown list of possible tables and columns or by typing in required values.
Usage of this handy IntelliSense feature is highly recommended.
Where to Use DAX Formulas?
You can use DAX formulas in creating calculated columns and calculated fields.
You can use DAX formulas in calculated columns, by adding a column and then typing an expression in the formula bar. You create these formulas in the PowerPivot window.
You can use DAX formulas in calculated fields. You create these formulas −
In the Excel window in the Calculated Field dialog box, or
In the Power Pivot window in the calculation area of a table.
The same formula can behave differently depending on whether the formula is used in a calculated column or a calculated field.
In a calculated column, the formula is always applied to every row in the column, throughout the table. Depending on the row context, the value might change.
In a calculated field, however, the calculation of results is strongly dependent on the context. That is, the design of the PivotTable and the choice of row and column headings affects the values that are used in calculations.
It is important to understand the concept of context in DAX to write DAX formulas. This can be a bit difficult in the beginning of your DAX journey, but once you get a grasp on it, you can write effective DAX formulas that are required for complex and dynamic data analysis. For details, refer to the chapter – DAX Context.
Creating a DAX Formula
You have already learnt about the IntelliSense feature in a previous section. Remember to use it while creating any DAX formula.
To create a DAX formula, use the following steps −
Type an equal sign.
To the right of the equal sign, type the following −
Type the first letter of a function or table name and select the complete name from the dropdown list.
If you have chosen a function name, type parenthesis ‘(‘.
If you have chosen the table name, type bracket ‘[‘. Type the first letter of the column name and select the complete name from the dropdown list.
Close the column names with ‘]’ and function names with ‘)’.
Type a DAX operator between expressions or type ‘,’ to separate function arguments.
Repeat steps 1 - 5 till the DAX formula is complete.
For example, you want to find the total sales amount in the East region. You can write a DAX formula as shown below. East_Sales is the name of the table. Amount is a column in the table.
SUM ([East_Sales[Amount])
As already discussed in the chapter – DAX Syntax, it is a recommended practice to use the table name along with the column name in every reference to any column name. This is termed as – “the fully qualified name”.
The DAX formula can vary based on whether it is for a calculated field or calculated column. Refer to the sections below for details.
Creating a DAX Formula for a Calculated Column
You can create a DAX formula for a calculated column in the Power Pivot window.
- Click the tab of the table in which you want to add the calculated column.
- Click the Design tab on the Ribbon.
- Click Add.
- Type the DAX formula for the calculated column in the formula bar.
= DIVIDE (East_Sales[Amount], East_Sales[Units])
This DAX formula does the following for every row in the table East_Sales −
Divides the value in Amount column of a row by the value in Units column in the same row.
Places the result in the new added column in the same row.
Repeats steps 1 and 2 iteratively till it completes all the rows in the table.
You have added a column for Unit Price at which those units are sold with the above formula.
As you can observe, calculated columns require computation and storage space as well. Hence, use calculated columns only if necessary. Use calculated fields where possible and sufficient.
Refer to the chapter - Calculated Columns for details.
Creating a DAX Formula for a Calculated Field
You can create a DAX formula for a calculated field either in the Excel window or in the Power Pivot window. In the case of calculated field, you need to provide the name beforehand.
To create a DAX formula for a calculated field in the Excel window, use the Calculated Field dialog box.
To create a DAX formula for a calculated field in the Power Pivot window, click a cell in the calculation area in the relevant table. Start the DAX formula with CalculatedFieldName:=.
For example, Total East Sales Amount:=SUM ([East_Sales[Amount])
If you use Calculated Field dialog box in the Excel window, you can check the formula before you save it and make it as a mandatory habit to ensure the use of correct formulas.
For more details on these options, refer to the chapter – Calculated Fields.
Creating DAX Formulas Using the Formula Bar
Power Pivot window also has a formula bar that is like Excel window formula bar. Formula bar makes it easier to create and edit formulas, using the AutoComplete functionality so as to minimize syntax errors.
To enter the name of a table, begin typing the name of the table. Formula AutoComplete provides a dropdown list containing valid table names that begin with those letters. You can start with one letter and type more letters to narrow down the list if required.
To enter the name of a column, you can select it from the list of column names in the selected table. Type a bracket ‘[‘, to the right of the table name, and then choose the column from the list of columns in the selected table.
Tips for Using AutoComplete
Following are some tips for using AutoComplete −
You can nest functions and formulas in a DAX formula. In such a case, you can use Formula AutoComplete in the middle of an existing formula with nested functions. The text immediately before the insertion point is used to display values in the dropdown list and all of the text after the insertion point remains unchanged.
Defined names that you create for constants do not get displayed in the AutoComplete dropdown list, but you can still type them.
The closing parenthesis of functions is not automatically added. You need to do it by yourself.
You must make sure that each function is syntactically correct.
Understanding Insert Function Feature
You can find the Insert Function button labelled as fx, both in the Power Pivot window and Excel window.
The Insert Function button in the Power Pivot window is to the left of formula bar.
The Insert Function button in the Excel window is in the Calculated Field dialog box to the right of Formula.
When you click on the fx button, Insert Function dialog box appears. The Insert Function dialog box is the easiest way to find a DAX function that is relevant to your DAX formula.
The Insert Function dialog box helps you select functions by category and provides short descriptions for each function.
Using Insert Function in a DAX Formula
Suppose you want to create the following calculated field −
Medal Count: = COUNTA (]Medal])
You can use Insert Function dialog box using the following steps −
- Click the calculation area of the Results table.
- Type the following in the formula bar −
Medal Count: =
- Click the Insert Function button (fx).
Insert Function dialog box appears.
Select Statistical in the Select a category box as shown in the following screenshot.
Select COUNTA in the Select a function box as shown in the following screenshot.
As you can observe, the selected DAX function syntax and the function description are displayed. This enables you to make sure that it is the function that you want to insert.
Click OK. Medal Count:=COUNTA( appears in the formula bar and a tooltip displaying the function syntax also appears.
Type [. This means you are about to type a column name. The names of all the columns and the calculated fields in the current table will be displayed in the dropdown list. You can use IntelliSense to complete the formula.
Type M. The displayed names in the dropdown list will be limited to those starting with ‘M’.
Click Medal.
Double-click Medal. Medal Count: = COUNTA([Medal] will be displayed in the formula bar. Close the parenthesis.
Press Enter. You are done. You can use the same procedure to create a calculated column also. You can also follow the same steps to insert a function in the Calculated Field dialog box in the Excel window using the Insert Function feature.
Click the Insert Function (fx) button to the right of Formula.
Insert Function dialog box appears. The rest of the steps are the same as above.
Using Multiple Functions in a DAX Formula
DAX formulas can contain up to 64 nested functions. But, it is unlikely that a DAX formula contains so many nested functions.
If a DAX formula has many nested functions, it has the following disadvantages −
- The formula would be very difficult to create.
- If the formula has errors, it would be very difficult to debug.
- The formula evaluation would not be very fast.
In such cases, you can split the formula into smaller manageable formulas and build the large formula incrementally.
Creating a DAX Formula Using Standard Aggregations
When you perform data analysis, you will perform calculations on aggregated data. There are several DAX aggregation functions, such as SUM, COUNT, MIN, MAX, DISTINCTCOUNT, etc. that you can use in DAX formulas.
You can automatically create formulas using standard aggregations by using the AutoSum feature in the Power Pivot window.
- Click the Results tab in the Power Pivot window. Results table will be displayed.
- Click the Medal column. The entire column – Medal will be selected.
- Click the Home tab on the Ribbon.
- Click the down arrow next to AutoSum in the Calculations group.
- Click COUNT in the dropdown list.
As you can observe, the calculated field Count of Medal appears in the calculation area below the column – Medal. The DAX formula also appears in the formula bar −
Count of Medal: = COUNTA([Medal])
The AutoSum feature has done the work for you – created the calculated field for data aggregation. Further, AutoSum has taken the appropriate variant of the DAX function COUNT, i.e. COUNTA (DAX has COUNT, COUNTA, COUNTAX functions).
A word of caution – To use AutoSum feature, you need to click the down arrow next to AutoSum on the Ribbon. If you click on the AutoSum itself instead, you will get −
Sum of Medal: = SUM([Medal])
And an error is flagged as Medal is not a numeric data column and the text in the column cannot be converted to numbers.
You can refer to the chapter - DAX Error Reference for details on DAX errors.
DAX Formulas and the Relational Model
As you are aware, in the Data Model of Power Pivot, you can work with multiple tables of data and connect the tables by defining relationships. This will enable you to create interesting DAX formulas that use the correlations of the columns among the related tables for calculations.
When you create a relationship between two tables, you are expected to make sure that the two columns used as keys have values that match, at least for most of the rows, if not completely. In the Power Pivot Data Model, it is possible to have non-matching values in a key column and still create a relationship, because Power Pivot does not enforce referential integrity (look at the next section for details). However, the presence of blank or non-matching values in a key column might affect the results of the DAX formulas and the appearance of PivotTables.
Referential Integrity
Establishing referential integrity involves building a set of rules to preserve the defined relationships between tables when you enter or delete data. If you do not exclusively ensure this, as Power Pivot does not enforce it, you might not get correct results with the DAX formulas created before data changes are made.
If you enforce referential integrity, you can prevent the following pitfalls −
Adding rows to a related table when there is no associated row in the primary table (i.e. with matching values in the key columns).
Changing data in a primary table that would result in orphan rows in a related table (i.e. rows with a data value in the key column that does not have a matching value in the primary table key column).
Deleting rows from a primary table when there are matching data values in the rows of the related table.
Updating the Results of DAX Formulas
DAX formulas are used in calculations involving large data, including data from external data sources. The data can be subjected to changes from time to time as the DAX calculations are meant for live data as well.
The results of DAX formulas need to get updated on two occasions −
Data Refresh − When the data is refreshed.
Recalculation − When there are changes in the DAX formula.
Understanding Data Refresh vs. Recalculation
Data refresh and recalculation are two separate but related operations.
Data refresh is the process of updating the data in the Data Model in your workbook obtaining up-to-date data from external data sources.
Recalculation is the process of updating all the columns, tables, and PivotTables in your workbook that contain DAX formulas, to reflect the changes in the underlying data that result from the changes to DAX formulas themselves.
You should not save or publish the workbook until the DAX formulas in it have been recalculated.
Different Ways to Update Data in Data Model
Power Pivot does not automatically detect changes in external data sources.
You can refresh data manually from the Power Pivot window at intervals that you can specify.
You can schedule an automatic data refresh from external sources, if you have published the workbook to a SharePoint site.
For details on these, refer to the chapter – Updating Data in Data Model.
Recalculation of DAX Formulas
Recalculation of a DAX formula is an important task, because during recalculation, column dependencies are checked and you will be notified if a column has changed, if the data is invalid, or if an error has appeared in a DAX formula that used to work.
Recalculation can affect performance in the following ways −
For a calculated column, the result of DAX formula should always be recalculated for the entire column, whenever you change the DAX formula.
For a calculated field, the result of DAX formula is not calculated until the calculated field is placed in the context of a PivotTable or a PivotChart. The DAX formula will be recalculated when you change any row or column heading that affects the filters on the data or when you manually refresh the PivotTable.
In DAX, recalculating formulas can be done automatically or manually.
To learn more about recalculation, refer to the chapter – Recalculating DAX Formulas.
Excel DAX - Updating Data in the Data Model
DAX is used for calculations on the data in the Data Model in Excel Power Pivot. DAX enables data modeling and reporting activities to be handled in an effective way. However, this requires updating the data in the Data Model from time to time so as to reflect the current data.
You can import data from an external data source into the Data Model of your workbook by establishing a data connection. You can update the data from the source whenever you choose. This option is handy if you are getting data from relational databases that contain live sales information or data feeds that are updated several times a day.
Different Ways of Updating Data in the Data Model
You can update the data in the Data Model in the following ways −
- Refreshing data in the Data Model from time to time.
- Making changes to data sources, such as connection properties.
- Updating the data in the Data Model after the source data has changed.
- Filtering the data to selectively load rows from a table in the data source.
Refreshing Data in the Data Model
In addition to getting updated data from an existing source, you will need to refresh data in your workbook whenever you make changes to the schema of the source data. These changes can include adding columns or tables, or changing the rows that are imported.
Note that addition of data, changing data, or editing filters always triggers recalculation of DAX formulas that depend on that data source. Refer to the chapter – Recalculating DAX Formulas for details.
You have two types of data refresh in Data Model −
Manual Refresh
If you choose manual refresh option, you can refresh the data in the Data Model manually at any time. You can refresh all data, which is the default, or you can manually choose the tables and columns to refresh for individual data sources.
Automatic or Scheduled Refresh
If you have published your workbook to a PowerPivot Gallery or SharePoint site that supports PowerPivot, you or the SharePoint administrator can create a schedule for automatically updating the data in the workbook. In such a case, you can schedule unattended data refresh on the server.
Manually Refreshing an Existing Data Source
You can manually refresh your data any time, if you need to update the data from an existing data source or get the recent data for designing new DAX formulas. You can refresh a single table, all tables that share the same data connection or all tables in the Data Model.
If you have imported data from a relational data source, such as SQL Server and Oracle, you can update all the related tables in one operation. The operation of loading new or updated data into the Data Model often triggers recalculation of DAX formulas, both of which might require some time to complete. Hence, you should be aware of the potential impact before you change data sources or refresh the data that is obtained from the data source.
To refresh data for a single table or all tables in a Data Model, do the following −
- Click the Home tab on the Ribbon in the Power Pivot window.
- Click Refresh.
- Click Refresh in the dropdown list for refreshing the selected table.
- Click Refresh All in the dropdown list for refreshing all the tables.
To refresh data for all tables that use the same connection in a Data Model, do the following −
- Click the Home tab on the Ribbon in Power Pivot window.
- Click the Existing Connections in the Get External Data group.
Existing Connections dialog box appears.
- Select a connection.
- Click the Refresh button.
Data Refresh dialog box appears and data refresh progress information is displayed as the PowerPivot engine reloads data from the selected table or from all tables from the data source.
There are three possible outcomes −
Success − Reports on the number of rows imported into each table.
Error − An error can occur if the database is offline, you no longer have permissions. A table or column is deleted or renamed in the source.
Cancelled − This means Excel did not issue the refresh request, probably because refresh is disabled on the connection.
Click the Close button.
Changing a Data Source
To change the data in your Data Model, you can edit the connection information or update the definition of the tables and columns used in your Data Model in the Power Pivot window.
You can make the following changes to the existing data sources −
Connections
- Edit the database name or the server name.
- Change the name of the source text file, spreadsheet, or data feed.
- Change the location of the data source.
- For relational data sources, change the default catalog or initial catalog.
- Change the authentication method or the credentials used to access the data.
- Edit advanced properties on the data source.
Tables
- Add or remove a filter on the data.
- Change the filter criteria.
- Add or remove tables.
- Change the table names.
- Edit mappings between tables in the data source and tables in the Data Model.
- Select different columns from the data source.
Columns
- Change the column names.
- Add new columns.
- Delete columns from the Data Model (does not affect the data source).
You can edit the properties of an existing data source in the following ways −
You can change the connection information, including the file, feed, or database used as a source, its properties or other provider specific connection options.
You can change the table and column mappings and remove references to columns that are no longer used.
You can change the tables, views, or columns that you get from the external data source.
Modifying a Connection to an Existing Data Source
You can modify the connection that you have created to an external data source by changing the external data source used by the current connection. However, the procedure to be followed depends on the data source type.
- Click the Home tab on the Ribbon in the PowerPivot window.
- Click the Existing Connections in the Get External Data group.
Existing Connections dialog box appears. Select the connection that you want to modify.
Depending on the type of the data source you are changing, the provider might be different. Also the properties that are available may require change. Consider a simple example of a connection to an Excel workbook that contains the data.
Click the Edit button. Edit Connection dialog box appears.
Click the Browse button to locate another database of the same type (Excel workbook in this example), but with a different name or location.
Click the Open button.
The new file will get selected. A message appears stating that you have modified connection information and you need to save and refresh the tables to verify the connection.
Click the Save button. You will be back in the Existing Connections dialog box.
Click the Refresh button. Data Refresh dialog box appears displaying the data refresh progress. The status of data refresh will be displayed. Refer to the section - Manually Refreshing an Existing Data Source for details.
Click Close, once the data refresh is a success.
Click Close in the Existing Connections dialog box.
Editing Table and Column Mappings (Bindings)
To edit the column mappings when a data source changes, do the following −
Click the tab that contains the table you want to modify in the Power Pivot window.
Click the Design tab on the Ribbon.
Click the Table Properties.
Edit Table Properties dialog box appears.
You can observe the following −
The name of the selected table in the Data Model is displayed in the Table Name box.
The name of the corresponding table in the external data source is displayed in the Source Name box.
There are two options for column names from – Source and Modal.
If the columns are named differently in the data source and in the Data Model, you can toggle between the two sets of column names by selecting these options.
Preview of the selected table appears in the dialog box.
You can edit the following −
To change the table that is used as a data source, select a different table than the selected one in the Source Name dropdown list.
Change the column mappings if needed −
To add a column that is present in the source but not in the Data Model, select the checkbox beside the column name. Repeat for all the columns that are to be added. The actual data will be loaded into the Data Model, the next time you refresh.
If some columns in the Data Model are no longer available in the current data source, a message appears in the notification area that lists the invalid columns. You do not need to do anything.
Click the Save button.
When you save the current set of table properties, you will get a message – Please wait. Then the number of rows retrieved will be displayed.
In the table in the Data Model, any invalid columns are automatically removed and new columns are added.
Changing a Column Name and Data Type
You can change the name of a column in a table in the Data Model as follows −
Double-click on the header of the column. The name of the column in the header will get highlighted.
Type the new column name, overwriting the old name. Alternatively, you can change the name of a column in a table in the Data Model as follows:
Select the column by clicking on its header.
Right-click the column.
Click Rename Column in the dropdown list.
The name of the column in the header will get highlighted. Type the new column name, overwriting the old name.
As you have learnt, all the values in a column in a table in the Data Model must be of the same data type.
To change the data type of a column, do the following −
Select the column that you want to change by clicking its header.
Click the Home tab on the Ribbon.
Click the controls in the Formatting group to modify the column's data type and format.
Adding / Changing a Filter to a Data Source
You can add a filter to a data source when you import data to restrict the number of rows in the table in the Data Model. Later, you can add more rows or decrease the number of rows in the table in the Data Model by changing the filter that you defined earlier.
Adding a Filter to a Data Source During Import
To add a new filter to a data source during data import, do the following −
- Click the Home tab on the Ribbon in Power Pivot window.
- Click one of the data sources in the Get External Data group.
Table Import Wizard dialog box appears.
- Proceed to the step – Select Tables and Views.
- Select a table and then click Preview & Filter.
Preview Selected Table dialog box appears.
- Click the column on which you want to apply filter.
- Click the down arrow to the right of the column heading.
To add a filter, do one of the following −
In the list of column values, select or clear one or more values to filter by and then click OK.
However, if the number of values is extremely large, individual items might not be shown in the list. Instead, you will see the message - "Too many items to show."
Click Number Filters or Text Filters (depending on the data type of the column).
Then, click one of the comparison operator commands (such as Equals), or click Custom Filter. In the Custom Filter dialog box, create the filter and then click OK.
Note − If you make a mistake at any stage, click the Clear Row Filters button and start over.
- Click OK. You will be back to Select Tables and Views page of Table Import Wizard.
As you can observe, in the column – Filter Details, a link Applied Filters appears for the column on which you defined the filter.
You can click the link to view the filter expression that was built by the wizard. But, the syntax for each filter expression depends on the provider and you cannot edit it.
- Click Finish to import the data with filters applied.
- Close the Table Import Wizard.
Changing a Filter to an Existing Data Source
After you have imported the data, you might have to update it from time to time, by either adding more rows or by restricting the existing rows in the table. In such a case, you can change the existing filters on the table or add new filters.
Click the Home tab on the Ribbon in Power Pivot window.
Click the Existing Connections in the Get External Data group. Existing Connections dialog box appears.
Click the connection that contains the table on which you have to change the filter.
Click the Open button.
You will get into Table Import Wizard dialog box. Repeat the steps in the previous section to filter the columns.
Excel DAX - Recalculating DAX Formulas
Recalculation of a DAX formula is required to reflect changes in the data and changes in the formula itself. However, recalculating a DAX formula involves performance cost.
Even then, to obtain accurate results, recalculation is essential. During recalculation, column dependencies are checked and you will be notified if a column has changed, if the data is invalid or if an error has appeared in a DAX formula that used to work.
Types of Recalculation
You have two options for recalculating DAX formulas −
- Automatic Recalculation Mode (default)
- Manual Recalculation Mode
By default, Power Pivot automatically recalculates as required while optimizing the time required for processing. However, you can choose to update calculations manually, if you are working with complex formulas or very large data sets and want to control the timing of updates.
Both automatic and manual modes of recalculating DAX formulas have advantages. However, the recommended way is to use automatic recalculation mode. This way you can keep the Power Pivot data in sync and prevent problems caused by deletion of data, changes in names or data types or missing dependencies.
Recalculating DAX Formulas Automatically
If you choose the default mode of recalculating DAX formulas, i.e. recalculating automatically, any changes to data that would cause the result of any DAX formula to change will trigger recalculation of the entire column that contains the DAX formula.
The following changes always require recalculation of DAX formulas −
Values from an external data source have been refreshed.
The DAX formula itself is changed.
Names of tables or columns that are referenced in the DAX formula have been changed.
Relationships between tables have been added, modified or deleted.
New calculated fields or calculated columns have been added.
Changes have been made to other DAX formulas within the workbook, so columns or calculations that depend on those DAX formulas need to be recalculated.
Rows have been inserted or deleted in the table.
You applied a filter that requires execution of a query to update the data set. The filter could have been applied either in a DAX formula or as part of a PivotTable or PivotChart.
When to Use Manual Recalculation Mode?
You can use manual recalculation mode until you are ready with all your required DAX formulas in your workbook. This way, you can avoid incurring the cost of computing formula results on the workbook that is still in the draft state.
You can use manual recalculation of DAX formulas in the following conditions −
You are designing a DAX formula by using a template and want to change the names of the columns and tables used in the DAX formula before you validate it.
You know that some data in the workbook has changed but you are working with a different column that has not changed so you want to postpone a recalculation.
You are working in a workbook that has many dependencies and want to defer recalculation till you are sure that all the necessary changes have been made.
But, you should be aware that as long as the workbook is configured to manual recalculation mode, any validation or checking of formulas is not performed. This will result in the following −
Any new formulas that you add to the workbook will be flagged as containing an error.
No results will appear in the new calculated columns.
Configuring the Workbook for Manual Recalculation
As you have learnt, automatic recalculation is the default mode in the Data Model of any workbook. To configure a workbook for manual recalculation, do the following −
- Click the Design tab on the Ribbon in the Power Pivot window.
- Click the Calculation Options in the Calculations group.
- Click the Manual Calculation Mode in the dropdown list.
Recalculating DAX Formulas Manually
To recalculate the DAX formulas manually, do the following −
- Click the Design tab on the Ribbon in the Power Pivot window.
- Click the Calculation Options field in the Calculations group.
- Click the Calculate Now field in the dropdown list.
Troubleshooting DAX Formula Recalculation
Whenever changes occur in the Data Model of your workbook, Power Pivot performs an analysis of the existing data to determine whether recalculation is required and performs the update in the most efficient way possible.
Power Pivot handles the following, during recalculation of DAX formulas −
- Dependencies
- Sequence of recalculation for dependent columns
- Transactions
- Recalculation of volatile functions
Dependencies
When a column depends on another column, and the contents of that other column change in any way, all related columns might need to be recalculated.
Power Pivot always performs a complete recalculation for a table, because a complete recalculation is more efficient than checking for changed values. The changes that trigger recalculation might include deleting a column, changing the numeric data type of a column or adding a new column. These changes are considered as major changes. However, seemingly trivial changes, such as changing the name of a column might also trigger recalculation. This is because the names of the columns are used as identifiers in the DAX formulas.
In some cases, Power Pivot may determine that columns can be excluded from recalculation.
Sequence of Recalculation for Dependent Columns
Dependencies are calculated prior to any recalculation. If there are multiple columns that depend on each other, Power Pivot follows the sequence of dependencies. This ensures that the columns are processed in the right order at the maximum speed.
Transactions
Operations that recalculate or refresh data take place as a transaction. This means that if any part of the refresh operation fails, the remaining operations are rolled back. This is to ensure that data is not left in a partially processed state. However, you cannot manage the transactions as you do in a relational database or create checkpoints.
Recalculation of Volatile Functions
DAX functions such as NOW, RAND, or TODAY do not have fixed values and are referred to as volatile functions. If such DAX functions are used in a calculated column, the execution of a query or filtering will usually not cause them to be re-evaluated to avoid performance problems.
The results for these DAX functions are only recalculated when the entire column is recalculated. These situations include refresh from an external data source or manual editing of data that causes re-evaluation of DAX formulas that contain these functions.
However, such functions will always be recalculated if the functions are used in the definition of a Calculated Field.
Excel DAX - Formula Errors
You can get errors when you write DAX formulas with wrong syntax. Calculated fields and calculated columns can contain DAX functions that require a specific type of arguments. Arguments of DAX functions can be tables, columns, or other DAX functions (nested DAX functions). As DAX functions can return tables and columns, care should be taken to check that the right type of arguments are passed to the DAX functions.
DAX formula errors can be either syntax errors or semantic errors. The errors can occur either at design time or at run time.
In this chapter, you will learn about some common DAX errors, their causes, and how to fix those errors.
DAX Error: Calculation Aborted
The following error can occur when attempting to create (design-time) or use (run-time) a calculated field with a DAX time-intelligence function. In each case, a noncontiguous date range is being passed to the time intelligence function.
“DAX Error: CALCULATION ABORTED: MdxScript (instance) (00, 0) Function ‘DATEADD’ only works with contiguous date selections.”
Cause at Run-time
This error can be displayed when a calculated field with a DAX time intelligence function is placed in the VALUES area of a PivotTable and date fields such as the month or the quarter are selected as slicers or filters before selecting a year. For example, if you have data of three years – 2014, 2015, and 2016 and you try to use only the month March without selecting the Year field, then the values are not contiguous data values and you will get an error.
How to Fix the Error at Run-time?
In the above example,
First add Year as a slicer or a filter and select a year.
Then, add Month or Quarter as a slicer or a filter.
Then, select one or more months or quarters to slice or filter on for the year selected.
Cause at Design-time
DAX time intelligence functions require a date column specified for the date argument. The date column must have a contiguous range of dates. This error can be returned, if there is a date value in one or more rows in the date column that is not contiguous with the data values in the previous and successive rows.
If you imported your table containing dates from a data source, remember that many organizations run special processes that scan tables in databases for invalid values and replace those with a particular value. That is, if an invalid date is found, it is assigned a particular date value that may not be contiguous with other data values in the column.
How to Fix This Error at Design-time?
Do the following to fix the error at design time −
If your date table is imported from a data source, use Refresh in Power Pivot window to reimport any changes found at the source.
Check the values in your date column to make sure they are in a contiguous order. If any value is found not to be in place, it will have to be corrected at the source and the date table will have to be refreshed.
Create a separate date table and date column in your Data Model. Specify the new date column as the date argument in the formula causing the error. Date tables are easy to create and add to a Data Model.
DAX Semantic Error - An Example
The following DAX error is a semantic error −
“A function ‘CALCULATE’ has been used in a true-false expression that is used as a table filter expression. This is not allowed.”
Cause
This error can appear when one or more filter expressions cannot be used in context of the calculated field or calculated column expression.
In most of the cases, this error is caused by a filter expression specified as an argument to the DAX CALCULATE function. The CALCULATE function requires filters defined as a Boolean expression or a table expression.
How to Fix Such Errors?
You can fix such errors by using the DAX FILTER function to define filters as a table expression, which can then be used as an argument to the DAX CALCULATE function.
Excel DAX - Time Intelligence
DAX has an important and powerful feature, referred to as Time Intelligence. Time intelligence enables you to write DAX formulas that refer to the time periods for use in the PivotTables.
DAX has 35 time-intelligence functions specifically for aggregating and comparing data over time. However, these DAX functions have some constraints on the data that you need to understand and work with caution to avoid errors.
Why Time Intelligence Makes DAX Powerful?
The time intelligence functions work with data that is constantly changing, depending on the context you select in PivotTables and Power View visualizations. As you are aware, most of the data analysis involves summarization of data over time periods, comparing data values across the time periods, understanding the trends and making decisions based on future projections.
For example, you might want to sum sales amounts for the past month product-wise and compare the totals with those of other months in the fiscal year. This means, you have to use the dates as a way to group and aggregate sales transactions for a particular period in time.
This is where you can observe the power of DAX. You can use DAX time intelligence functions to define calculated fields that help you in analyzing the data over time, without having to change the date selections in the pivot tables. This makes your job easier. Moreover, you can build PivotTables that would not be possible any other way.
Requirements for DAX Time Intelligence Functions
DAX time intelligence functions have certain requirements. If these requirements are not met, you might get errors or they may not work properly. Hence, you can refer to these requirements as rules or constraints as well. Following are certain DAX time intelligence functions requirements/rules/constraints −
You need to have a date table in your Data Model.
The date table must include a column considered to be the Date column by DAX. You can name the column the way you want, but it should comply with the following conditions: o The date column should contain a contiguous set of dates that covers every day in the time period you are analyzing the data.
Every date must exist once and only once in the date column.
You cannot skip any dates (For e.g. you cannot skip weekend dates).
DAX time intelligence functions work only on a standard calendar and assume the start of the year as January 1 and the end of the year as December 31, with the months in the year and days in each month as of a calendar year.
However, you can customize a standard calendar for different financial years. It is a good practice to verify the above requirements before any time intelligence function is used.
For more details on date tables and their usage in DAX formulas, refer to the tutorial = Data Modeling with DAX in this tutorials library.
DAX Time Intelligence Functions – Categories
DAX Time Intelligence functions can be categorized as follows −
- DAX functions that return a single date.
- DAX functions that return a table of dates.
- DAX functions that evaluate expressions over a time period.
DAX Functions That Return a Single Date
DAX functions in this category return a single date.
There are 10 DAX functions in this category −
Sr.No. | DAX Function & Return Value |
---|---|
1 | FIRSTDATE (Date_Column) Returns the first date in the Date_Column in the current context. |
2 | LASTDATE (Date_Column) Returns the last date in the Date_Column in the current context. |
3 | FIRSTNONBLANK (Date_Column, Expression) Returns the first date where an expression has a non-blank value. |
4 | LASTNONBLANK (Date_Column, Expression) Returns the last date where an expression has a non-blank value. |
5 | STARTOFMONTH (Date_Column) Returns the first date of a month in the current context. |
6 | ENDOFMONTH (Date_Column) Returns the last date of a month in the current context. |
7 | STARTOFQUARTER (Date_Column) Returns the first date of a quarter in the current context. |
8 | ENDOFQUARTER (Date_Column) Returns the last date of a quarter in the current context. |
9 | STARTOFYEAR (Date_Column, [YE_Date]) Returns the first date of a year in the current context. |
10 | ENDOFYEAR (Date_Column, [YE_Date]) Returns the last date of a year in the current context. |
DAX Functions That Return a Table of Dates
DAX Functions in this category return a table of dates. These functions will be mostly used as a SetFilter argument to the DAX function - CALCULATE.
There are 16 DAX functions in this category. Eight (8) of these DAX functions are the “previous” and “next” functions.
The “previous” and “next” functions start with a date column in the current context and calculate the previous or next day, month, quarter or year.
The “previous” functions work backward from the first date in the current context and the “next” functions move forward from the last date in the current context.
The “previous” and “next” functions return the resulting dates in the form of a single column table.
Sr.No. | DAX Function & Return Value |
---|---|
1 | PREVIOUSDAY (Date_Column) Returns a table that contains a column of all dates representing the day that is previous to the first date in the Date_Column in the current context. |
2 | NEXTDAY (Date_Column) Returns a table that contains a column of all dates from the next day, based on the first date specified in the Date_Column in the current context. |
3 | PREVIOUSMONTH (Date_Column) Returns a table that contains a column of all dates from the previous month, based on the first date in the Date_Column in the current context. |
4 | NEXTMONTH (Date_Column) Returns a table that contains a column of all dates from the next month, based on the first date in the Date_Column in the current context. |
5 | PREVIOUSQUARTER (Date_Column) Returns a table that contains a column of all dates from the previous quarter, based on the first date in the Date_Column in the current context. |
6 | NEXTQUARTER (Date_Column) Returns a table that contains a column of all dates in the next quarter, based on the first date specified in the Date_Column in the current context. |
7 | PREVIOUSYEAR (Date_Column, [YE_Date]) Returns a table that contains a column of all dates from the previous year, given the last date in the Date_Column in the current context. |
8 | NEXTYEAR (Date_Column, [YE_Date]) Returns a table that contains a column of all dates in the next year, based on the first date in the Date_Column in the current context. |
Four (4) DAX functions calculate a set of dates in a period. These functions perform the calculations using the last date in the current context.
Sr.No. | DAX Function & Return Value |
---|---|
1 | DATESMTD (Date_Column) Returns a table that contains a column of the dates for the month to date, in the current context. |
2 | DATESQTD (Date_Column) Returns a table that contains a column of the dates for the quarter to date, in the current context. |
3 | DATESYTD (Date_Column, [YE_Date]) Returns a table that contains a column of the dates for the year to date, in the current context. |
4 | SAMEPERIODLASTYEAR (Date_Column) Returns a table that contains a column of dates shifted one year back in time from the dates in the specified Date_Column, in the current context. Note− SAMEPERIODLASTYEAR requires that the current context contains a contiguous set of dates. If the current context is not a contiguous set of dates, then SAMEPERIODLASTYEAR will return an error. |
Four (4) DAX functions are used to shift from the set of dates that are in the current context to a new set of dates.
These DAX functions are more powerful than the previous ones.
DAX functions – DATEADD, DATESINPERIOD and PARALLELPERIOD shift some number of time intervals from the current context. The interval can be day, month, quarter or year, represented by the key words – DAY, MONTH, QUARTER and YEAR respectively.
For example:
Shift backward by 2 days.
Move forward by 5 months.
Move forward by one month from today.
Go back to same quarter in the last year.
DAX function – DATESBETWEEN calculates the set of dates between the specified start date and the end date.
If the function argument - number of intervals (integer value) is positive, shift is forward and if it is negative, shift is backward.
シニア番号 | DAX関数と戻り値 |
---|---|
1 | DATEADD (Date_Column, Number_of_Intervals, Interval) 現在のコンテキストの日付から指定された間隔数だけ時間的に前後にシフトされた、日付の列を含むテーブルを返します。 |
2 | DATESINPERIOD (Date_Column, Start_Date, Number_of_Intervals, Interval) start_dateで始まり、指定されたnumber_of_intervalsまで続く日付の列を含むテーブルを返します。 |
3 | PARALLELPERIOD (Date_Column, Number_of_Intervals, Interval) 現在のコンテキストで指定されたDate_Columnの日付に平行な期間を表す日付の列を含むテーブルを返します。日付は、時間の前後にいくつかの間隔でシフトされます。 |
4 | DATESBETWEEN (Date_Column, Start_Date, End_Date) start_dateで始まり、end_dateまで続く日付の列を含むテーブルを返します。 |
ある期間にわたって式を評価するDAX関数
このカテゴリのDAX関数は、指定された期間にわたって式を評価します。
このカテゴリには9つのDAX関数があります-
このカテゴリの3つのDAX関数を使用して、指定した期間にわたって任意の式を評価できます。
シニア番号 | DAX関数と戻り値 |
---|---|
1 | TOTALMTD (Expression, Date_Column, [SetFilter]) 現在のコンテキストで、現在までの月の日付の式の値を評価します。 |
2 | TOTALQTD (Expression, Date_Column, [SetFilter]) 現在のコンテキストで、四半期累計の日付の式の値を評価します。 |
3 | TOTALYTD (Expression, Date_Column, [SetFilter], [YE_Date]) 現在のコンテキストで、年初来の日付の式の値を評価します |
このカテゴリの6つのDAX関数を使用して、期首残高と期末残高を計算できます。
任意の期間の期首残高は、前の期間の期末残高と同じです。
決算残高には、期末までのすべてのデータが含まれますが、期首残高には、現在の期間内のデータは含まれません。
これらのDAX関数は、常に特定の時点で評価された式の値を返します。
気になる時点は、常に暦期間の最後の可能な日付値です。
開始残高は前の期間の最終日に基づいており、終了残高は現在の期間の最終日に基づいています。
現在の期間は、常に現在の日付コンテキストの最後の日付によって決定されます。
シニア番号 | DAX関数と戻り値 |
---|---|
1 | OPENINGBALANCEMONTH (Expression, Date_Column, [SetFilter]) 現在のコンテキストで月の最初の日付の式を評価します。 |
2 | CLOSINGBALANCEMONTH (Expression, Date_Column, [SetFilter]) 現在のコンテキストで月の最後の日付の式を評価します。 |
3 | OPENINGBALANCEQUARTER (Expression, Date_Column, [SetFilter]) 現在のコンテキストで、四半期の最初の日付で式を評価します。 |
4 | CLOSINGBALANCEQUARTER (Expression, Date_Column, [SetFilter]) 現在のコンテキストで四半期の最終日に式を評価します。 |
5 | OPENINGBALANCEYEAR (Expression, Date_Column, [SetFilter], [YE_Date]) 現在のコンテキストで年の最初の日付の式を評価します。 |
6 | CLOSINGBALANCEYEAR (Expression, Date_Column, [SetFilter], [YE_Date]) 現在のコンテキストで、その年の最後の日付の式を評価します。 |
DAXは強力です filter functionsこれはExcelの関数とはかなり異なります。ルックアップ関数は、データベースのようにテーブルとリレーションシップを使用して機能します。フィルタリング機能を使用すると、データコンテキストを操作して、動的な計算を作成できます。
Note−テーブルを返すDAXフィルター関数は、テーブルをデータモデルに追加しません。結果のテーブルは、別のDAX関数の引数として使用されます。つまり、このようなDAX関数は、他のDAX関数との入れ子関数として使用されます。
次のセクションでは、使用できるDAXフィルター関数について学習します。これらの関数の詳細については、このチュートリアルライブラリのチュートリアル–DAX関数を参照してください。
DAXフィルター機能
以下はDAXフィルター機能です-
シニア番号 | DAX機能とその機能は何ですか? |
---|---|
1 | ADDMISSINGITEMS (<showAllColumn>, [<showAllColumn>] …, <table>, <groupingColumn>, [<groupingColumn>] …, [filterTable] …) アイテムがまだ存在しない場合は、複数の列のアイテムの組み合わせをテーブルに追加します。追加するアイテムの組み合わせの決定は、列のすべての可能な値を含むソース列の参照に基づいています。 評価するさまざまな列のアイテムの組み合わせを決定するには-
|
2 | ALL ( {<table> | <column>, [<column>], [<column>], … }) 適用された可能性のあるフィルターを無視して、指定されたテーブルのすべての行またはテーブルの指定された列のすべての値を返します。 この関数は、フィルターをクリアし、テーブルのすべての行で計算を作成するのに役立ちます。 |
3 | ALLEXCEPT (<table>, <column>, [<column>], …) 引数として指定された列に適用されたフィルターを除く、テーブル内のすべてのコンテキストフィルターを削除します。 ALLとは異なり、この関数は、テーブル内のすべてではないが多くの列のフィルターを削除する場合に使用できます。 |
4 | ALLNOBLANKROW (<table>|<column>) 関係の親テーブルから、-を返します
この関数は、存在する可能性のあるコンテキストフィルターをすべて無視します。 |
5 | ALLSELECTED ( [<tableName>|<columnName>] ) 他のすべてのコンテキストフィルターまたは明示的なフィルターを保持しながら、現在のクエリの列と行からコンテキストフィルターを削除します。 |
6 | CALCULATE (<expression>, [<filter1>, <filter2> …)] 指定されたフィルターによって変更されたコンテキストで式を評価します。 式の結果である値を返します。 |
7 | CALCULATETABLE (<expression>, <filter1>, <filter2>, …) 指定されたフィルターによって変更されたコンテキストでテーブル式を評価します。 値のテーブルを返します。 |
8 | CROSSFILTER (<columnName1>, <columnName2>, <direction>) 2つの列の間に存在する関係の計算で使用されるクロスフィルタリングの方向を指定します。値を返しません。 |
9 | DISTINCT (<column>) 指定された列とは異なる値を含む1列のテーブルを返します。つまり、重複する値が削除され、一意の値のみが返されます。 結果の列は、別のDAX関数の引数として使用されます。 |
10 | EARLIER (<column>, <number>) 番号で指定された上記の列の外部評価パスで、指定された列の現在の値を返します。 |
11 | EARLIEST (<column>) 指定された列の外部評価パスで、指定された列の現在の値を返します。 |
12 | FILTER (<table>, <filter>) フィルタリングされた行のみを含むテーブルを返します。 FILTERは、引数としてテーブルを必要とする他の関数に埋め込まれている関数としてのみ使用されます。 |
13 | FILTERS (<columnName>) columnNameにフィルターとして直接適用される値を返します。 FILTERSは、引数としてテーブルを必要とする他の関数に埋め込まれている関数としてのみ使用されます。 |
14 | HASONEFILTER (<columnName>) columnNameで直接フィルタリングされた値の数が1の場合、TRUEを返します。それ以外の場合は、FALSEを返します。 |
15 | HASONEVALUE (<columnName>) columnNameのコンテキストが1つの個別の値のみにフィルターされた場合、TRUEを返します。それ以外の場合は、FALSEを返します。 |
16 | ISCROSSFILTERED (<columnName>) 同じテーブルまたは関連するテーブルのcolumnNameまたは別の列がフィルタリングされている場合にTRUEを返します。 |
17 | ISFILTERED (<columnName>) columnNameが直接フィルタリングされている場合はTRUEを返します。列にフィルターがない場合、または同じテーブルまたは関連するテーブルの別の列がフィルター処理されているためにフィルター処理が行われた場合、関数はFALSEを返します。 |
18 | KEEPFILTERS (<expression>) CALCULATEまたはCALCULATETABLE関数の評価中にフィルターを適用する方法を変更します。 |
19 | RELATED (<column>) 別のテーブルから関連する値を返します。 |
20 | RELATEDTABLE (<tableName>) 指定されたフィルターによって変更されたコンテキストでテーブル式を評価します。 |
21 | SUBSTITUTEWITHINDEX (<table>, <indexColumnName>, <indexColumnTable>, <orderBy_expression>, [<order>]) 引数として指定された2つのテーブルの左半結合を表すテーブルを返します。 半結合は、共通の列名と共通のデータ型によって決定される共通の列を使用して実行されます。 結合される列は、返されたテーブル内の整数型でインデックスを含む単一の列に置き換えられます。 インデックスは、指定されたソート順での右結合テーブルへの参照です。 |
22 | USERELATIONSHIP ( <columnName1>,<columnName2>) columnName1とcolumnName2の間に存在する関係として、特定の計算で使用される関係を指定します。 |
23 | VALUES (<TableNameOrColumnName>) 指定されたテーブルまたは列とは異なる値を含む1列のテーブルを返します。 つまり、重複する値が削除され、一意の値のみが返されます。 |
前の章で、DAX構文、DAX演算子の使用法、およびDAX関数について学習しました。ご存知のように、DAXはデータモデリングとデータ分析に使用される数式言語です。
DAXはさまざまなシナリオで使用できます。DAXシナリオに基づいて、DAXはパフォーマンスを最適化し、正確で効果的な結果を生成します。この章では、DAXシナリオのいくつかを理解するようになります。
複雑な計算の実行
DAX数式は、カスタム集計、フィルタリング、および条件値の使用を含む複雑な計算を実行できます。DAXで次のことができます
- ピボットテーブルのカスタム計算を作成します。
- 数式にフィルターを適用します。
- フィルタを選択的に削除して、動的な比率を作成します。
- 外側のループからの値を使用します。
詳細については、「シナリオ-複雑な計算の実行」の章を参照してください。
テキストと日付の操作
DAXは、テキストの操作、日付と時刻の値の抽出と作成、または条件に基づく値の作成を含むシナリオで使用できます。DAXで次のことができます-
- 連結によってキー列を作成します。
- テキストの日付から抽出された日付部分に基づいて日付を作成します。
- カスタム日付を定義します。
- 数式を使用してデータ型を変更します。
- 実数を整数に変換します。
- 実数、整数、または日付を文字列に変換します。
- 文字列を実数または日付に変換します。
詳細については、シナリオ-テキストと日付の操作の章を参照してください。
条件値とエラーのテスト
DAX関数を使用すると、データ内の値をテストし、条件に基づいて異なる値を返すことができます。値をテストするDAX関数は、値の範囲またはタイプをチェックして、予期しないデータエラーによる計算の中断を防ぐのにも役立ちます。DAXで次のことができます-
- 条件に基づいて値を作成します。
- 数式内のエラーをテストします。
詳細については、シナリオ-条件値とエラーのテストの章を参照してください。
タイムインテリジェンスの使用
DAXタイムインテリジェンスの機能については、「DAXタイムインテリジェンスについて」の章で学習しました。
DAXタイムインテリジェンス関数には、データから日付または日付範囲を取得するのに役立つ関数が含まれています。次に、それらの日付または日付範囲を使用して、同様の期間の値を計算できます。タイムインテリジェンス関数には、標準の日付間隔で機能する関数も含まれており、月、年、または四半期の値を比較できます。指定した期間の最初と最後の日付の値を比較するDAX式を作成することもできます。
DAXインテリジェンス機能とそれらが以下のために何ができるかについてもっと学ぶことができます-
- 累積売上高を計算します。
- 時間の経過とともに値を比較します。
- カスタムの日付範囲で値を計算します。
詳細については、シナリオ-タイムインテリジェンスの使用の章を参照してください。
値のランク付けと比較
列またはピボットテーブルの上位n個のアイテムのみを表示する場合は、次のオプションがあります-
- フィルタを適用して、上部または下部のいくつかのアイテムのみを表示します。
- 値を動的にランク付けするDAX数式を作成し、フィルターを適用します。
これらの各オプションには長所と短所があります。
詳細については、「シナリオ-ランク付けと値の比較」の章を参照してください。
DAX数式は、カスタム集計、フィルタリング、および条件値の使用を含む複雑な計算を実行できます。DAXで次のことができます-
- ピボットテーブルのカスタム計算を作成します。
- DAX数式にフィルターを適用します。
- フィルタを選択的に削除して、動的な比率を作成します。
- 外側のループからの値を使用します。
ピボットテーブルのカスタム計算の作成
DAX関数CALCULATEおよびCALCULATETABLEは、強力で柔軟性があります。これらは、計算フィールドを定義するのに役立ちます。これらのDAX関数を使用すると、計算が実行されるコンテキストを変更できます。実行する集計または数学演算のタイプをカスタマイズすることもできます。
計算機能
計算(<式>、[<フィルター1>]、[<フィルター2>]…)
CALCULATE関数は、0個以上の指定されたフィルターによって変更されたコンテキストで指定された式を評価します。
データがフィルター処理されている場合、CALCULATE関数は、データがフィルター処理されるコンテキストを変更し、フィルターによって指定された新しいコンテキストで式を評価します。つまり、指定された列の既存のフィルターがすべて削除され、代わりにfilter引数で使用されているフィルターが適用されます。
例
国名でスポーツごとにフィルタリングされたメダルの割合を表示するとします。計算では、ピボットテーブルの国に適用するフィルターを上書きするパーセンテージ値を取得する必要があります。
次のスクリーンショットに示すように、計算フィールドを定義します–メダル数のパーセンテージ。
このDAX数式を使用すると、結果テーブルのすべての行が、ALL関数を含むフィルターを使用したCALCULATE関数で考慮されます。このようにして、分母に合計数があります。
ピボットテーブルは、次のスクリーンショットに示すようになります。
上のスクリーンショットでは、国が米国にフィルターされ、上位18の値がピボットテーブルに表示されています。次に、ピボットテーブルの値を動的にフィルタリングできます。ただし、使用したカスタムDAX式によって計算は正しくなります。
CALCULATETABLE関数は値のテーブルを取り、CALCULATE関数と同じアクションを実行します。
数式でのデータのフィルタリング
DAX数式内にフィルターを作成して、計算に使用するソースデータから値を選択できます。これを行うには、フィルター式を定義し、それをDAX式への入力であるテーブルと一緒に使用します。
フィルタ式を使用すると、ソースデータのサブセットを取得できます。フィルタは、データの現在のコンテキストに応じて、DAX数式の結果を更新するたびに動的に適用され、正確で期待される結果を保証できます。
フィルタ式には通常、テーブルの選択された行のみを返すDAXフィルタ関数が含まれています。これは、データ集約に使用している別のDAX関数の引数として使用できます。
例
次のスクリーンショットは、夏のスポーツでのみメダル数を与える計算フィールドの定義を示しています。
この計算フィールドを使用すると、ピボットテーブルは次のスクリーンショットに示すようになります。
ご覧のとおり、新しい計算フィールドがある右側のピボットテーブルの値は、シーズンフィールドのフィルターが明示的に適用されている左側のピボットテーブルの値と一致しています。
Note − DAXフィルターおよび値関数はテーブルを返しますが、テーブルまたは行をデータモデルに直接返すことはないため、常に別のDAX関数に埋め込まれます。
これらのDAX関数の詳細については、「DAXフィルター関数」の章を参照してください。
フィルタを動的に追加および削除する
ピボットテーブルで使用するDAX数式は、ピボットテーブルコンテキストの影響を受ける可能性があります。ただし、フィルターを追加または削除することで、コンテキストを選択的に変更できます。DAX関数ALLおよびALLEXCEPTを使用して、ピボットテーブルコンテキストに関係なく行を動的に選択できます。
さらに、DAX関数DISTINCTおよびVALUESを使用して、個別の値を返すことができます。
外側のループからの値の使用
DAX EARLIER関数を使用して関連する計算のセットを作成する際に、前のループの値を使用できます。このDAX関数は、最大2レベルのネストされたループをサポートします。
DAXは、テキストの操作、日付と時刻の値の抽出と作成、または条件に基づく値の作成を含むシナリオで使用できます。DAXで次のことができます-
- 連結によってテーブルにキー列を作成します。
- テキストの日付から抽出された日付部分に基づいて日付を作成します。
- カスタムの日付形式を定義します。
- 数式を使用してデータ型を変更します。
- 実数を整数に変換します。
- 実数、整数、または日付を文字列に変換します。
- 文字列を実数または日付に変換します。
連結によるキー列の作成
PowerPivotのデータモデルでは、単一のキー列のみが許可されます。外部データソースにある可能性のある複合キーはサポートしていません。したがって、データソースのテーブルに複合キーが存在する場合は、それらをデータモデルのテーブルの単一のキー列に結合する必要があります。
DAX関数CONCATENATEを使用して、データモデルのテーブルで2つの列を1つの列に結合できます。DAX関数CONCATENATEは、2つのテキスト文字列を1つのテキスト文字列に結合します。結合されたアイテムは、テキスト、数値、またはテキストとして表されるブール値、あるいはそれらのアイテムの組み合わせです。列に適切な値が含まれている場合は、列参照を使用することもできます。
= CONCATENATE ([Column1], [Column2])
DAX CONCATENATE関数は、2つの引数のみを受け入れます。引数のいずれかがテキストデータ型でない場合、テキストに変換されます。DAX CONCATENATE関数は、連結された文字列を返します。
テキスト日付から抽出された日付部分に基づく日付
Power Pivotのデータモデルは、日付と時刻の値のデータ型datetimeをサポートしています。日付や時刻の値で機能するDAX関数には、引数に日時データ型が必要です。
データソースに異なる形式の日付が含まれている場合は、最初にDAX式を使用して日付部分を抽出し、それらの部分を組み合わせて有効なDAX日時データ型を構成する必要があります。
次のDAX関数を使用して、日付を抽出および作成できます-
DATE −指定された日付を日時形式で返します。
DATEVALUE −テキスト形式の日付を日時形式の日付に変換します。
TIMEVALUE −テキスト形式の時刻を日時形式の時刻に変換します。
カスタム日付形式の定義
データソースの日付が標準形式で表されていないとします。カスタムの日付形式を定義して、値が正しく処理されるようにすることができます。DAX FORMAT関数を使用すると、指定した形式に従って値をテキストに変換できます。
FORMAT (<value>, <format_string>)
FORMAT関数は、format_stringで定義されているようにフォーマットされた値を含む文字列を返します。
事前定義された日付と時刻の形式を使用することも、FORMAT関数の引数format_stringに対してユーザー定義の日付と時刻の形式を作成することもできます。
以下は、事前定義された日付と時刻の形式名です。これらの事前定義された文字列以外の文字列を使用する場合、それらはカスタムの日付と時刻の形式として解釈されます。
S.いいえ。 | Format_Stringと説明 |
---|---|
1 | "General Date" 日付や時刻を表示します。たとえば、2015年2月10日10:10:32 AM |
2 | "Long Date" or "Medium Date" 長い日付形式に従って日付を表示します。たとえば、2016年3月7日水曜日 |
3 | "Short Date" 短い日付形式を使用して日付を表示します。たとえば、2016年2月3日 |
4 | "Long Time" 長い時間形式を使用して時間を表示します。 通常、時間、分、秒が含まれます。 例:10:10:32 AM |
5 | "Medium Time" 時刻を12時間形式で表示します。 例:午後9時30分 |
6 | "Short Time" 時刻を24時間形式で表示します。 たとえば、14:15 |
または、次の表の文字を使用して、ユーザー定義の日付/時刻形式を作成することもできます。
S.いいえ。 | キャラクターと説明 |
---|---|
1 | : 時間区切り記号。 時間区切り記号。時間値がフォーマットされるときに、時間、分、および秒を区切ります。 |
2 | / 日付区切り記号。 日付値がフォーマットされる日、月、および年を区切ります。 |
3 | % 次の文字は、末尾の文字に関係なく、1文字の形式として読み取る必要があることを示すために使用されます。また、1文字の形式がユーザー定義の形式として読み取られることを示すためにも使用されます。 |
以下は、さまざまなキャラクターの詳細です。
%d −日を先行ゼロのない数値として表示します(例:5)。
%dd −日を先行ゼロ付きの数値として表示します(例:05)。
%ddd −日を省略形で表示します(例:Sun)。
%dddd −日をフルネームで表示します(例:日曜日)。
%M −月を先行ゼロのない数値として表示します(たとえば、1月は1として表されます)。
%MM −月を先行ゼロの数値として表示します(たとえば、1月は01として表されます)。
%MMM −月を省略形で表示します(たとえば、1月は1月として表されます)。
%MMMM −月を完全な月名(1月など)として表示します。
%gg −期間/元の文字列(ADなど)を表示します。
%h− 12時間制を使用して、先行ゼロなしの数値として時間を表示します(例:午後1時15分15秒)。使用する%h これがユーザー定義の数値形式の唯一の文字である場合。
%hh − 12時間制(例:01:15:15 PM)を使用して、時間を先行ゼロ付きの数値として表示します。
%H− 24時間制(13:15:15、1:15:15など)を使用して、先行ゼロなしの数値として時間を表示します。これがユーザー定義の数値形式の唯一の文字である場合は、%Hを使用します。
%HH − 24時間制を使用して、時間を先行ゼロ付きの数値として表示します(13:15:15、1:15:15など)。
%m−分を先行ゼロなしの数値として表示します(例:2:1:15)。これがユーザー定義の数値形式の唯一の文字である場合は、%mを使用します。
%mm −分を先行ゼロ付きの数値として表示します(例:2:01:15)。
%s−秒を先行ゼロなしの数値として表示します(例:2:15:5)。これがユーザー定義の数値形式の唯一の文字である場合は、%sを使用します。
%ss −秒を先行ゼロ付きの数値として表示します(例:2:15:05)。
%f−秒の端数を表示します。例えばff 100分の1秒を表示しますが、 ffff1万分の1秒を表示します。最大7つまで使用できますfユーザー定義形式の記号。使用する%f これがユーザー定義の数値形式の唯一の文字である場合。
%t− 12時間制を使用し、正午までの任意の時間に大文字のAを表示します。正午から午後11時59分までの任意の時間に大文字のPを表示します。これがユーザー定義の数値形式の唯一の文字である場合は、%tを使用します。
%tt− 12時間制を使用するロケールの場合、正午より前の任意の時間で大文字のAMを表示します。正午から午後11時59分までの任意の時間で大文字のPMを表示します。24時間制を使用するロケールの場合、何も表示されません。
%y−先行ゼロなしで年番号(0〜9)を表示します。使用する%y これがユーザー定義の数値形式の唯一の文字である場合。
%yy −該当する場合、年を2桁の数値形式で先行ゼロとともに表示します。
%yyy −年を4桁の数値形式で表示します。
%yyyy −年を4桁の数値形式で表示します。
%z−先行ゼロなしでタイムゾーンオフセットを表示します(例:-8)。使用する%z これがユーザー定義の数値形式の唯一の文字である場合。
%zz−を表示します。先頭にゼロがあるタイムゾーンオフセット(例:-08)
%zzz −完全なタイムゾーンオフセットを表示します(例:-08:00)。
ご覧のとおり、文字列の書式設定では大文字と小文字が区別されます。別のケースを使用すると、別のフォーマットを取得できます。
DAX式出力のデータ型の変更
DAX数式では、出力のデータ型はソース列によって決定され、結果のデータ型を明示的に指定することはできません。これは、最適なデータ型がPowerPivotによって決定されるためです。ただし、Power Pivotによって実行される暗黙的なデータ型変換を使用して、出力データ型を操作できます。それ以外の場合は、特定のDAX関数を使用して出力データ型を変換できます。
Using the Implicit Data Type Conversions
日付または数値文字列を数値に変換するには、1.0を掛けます。たとえば、=(TODAY()+ 5)* 1.0です。この数式は、現在の日付に5日を加えたものを計算し、結果を整数値に変換します。
日付、数値、または通貨の値を文字列に変換するには、値を空の文字列と連結します。たとえば、= Today()&“”
Using the DAX Functions for Data Type Conversions
DAX関数は次の目的で使用できます-
- 実数を整数に変換する。
- 実数、整数、または日付を文字列に変換します。
- 文字列を実数または日付に変換する。
これについては、次のセクションで学習します。
実数を整数に変換する
次のDAX関数を使用して、実数を整数に変換できます。
ROUND (<number>, <num_digits>) −数値を指定された桁数に丸め、10進数を返します。
CEILING (<number>, <significance>) −数値を最も近い整数または最も近い有意性の倍数に切り上げ、10進数を返します。
FLOOR (<number>, <significance>) −数値をゼロに向かって切り捨てて、最も近い有意倍数にし、10進数を返します。
実数、整数、または日付を文字列に変換する
次のDAX関数を使用して、実数、整数、または日付を文字列に変換できます-
FIXED (<number>, [<decimals>], [<no_comma>])−数値を丸めて、結果をテキストとして返します。小数点以下の桁数は2または指定した小数点以下の桁数です。結果はコンマあり、またはオプションでコンマなしです。
FORMAT (<value>, <format_string>) −指定された形式に従って値をテキストに変換します。
日付を文字列に変換するためのFormat関数の使用についてはすでに学習しました。
文字列を実数または日付に変換する
次のDAX関数を使用して、文字列を実数または日付に変換できます-
VALUE (<text>) −数値を表すテキスト文字列を数値に変換します。
DATEVALUE (date_text) −テキスト形式の日付を日時形式の日付に変換します。
TIMEVALUE (time_text) −テキスト形式の時刻を日時形式の時刻に変換します。
DAX関数を使用して、条件に基づいて異なる値になるデータの値をテストできます。たとえば、年間売上高をテストし、その結果に基づいて、再販業者に「優先」または「値」のラベルを付けることができます。
DAX関数を使用して、値の範囲またはタイプをチェックし、予期しないデータエラーによる計算の中断を防ぐこともできます。
条件に基づいた値の作成
ネストされたIF条件を使用して、値をテストし、条件付きで新しい値を生成できます。次のDAX関数は、条件付き処理と条件付き値に役立ちます-
IF (<logical_test>,<value_if_true>, [<value_if_false>])−条件が満たされているかどうかを確認します。条件がTRUEの場合は1つの値を返し、条件がFALSEの場合は別の値を返します。Value_if_falseはオプションであり、省略して条件がFALSEの場合、関数はBLANK()を返します。
OR (<logical1>,<logical2>)−引数の1つがTRUEであるかどうかをチェックして、TRUEを返します。両方の引数がFALSEの場合、関数はFALSEを返します。
CONCATENATE (<text1>, <text2>)−2つのテキスト文字列を1つのテキスト文字列に結合します。結合されたアイテムは、テキスト、数値、またはテキストとして表されるブール値、あるいはそれらのアイテムの組み合わせです。列に適切な値が含まれている場合は、列参照を使用することもできます。
DAX式内のエラーのテスト
DAXでは、計算列の1つの行に有効な値を設定し、別の行に無効な値を設定することはできません。つまり、計算列のいずれかの部分にエラーがある場合、列全体にエラーのフラグが付けられ、無効な値になるエラーを削除するためにDAX式を修正する必要があります。
DAX式の一般的なエラーは次のとおりです。
- ゼロによる除算。
- 関数の引数は空白ですが、期待される引数は数値です。
論理関数と情報関数を組み合わせて使用してエラーをテストし、常に有効な値を返して、計算列にエラーが返されないようにすることができます。次のDAX関数は、これに役立ちます。
ISBLANK (<value>) −値が空白であるかどうかを確認し、TRUEまたはFALSEを返します。
IFERROR (value, value_if_error)−最初の引数の式でエラーが発生した場合、value_if_errorを返します。それ以外の場合は、式自体の値を返します。
式の戻り値とvalue_if_errorは、どちらも同じデータ型である必要があります。そうしないと、エラーが発生します。
DAXの強力な機能であるタイムインテリジェンスについては、「タイムインテリジェンスについて」の章で学習しました。この章では、さまざまなシナリオでDAXタイムインテリジェンス関数を使用する方法を学習します。
DAXタイムインテリジェンス機能には以下が含まれます-
データから日付または日付範囲を取得するのに役立つ関数。これらは、同様の期間の値を計算するために使用されます。
標準の日付間隔で機能する関数。月、年、または四半期の値を比較できます。
指定された期間の最初と最後の日付を取得する関数。
期首残高と決算残高の作業に役立つ機能。
累積売上高の計算
DAXタイムインテリジェンス関数を使用して、累積売上を計算するための式を作成できます。以下のDAX関数を使用して、決算残高と期首残高を計算できます。
CLOSINGBALANCEMONTH (<expression>,<dates>, [<filter>]) −現在のコンテキストで月の最後の日付の式を評価します。
OPENINGBALANCEMONTH (<expression>,<dates>, [<filter>]) −現在のコンテキストで月の最初の日付の式を評価します。
CLOSINGBALANCEQUARTER (<expression>,<dates>, [<filter>]) −現在のコンテキストで四半期の最終日の式を評価します。
OPENINGBALANCEQUARTER (<expression>,<dates>, [<filter>]) −現在のコンテキストで、四半期の最初の日付で式を評価します。
CLOSINGBALANCEYEAR (<expression>,<dates>, [<filter>], [<year_end_date>]) −現在のコンテキストで年の最後の日付の式を評価します。
OPENINGBALANCEYEAR (<expression>, <dates>, <filter>], [<year_end_date>]) −現在のコンテキストで年の最初の日付の式を評価します。
以下のDAX関数を使用して、指定した時間に製品在庫に対して以下の計算フィールドを作成することができます。
Month Start Inventory Value: = OPENINGBALANCEMONTH (
SUMX (ProductInventory, ProductInventory[UnitCost]*ProductInventory[UnitsBalance]), DateTime[DateKey]
)
Month End Inventory Value: = CLOSINGBALANCEMONTH (
SUMX (ProductInventory, ProductInventory[UnitCost]*ProductInventory[UnitsBalance]), DateTime[DateKey]
)
Quarter Start Inventory Value: = OPENINGBALANCEQUARTER (
SUMX ProductInventory, (ProductInventory[UnitCost]*ProductInventory[UnitsBalance]), DateTime[DateKey]
)
Quarter End Inventory Value: = CLOSINGBALANCEQUARTER (
SUMX (ProductInventory, ProductInventory[UnitCost]*ProductInventory[UnitsBalance]), DateTime[DateKey]
)
Year Start Inventory Value: = OPENINGBALANCEYEAR (
SUMX (ProductInventory, ProductInventory[UnitCost]*ProductInventory[UnitsBalance]), DateTime[DateKey]
)
Year End Inventory Value: = CLOSINGBALANCEYEAR (
SUMX (ProductInventory, ProductInventory[UnitCost]*ProductInventory[UnitsBalance]), DateTime[DateKey]
)
異なる期間にわたる値の比較
DAXでサポートされるデフォルトの期間は、月、四半期、および年です。
次のDAXタイムインテリジェンス関数を使用して、さまざまな期間の合計を比較できます。
PREVIOUSMONTH (<dates>) −現在のコンテキストで、日付列の最初の日付に基づいて、前月のすべての日付の列を含むテーブルを返します。
PREVIOUSQUARTER (<dates>) −現在のコンテキストで、日付列の最初の日付に基づいて、前の四半期のすべての日付の列を含むテーブルを返します。
PREVIOUSYEAR (<dates>, <year_end_date>]) −現在のコンテキストで、日付列の最後の日付を指定して、前年のすべての日付の列を含むテーブルを返します。
DAX関数を使用して、比較のために指定された期間の西部地域の売上合計を計算するための次の計算フィールドを作成できます。
Previous Month Sales: = CALCULATE (
SUM (WestSales[SalesAmount]), PREVIOUSMONTH (DateTime [DateKey])
)
Previous Quarter Sales: = CALCULATE (
SUM (WestSales[SalesAmount]), PREVIOUSQUARTER (DateTime [DateKey])
)
Previous Year Sales: = CALCULATE (
SUM (WestSales[SalesAmount]), PREVIOUSYEAR (DateTime [DateKey])
)
並行期間にわたる値の比較
DAXタイムインテリジェンス関数PARALLELPERIODを使用して、指定した期間と並行する期間の合計を比較できます。
PARALLELPERIOD(<dates>、<number_of_intervals>、<interval>)
このDAX関数は、現在のコンテキストで、指定された日付列の日付に平行な期間を表す日付の列を含むテーブルを返します。日付は、時間の前後にいくつかの間隔でシフトされます。
西部地域での前年の売上を計算するために、次の計算フィールドを作成できます-
Previous Year Sales: = CALCULATE (
SUM (West_Sales[SalesAmount]), PARALLELPERIOD (DateTime[DateKey],-1,year)
)
ランニングトータルの計算
次のDAXタイムインテリジェンス関数を使用して、現在の合計または現在の合計を計算できます。
TOTALMTD (<expression>,<dates>, [<filter>]) −現在のコンテキストで現在までの月の式の値を評価します。
TOTALQTD (<expression>,<dates>, <filter>]) −現在のコンテキストで、四半期累計の日付の式の値を評価します。
TOTALYTD (<expression>,<dates>, [<filter>], [<year_end_date>]) −現在のコンテキストで式の年初来の値を評価します。
DAX関数を使用して、指定した期間における西部地域の現在の売上合計を計算するための次の計算フィールドを作成できます。
月間合計:= TOTALMTD(SUM(West_Sales [SalesAmount])、DateTime [DateKey])
四半期の実行合計:= TOTALQTD(SUM(WestSales [SalesAmount])、DateTime [DateKey])
年間合計:= TOTALYTD(SUM(WestSales [SalesAmount])、DateTime [DateKey])
カスタム日付範囲での値の計算
DAXタイムインテリジェンス関数を使用して、計算を実行するDAX関数への入力として使用できる日付のカスタムセットを取得し、期間全体でカスタム集計を作成できます。
DATESINPERIOD (<dates>, <start_date>, <number_of_intervals>, <interval>) − start_dateで始まり、指定されたnumber_of_intervalsまで続く日付の列を含むテーブルを返します。
DATESBETWEEN (<dates>, <start_date>,
DATEADD (<dates>,<number_of_intervals>,<interval>) −現在のコンテキストの日付から指定された間隔数だけ時間的に前後にシフトされた日付の列を含むテーブルを返します。
FIRSTDATE (<dates>) −指定された日付の列の現在のコンテキストの最初の日付を返します。
LASTDATE (<dates>) −指定された日付列の現在のコンテキストの最後の日付を返します。
DAX関数を使用して、指定した日付範囲での西部地域の売上合計を計算するための次のDAX式を作成できます。
2016年7月17日より前の15日間の売上を計算するDAX式。
CALCULATE (
SUM (WestSales[SalesAmount]), DATESINPERIOD (DateTime[DateKey], DATE(2016,17,14), -15, day)
)
2016年第1四半期の売上を計算する計算フィールドを作成するDAX数式。
= CALCULATE (
SUM (WestSales[SalesAmount]),DATESBETWEEN (DateTime[DateKey], DATE (2016,1,1), DATE (2016,3,31))
)
DAX Formulaは、現在のコンテキストで西部地域で販売が行われた最初の日付を取得する計算フィールドを作成します。
= FIRSTDATE (WestSales [SaleDateKey])
DAX Formulaは、現在のコンテキストで西部地域で販売が行われた最後の日付を取得する計算フィールドを作成します。
= LASTDATE (WestSales [SaleDateKey])
現在のコンテキストの日付の1年前の日付を計算するDAX式。
= DATEADD (DateTime[DateKey],-1,year)
トップのみを表示したい場合 n 列またはピボットテーブルのアイテム数には、次の2つのオプションがあります-
選択できます n ピボットテーブルの上位値の数。
値を動的にランク付けしてから、スライサーでランク付け値を使用するDAX式を作成できます。
フィルタを適用して上位のいくつかのアイテムのみを表示する
選ぶ n ピボットテーブルに表示する上位値の数は、次のようにします-
- ピボットテーブルの行ラベル見出しの下矢印をクリックします。
- ドロップダウンリストの[値フィルター]をクリックしてから、[トップ10]をクリックします。
[トップ10フィルター(<列名>)]ダイアログボックスが表示されます。
- [表示]で、左から右のボックスから次を選択します。
- Top
- 18(表示する上位値の数。デフォルトは10です。)
- Items.
- byボックスで、MedalCountを選択します。
[OK]をクリックします。上位18個の値がピボットテーブルに表示されます。
フィルタを適用することの長所と短所
利点
- シンプルで使いやすいです。
- 行数が多いテーブルに適しています。
短所
フィルタは表示のみを目的としています。
ピボットテーブルの基になるデータが変更された場合、変更を確認するには、ピボットテーブルを手動で更新する必要があります。
値を動的にランク付けするDAX式の作成
ランク付けされた値を含むDAX数式を使用して、計算列を作成できます。次に、結果の計算列でスライサーを使用して、表示する値を選択できます。
比較されている値よりも大きい値を持つ同じテーブル内の行の数をカウントすることにより、行内の特定の値のランク値を取得できます。このメソッドは次を返します-
テーブルの最大値のゼロ値。
等しい値は同じランク値になります。場合n 値の数が等しい場合、等しい値の次の値は、数を合計する非連続のランク値になります n。
たとえば、販売データを含むテーブル「Sales」がある場合、次のように、SalesAmount値のランクを使用して計算列を作成できます。
= COUNTROWS (FILTER (Sales,
EARLIER (Sales [Sales Amount]) < Sales [Sales Amount])
) + 1
次に、新しい計算列にスライサーを挿入し、ランクごとに値を選択して表示できます。
動的ランクの長所と短所
利点
ランク付けは、ピボットテーブルではなくテーブルで行われます。したがって、任意の数のピボットテーブルで使用できます。
DAX数式は動的に計算されます。したがって、基になるデータが変更された場合でも、ランキングが正しいことを常に確認できます。
DAX数式は計算列で使用されるため、スライサーでランキングを使用できます。
行数が多いテーブルに適しています。
短所
DAXの計算は計算コストが高いため、この方法は行数が多いテーブルには適さない場合があります。