ALL
テーブルのすべての行、または列のすべての値を返します。適用されている可能性があるフィルターはすべて無視されます。 この関数は、フィルターをクリアし、テーブル内のすべての行に対して計算を作成する場合に便利です。
構文
ALL( [<table> | <column>[, <column>[, <column>[,…]]]] )
パラメーター
用語 | 定義 |
---|---|
テーブル | フィルターをクリアするテーブル。 |
列 | フィルターをクリアする列。 |
ALL 関数の引数は、ベース テーブルへの参照またはベース列への参照のいずれかである必要があります。 テーブル式または列式を ALL 関数と共に使用することはできません。
戻り値
フィルターが削除されたテーブルまたは列。
解説
この関数は、単独では使用されませんが、他の計算が実行される結果セットを変更するために使用できる中間関数として機能します。
ALL() 関数を含む DAX 式の通常の動作では、適用されるすべてのフィルターが無視されます。 ただし、特定の DAX クエリに必要な処理量を減らすためにフィルター処理を最適化する DAX テクノロジ、"auto-exist" により、これに当てはまらないシナリオもあります。 たとえば、(スライサーを使用する場合のように) 同じテーブルの 2 つ以上の列に対してフィルター処理を実行し、ALL() を使用する同じテーブルにメジャーがある場合、auto-exist と ALL() は予期しない結果になります。 この場合、auto-exist は複数のフィルターを 1 つに "マージ" し、値の既存の組み合わせのみフィルター処理します。 このマージにより、メジャーは値の既存の組み合わせに基づいて計算され、結果は、予測どおりすべての値ではなく、フィルター処理された値に基づきます。 auto-exist とその計算への影響の詳細については、sql.bi.com で Microsoft MVP である Alberto Ferrari の「Understanding DAX Auto-Exist」(DAX の auto-exist について) の記事を参照してください。
次の表は、ALL 関数と ALLEXCEPT 関数がどのようなシナリオで使用できるかを示しています。
関数と使用法 Description ALL() すべての場所ですべてのフィルターを削除します。 ALL() は、フィルターをクリアするためだけに使用でき、テーブルを返すためには使用できません。 ALL(Table) 指定されたテーブルからすべてのフィルターを削除します。 実際には、ALL(Table) により、テーブル内のすべての値が返され、削除しなければ適用されていた可能性があるすべてのフィルターがコンテキストから削除されます。 この関数は、さまざまなレベルのグループ化を操作し、合計値に対する集計値の比率を作成する計算を作成する場合に便利です。 最初の例は、このシナリオを示しています。 ALL (Column[, Column[, …]]) テーブル内の指定された列からすべてのフィルターを削除します。テーブル内の他の列に対する他のすべてのフィルターは引き続き適用されます。 すべての列引数は、同じテーブルから取得する必要があります。 ALL(Column) バリアントは、1 つ以上の特定の列のコンテキスト フィルターを削除し、他のすべてのコンテキスト フィルターを保持する場合に便利です。 2 番目と 3 番目の例は、このシナリオを示しています。 ALLEXCEPT(Table, Column1 [,Column2]...) 指定した列に適用されているフィルターを除く、テーブル内のすべてのコンテキスト フィルターを削除します。 これは、テーブル内の多数の列 (すべてではない) のフィルターを削除する場合に便利な方法です。 この関数は、計算列または行レベルのセキュリティ (RLS) ルールで使用される場合、DirectQuery モードでの使用はサポートされません。
例 1
カテゴリ売上の総売上に対する比率を計算する
ピボットテーブル内の現在のセルの売上高をすべての再販業者の総売上で割った額を求めるとします。 ピボットテーブルのユーザーがデータをフィルター処理またはグループ化する方法に関係なく、分母を確実に同じにするために、ALL を使用して正しい総計を作成する数式を定義します。
次の表は、コード セクションの数式を使用して、すべての再販業者の売上比率という新しいメジャーが作成された場合の結果を示しています。 これがどのように動作するかを確認するには、ピボットテーブルの行ラベル領域に CalendarYear フィールドを追加し、列ラベル領域に ProductCategoryName フィールドを追加します。 次に、すべての再販業者の売上比率のメジャーを、ピボットテーブルの値領域にドラッグします。 結果をパーセンテージで表示するには、Excel の書式設定機能を使用して、メジャーを含むセルにパーセンテージ数値の書式設定を適用します。
行ラベル | アクセサリ | Bikes | Clothing | Components | 総計 |
---|---|---|---|---|---|
2005 | 0.02% | 9.10% | 0.04% | 0.75% | 9.91% |
2006 | 0.11% | 24.71% | 0.60% | 4.48% | 29.90% |
2007 | 0.36% | 31.71% | 1.07% | 6.79% | 39.93% |
2008 | 0.20% | 16.95% | 0.48% | 2.63% | 20.26% |
総計 | 0.70% | 82.47% | 2.18% | 14.65% | 100.00% |
計算式
= SUMX(ResellerSales_USD, ResellerSales_USD[SalesAmount_USD])/SUMX(ALL(ResellerSales_USD), ResellerSales_USD[SalesAmount_USD])
数式は次のように構成されます。
分子 (
SUMX(ResellerSales_USD, ResellerSales_USD[SalesAmount_USD])
) は、CalendarYear と ProductCategoryName にコンテキスト フィルターが適用された、ピボットテーブルの現在のセルの ResellerSales_USD[SalesAmount_USD] の値の合計です。分母については、まずテーブル ResellerSales_USD を指定し、ALL 関数を使用してテーブルのすべてのコンテキスト フィルターを削除します。
次に、SUMX 関数を使用して、ResellerSales_USD[SalesAmount_USD] 列の値を合計します。 つまり、すべての再販業者の売上の ResellerSales_USD[SalesAmount_USD] の合計を取得します。
例 2
製品売上の当年度の総売上に対する比率を計算する
各製品カテゴリ (ProductCategoryName) の年間の売上の割合を示すテーブルを作成するとします。 ProductCategoryName の各値に対する各年の比率を取得するには、その特定の年の製品カテゴリの売上合計を、同じ製品カテゴリのすべての年の売上合計で割る必要があります。 つまり、ProductCategoryName に対するフィルターはオンにしたまま、割合の分母を計算するときにその年のフィルターを削除します。
次の表は、コード セクションの数式を使用して、再販業者の年度売上という新しいメジャーが作成された場合の結果を示しています。 これがどのように動作するかを確認するには、ピボットテーブルの行ラベル領域に CalendarYear フィールドを追加し、列ラベル領域に ProductCategoryName フィールドを追加します。 結果をパーセンテージで表示するには、Excel の書式設定機能を使用して、再販業者の年度売上のメジャーを含むセルにパーセンテージ数値の書式設定を適用します。
行ラベル | アクセサリ | Bikes | Clothing | Components | 総計 |
---|---|---|---|---|---|
2005 | 3.48% | 11.03% | 1.91% | 5.12% | 9.91% |
2006 | 16.21% | 29.96% | 27.29% | 30.59% | 29.90% |
2007 | 51.62% | 38.45% | 48.86% | 46.36% | 39.93% |
2008 | 28.69% | 20.56% | 21.95% | 17.92% | 20.26% |
総計 | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% |
計算式
= SUMX(ResellerSales_USD, ResellerSales_USD[SalesAmount_USD])/CALCULATE( SUM( ResellerSales_USD[SalesAmount_USD]), ALL(DateTime[CalendarYear]))
数式は次のように構成されます。
分子 (
SUMX(ResellerSales_USD, ResellerSales_USD[SalesAmount_USD])
) は、CalendarYear 列と ProductCategoryName 列にコンテキスト フィルターが適用された、ピボットテーブルの現在のセルの ResellerSales_USD[SalesAmount_USD] の値の合計です。分母については、ALL(Column) 関数を使用して、CalendarYear の既存のフィルターを削除します。 これにより、列ラベルから既存のコンテキスト フィルターが適用された後、ResellerSales_USD テーブルの残りの行の合計が計算されます。 実質的な効果として、分母については、選択した ProductCategoryName (暗黙のコンテキスト フィルター) と年のすべての値の合計が計算されます。
例 3
年別の総売上に対する製品カテゴリのコントリビューションを計算する
各製品カテゴリの売上の割合を年単位で示すテーブルを作成するとします。 特定の年の各製品カテゴリのパーセンテージを取得するには、n 年の特定の製品カテゴリ (ProductCategoryName) の売上の合計を計算し、結果の値を n 年のすべての製品カテゴリの売上の合計で除算する必要があります。 つまり、年に対するフィルターはオンにしたまま、割合の分母を計算するときに ProductCategoryName のフィルターを削除します。
次の表は、コード セクションの数式を使用して、再販業者の売上カテゴリ名 という新しいメジャーが作成された場合の結果を示しています。 これがどのように動作するかを確認するには、ピボットテーブルの行ラベル領域に CalendarYear フィールドを追加し、列ラベル領域に ProductCategoryName フィールドを追加します。 次に、ピボットテーブルの値領域に新しいメジャーを追加します。 結果をパーセンテージで表示するには、Excel の書式設定機能を使用して、再販業者の売上カテゴリ名 の新しいメジャーを含むセルにパーセンテージ数値の書式設定を適用します。
行ラベル | アクセサリ | Bikes | Clothing | Components | 総計 |
---|---|---|---|---|---|
2005 | 0.25% | 91.76% | 0.42% | 7.57% | 100.00% |
2006 | 0.38% | 82.64% | 1.99% | 14.99% | 100.00% |
2007 | 0.90% | 79.42% | 2.67% | 17.01% | 100.00% |
2008 | 0.99% | 83.69% | 2.37% | 12.96% | 100.00% |
総計 | 0.70% | 82.47% | 2.18% | 14.65% | 100.00% |
計算式
= SUMX(ResellerSales_USD, ResellerSales_USD[SalesAmount_USD])/CALCULATE( SUM( ResellerSales_USD[SalesAmount_USD]), ALL(ProductCategory[ProductCategoryName]))
数式は次のように構成されます。
分子 (
SUMX(ResellerSales_USD, ResellerSales_USD[SalesAmount_USD])
) は、CalendarYear フィールドと ProductCategoryName フィールドにコンテキスト フィルターが適用された、ピボットテーブルの現在のセルの ResellerSales_USD[SalesAmount_USD] の値の合計です。分母については、行ラベルから既存のコンテキストフィルターを適用した後で、ALL(Column) 関数を使用して、ProductCategoryName のフィルターを削除し、ResellerSales_USD テーブルの残りの行の合計を計算します。 実質的な効果として、分母については、選択した年 (暗黙のコンテキスト フィルター) と ProductCategoryName のすべての値の合計が計算されます。