ALLNOBLANKROW 関数
リレーションシップの親テーブルから、空白行を除くすべての行を返すか、列内の空白行を除く個別の値すべてを返します。このとき、コンテキスト フィルターはあっても無視されます。
構文
ALLNOBLANKROW(<table>|<column>)
パラメーター
項目 |
定義 |
---|---|
table |
すべてのコンテキスト フィルターを削除する対象のテーブル。 |
column |
すべてのコンテキスト フィルターを削除する対象の列。 |
パラメーターは 1 つのみ渡す必要があります。パラメーターは table または column のいずれかです。
戻り値
渡されたパラメーターが table の場合はテーブル、渡されたパラメーターが column の場合は値の列です。
説明
ALLNOBLANKROW 関数は、リレーションシップの親の列に一致しない値を持つ行が子テーブル内に 1 つ以上あるとき親テーブルに表示される、空白行のみをフィルター処理します。 詳細な説明については、次の例を参照してください。
次の表に、DAX に用意されている ALL のバリエーションと、その違いをまとめます。
関数および使用法 |
説明 |
---|---|
ALL(Column) |
テーブル内の指定された列からすべてのフィルターを除去します。テーブル内の他の列にある他のすべてのフィルターはそのまま適用されます。 |
ALL(Table) |
指定されたテーブルからすべてのフィルターを除去します。 |
ALLEXCEPT(Table,Col1,Col2...) |
指定された列にあるフィルター以外の、テーブル内のすべてのコンテキスト フィルターを無効にします。 |
ALLNOBLANK(table|column) |
リレーションシップの親テーブルから、空白行を除くすべての行を返すか、列内の空白行を除く個別の値すべてを返します。このとき、コンテキスト フィルターはあっても無視されます。 |
ALL 関数の動作の一般的な説明と、ALL(Table) および ALL(Column) を使用する実際の操作手順については、「ALL 関数」を参照してください。
使用例
このサンプル データの ResellerSales_USD テーブルには、値を持たないため、ブック内のリレーションシップで親テーブルのいずれにも関連付けられない行が、1 つ含まれています。 このテーブルをピボットテーブルで使用して、空白行の動作と、関連付けられないデータのカウント処理方法を確認できます。
手順 1: 関連付けられないデータの確認
[PowerPivot ウィンドウ] を開き、ResellerSales_USD テーブルを選択します。 ProductKey 列で空白値をフィルター選択します。 1 行が残ります。 その行では、SalesOrderLineNumber を除くすべての列値が空白です。
手順 2: ピボットテーブルの作成
新しいピボットテーブルを作成し、datetime.[Calendar Year] という列を [行ラベル] ペインにドラッグします。 予想される結果を次の表に示します。
行ラベル |
---|
2005 |
2006 |
2007 |
2008 |
|
総計 |
[2008] と [総計] の間に空白のラベルがあります。 この空白のラベルは、不明なメンバーを表します。不明なメンバーとは、親テーブルのいずれの値とも一致しない子テーブルの値を表すために作成される特別なグループです (この例では datetime.[Calendar Year] 列)。
ピボットテーブルにこの空白のラベルが表示された場合、datetime.[Calendar Year] 列に関連付けられたテーブルの一部に空白値または一致しない値があることがわかります。 空白のラベルは親テーブルに表示されますが、一致しない行は 1 つ以上の子テーブルにあります。
この空白のラベル グループに追加される行は、親テーブルのいずれの値とも一致しない値 (datetime テーブルに存在しない日付など) か、日付の値が存在しないことを意味する NULL 値です。 この例では、子の売上テーブルのすべての列に空白値を含めています。 子テーブルより多くの値が親テーブルにあっても、問題は起きません。
手順 3: ALL および ALLNONBLANK を使用した行数のカウント
Countrows ALLNOBLANK of datetime および Countrows ALL of datetime の 2 つのメジャーを datetime テーブルに追加して、テーブルの行数をカウントします。 これらのメジャーの定義に使用できる数式を、下のコード例に示します。
空のピボットテーブルで、datetime.[Calendar Year] 列を行ラベルに追加します。次に、新しく作成したメジャーを追加します。 結果は以下の表のようになります。
行ラベル |
Countrows ALLNOBLANK of datetime |
Countrows ALL of datetime |
---|---|---|
2005 |
1280 |
1281 |
2006 |
1280 |
1281 |
2007 |
1280 |
1281 |
2008 |
1280 |
1281 |
|
1280 |
1281 |
総計 |
1280 |
1281 |
この結果には、テーブルの行数のカウントに 1 行の違いがあることが示されています。 しかし、[PowerPivot ウィンドウ] を開いて datetime テーブルを選択しても、テーブル内に空白行は見つかりません。この場合の特別な空白行が不明なメンバーであるからです。
手順 4: カウントの正確さの確認
ALLNOBLANKROW が本当の空白行をカウントせず、親テーブルにある特別な空白行のみを処理することを確認するため、Countrows ALLNOBLANKROW of ResellerSales_USD と Countrows ALL of ResellerSales_USD の 2 つのメジャーを ResellerSales_USD テーブルに追加します。
新しいピボットテーブルを作成し、datetime.[Calendar Year] という列を [行ラベル] ペインにドラッグします。 作成したメジャーを追加します。 結果は以下のようになります。
行ラベル |
Countrows ALLNOBLANKROW of ResellerSales_USD |
Countrows ALL of ResellerSales_USD |
---|---|---|
2005 |
60856 |
60856 |
2006 |
60856 |
60856 |
2007 |
60856 |
60856 |
2008 |
60856 |
60856 |
|
60856 |
60856 |
総計 |
60856 |
60856 |
今度は、2 つのメジャーの結果が同じです。 これは、ALLNOBLANKROW 関数が、テーブル内の本当の空白行をカウントせず、リレーションシップの 1 つ以上の子テーブル内に一致しない値または空白値があるときに親テーブルに生成される、特別な空白行のみを処理するからです。
// Countrows ALLNOBLANK of datetime
= COUNTROWS(ALLNOBLANKROW('DateTime'))
// Countrows ALL of datetime
= COUNTROWS(ALL('DateTime'))
// Countrows ALLNOBLANKROW of ResellerSales_USD
=COUNTROWS(ALLNOBLANKROW('ResellerSales_USD'))
// Countrows ALL of ResellerSales_USD
=COUNTROWS(ALL('ResellerSales_USD'))