4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

雑・Excel入門試論 - 脱VLOOKUPの思考Advent Calendar 2022

Day 21

雑・Excel入門試論 - 脱VLOOKUPの思考 21 DAX - コンテキストとイテレーター

Last updated at Posted at 2022-12-20

DAXとは

 DAXは、計算によって新しい情報を作成できます。エクセルには、様々な関数があり、それを使うことで新しい列をつくることができますが、DAXでは、更に新しい分析手法を提供してくれます。

計算列とメジャー

 DAXを使った列の追加には、計算列とメジャーの2種類があります。

 計算列は、行ごとの計算を行うことができ、エクセルのテーブルに列を追加するのと同様です。しかし、ここで追加した列はテーブルには表示されず、列名が「ピボットテーブルのフィールド」に追加されます。

 メジャーは、行を超えて計算を行うことができます。分析対象となる数値は、計算列ではなくメジャーを使って作成します。作成方法は以下のようになります。

コンテキスト

 メジャーの動作を理解するには、行コンテキスト、クエリコンテキスト、フィルターコンテキストを理解する必要があります。

行コンテキスト

 行コンテキストは、"現在の行" を示しています。計算列は、行コンテキストの中で計算されています。先の計算列では以下のような計算が行われました。

= financials[Sale Price] * financials[Units Sold]

 しかし、メジャーで記述する時、この書き方ではエラーになります。

 計算列の場合は1つの行の値しか参照できなかったのですが、メジャーの中では現在の行というものがなく、 financials[Sale Price]financials[Units Sold] という記述は列全体を対象としており、1つの値とならないからです。

値を1つにするために SUM を使用してみます。

:= SUM(financials[Sale Price]) * SUM(financials[Units Sold])

 今度はエラーにはなりませんが、個別の値段の合計と個数の合計をかけ合わせており、明らかに計算が間違っています。

 メジャーで行ごとの計算を行うためには イテレータ(反復子) を使用します。

:= SUMX(financials, financials[Sale Price]) * SUM(financials[Units Sold])

 このSUMXは、financialsの行ごとを反復して計算を行ってくれるので、正しい答えを得ることができます。

 また、行コンテキストは、反復処理されるテーブルのカラムに対してのみ適用されます。financialで行コンテキストを作成すると、別のProductsの列にアクセスすることはできません。リレーションシップで結ばれた別のテーブルにアクセスする必要がある場合は、 RELATED 関数と RELATEDTABLE 関数を使う必要があります。

 ここで注意するところは、行コンテキストはデータをフィルタリングして計算をしているのではないということです。テーブルをフィルタリングして計算するのは、フィルターコンテキストです。

クエリコンテキスト

 クエリコンテキストとは、数式に対して暗黙的に取得されるデータのサブセットです。ピボットテーブルのセルにメジャーまたは他の値フィールドをドロップすると、PowerPivotエンジンは行と列のヘッダー、スライサー、レポートフィルターを調べてコンテキストを決定します。その後、PowerPivotは必要な計算を行ってピボットテーブルに値を生成します。各セルの計算に使われたデータのセットがクエリコンテキストです。

 例えば、 =SUM(financials[Profit]) のような単純な数式の場合、ピボットテーブルでは列見出しや行見出し、スライサーを追加したり削除したりすることで簡単にコンテキストを変更できます。

フィルターコンテキスト

 フィルターコンテキストは、数式の引数で列やテーブルにフィルターを指定すると追加されます。行コンテキストやクエリコンテキストなど、他のコンテキストと合わせて適用されます。

 Microsoftのドキュメントでは、クエリコンテキストとフィルタコンテキストを区別して記述していますが、この2つをあわせて「フィルターコンテキスト」と呼ばれることもあります。

コンテンツ

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?