ALL
適用されている可能性のあるフィルターを無視して、テーブル内のすべての行、または列内のすべての値を返します。 この関数は、フィルターをクリアし、テーブル内のすべての行に対して計算を作成する場合に便利です。
構文
ALL( [<table> | <column>[, <column>[, <column>[,…]]]] )
パラメーター
用語 | 定義 |
---|---|
table |
フィルターをクリアするテーブル。 |
column |
フィルターをクリアする列。 |
ALL 関数の引数は、ベース テーブルへの参照またはベース列への参照である必要があります。 テーブル式または列式は、ALL 関数では使用できません。
戻り値
フィルターが削除されたテーブルまたは列。
備考
この関数は単独では使用されませんが、他の計算を実行する結果のセットを変更するために使用できる中間関数として機能します。
ALL() 関数を含む DAX 式の通常の動作は、適用されるすべてのフィルターが無視されることです。 ただし、特定の DAX クエリに必要な処理量を減らすためにフィルター処理を最適化する DAX テクノロジである、
auto-exist
が原因でそうではないシナリオがいくつかあります。 自動存在と ALL() によって予期しない結果が発生する例は、(スライサーを使用する場合など) 同じテーブルの 2 つ以上の列をフィルター処理するときであり、ALL() を使用する同じテーブルにメジャーがある場合です。 この場合、自動存在 複数のフィルター 1 つにマージされ、既存の値の組み合わせでのみフィルター処理されます。 このマージにより、メジャーは既存の値の組み合わせに基づいて計算され、結果は、期待どおりにすべての値ではなく、フィルター処理された値に基づいて計算されます。 自動存在とその計算への影響の詳細については、Microsoft MVP Alberto Ferrari の Understanding DAX Auto-Existsql.bi.comに関する記事を参照してください。次の表では、さまざまなシナリオで ALL 関数と ALLEXCEPT 関数を使用する方法について説明します。
関数と使用法 形容 ALL() すべての場所ですべてのフィルターを削除します。 ALL() はフィルターのクリアにのみ使用できますが、テーブルを返す場合は使用できません。 ALL(テーブル) 指定したテーブルからすべてのフィルターを削除します。 実際には、ALL(Table) はテーブル内のすべての値を返し、それ以外の場合は適用されている可能性があるコンテキストからフィルターを削除します。 この関数は、多くのレベルのグループ化を使用していて、集計値と合計値の比率を作成する計算を作成する場合に便利です。 最初の例では、このシナリオを示します。 ALL (Column[, Column[, ...]]) テーブル内の指定した列からすべてのフィルターを削除します。テーブル内の他の列に対する他のすべてのフィルターは引き続き適用されます。 すべての列引数は、同じテーブルから取得する必要があります。 ALL(Column) バリアントは、1 つ以上の特定の列のコンテキスト フィルターを削除し、他のすべてのコンテキスト フィルターを保持する場合に便利です。 2 番目と 3 番目の例では、このシナリオを示します。 ALLEXCEPT(Table, Column1 [,Column2]...) 指定した列に適用されているフィルターを除き、テーブル内のすべてのコンテキスト フィルターを削除します。 これは、テーブル内の多くの列 (すべてではない) のフィルターを削除する場合に便利なショートカットです。 この関数は、計算列または行レベル セキュリティ (RLS) 規則で使用する場合、DirectQuery モードでは使用できません。
例 1
合計売上に対するカテゴリ売上の比率を計算する
ピボットテーブル内の現在のセルの売上を、すべてのリセラーの売上合計で割った値を求めたいとします。 ピボットテーブル ユーザーがデータをフィルター処理またはグループ化する方法に関係なく分母が同じになるように、ALL を使用して正しい総計を作成する数式を定義します。
次の表は、コード セクションに示されている数式を使用して、新しいメジャー All Reseller Sales Ratioを作成した場合の結果を示しています。 このしくみを確認するには、ピボットテーブルの 行ラベル 領域にフィールド CalendarYear を追加し、フィールド ProductCategoryName を 列ラベル 領域に追加します。 次に、ピボット テーブルの 値 領域に、メジャー [All Reseller Sales Ratio] をドラッグします。 結果をパーセンテージで表示するには、Excel の書式設定機能を使用して、メジャーを含むセルにパーセンテージの書式を適用します。
行ラベル | 小物 | バイク | 衣類 | コンポーネント | 総計 |
---|---|---|---|---|---|
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])
数式は次のように構成されます。
numerator
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 でフィルターを保持し、パーセンテージの分母を計算するときに年のフィルターを削除する必要があります。
次の表は、コード セクションに示されている数式を使用して、新しいメジャー Reseller Sales Yearを作成した場合の結果を示しています。 このしくみを確認するには、ピボットテーブルの 行ラベル 領域にフィールド CalendarYear を追加し、フィールド ProductCategoryName を 列ラベル 領域に追加します。 結果をパーセンテージで表示するには、Excel の書式設定機能を使用して、メジャーを含むセルにパーセンテージの数値書式を適用 、Reseller Sales Yearします。
行ラベル | 小物 | バイク | 衣類 | コンポーネント | 総計 |
---|---|---|---|---|---|
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]))
数式は次のように構成されます。
numerator
SUMX(ResellerSales_USD, ResellerSales_USD[SalesAmount_USD])
は、ピボット テーブルの現在のセルのResellerSales_USD[SalesAmount_USD] 内の値の合計であり、CalendarYear 列と ProductCategoryName 列にコンテキスト フィルターが適用されます。分母の場合は、ALL(Column) 関数を使用して CalendarYear の既存のフィルターを削除します。 これにより、列ラベルから既存のコンテキスト フィルターを適用した後、ResellerSales_USD テーブルの残りの行の合計が計算されます。 正味の効果は、分母に対して、選択した ProductCategoryName (暗黙のコンテキスト フィルター) と Year のすべての値に対して合計が計算されるということです。
例 3
年間売上合計に対する製品カテゴリの貢献度の計算
各製品カテゴリの売上の割合を年単位で表示するテーブルを作成するとします。 特定の年の各製品カテゴリの割合を取得するには、その特定の製品カテゴリ (ProductCategoryName) の売上の合計を年 n で計算し、結果の値をすべての製品カテゴリの n 年の売上の合計で除算する必要があります。 つまり、年単位でフィルターを保持し、割合の分母を計算するときに ProductCategoryName のフィルターを削除する必要があります。
次の表は、コード セクションに示す数式を使用して新しいメジャー Reseller Sales CategoryNameを作成した場合の結果を示しています。 このしくみを確認するには、ピボットテーブルの 行ラベル 領域に [CalendarYear] フィールドを追加し、フィールド ProductCategoryName を [列ラベル] 領域に追加します。 次に、ピボットテーブルの 値 領域に新しいメジャーを追加します。 結果をパーセンテージで表示するには、Excel の書式設定機能を使用して、新しいメジャーを含むセルにパーセンテージの書式を適用 、Reseller Sales CategoryNameします。
行ラベル | 小物 | バイク | 衣類 | コンポーネント | 総計 |
---|---|---|---|---|---|
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]))
数式は次のように構成されます。
numerator
SUMX(ResellerSales_USD, ResellerSales_USD[SalesAmount_USD])
は、ピボットテーブル内の現在のセルのResellerSales_USD[SalesAmount_USD] 内の値の合計であり、フィールド CalendarYear と ProductCategoryName にコンテキスト フィルターが適用されます。分母の場合は、関数 ALL(Column) を使用して ProductCategoryName のフィルターを削除し、行ラベルから既存のコンテキスト フィルターを適用した後、ResellerSales_USD テーブルの残りの行の合計を計算します。 正味の効果は、分母に対して、選択した年 (暗黙のコンテキスト フィルター) と ProductCategoryName のすべての値に対して合計が計算されるということです。