ALLNOBLANKROW
リレーションシップの親テーブルから、空白行を除くすべての行、または空白行を除く列のすべての個別値を返し、存在する可能性のあるコンテキスト フィルターをすべて無視します。
構文
ALLNOBLANKROW( {<table> | <column>[, <column>[, <column>[,…]]]} )
パラメーター
用語 | 定義 |
---|---|
テーブル | すべてのコンテキスト フィルターが削除されるテーブル。 |
列 | すべてのコンテキスト フィルターが削除される列。 |
パラメーターは 1 つだけ渡す必要があります。パラメーターは、テーブルまたは列のいずれかです。
戻り値
渡されたパラメーターがテーブルの場合はテーブル、渡されたパラメーターが列の場合は値の列。
解説
ALLNOBLANKROW 関数は、親テーブルが、リレーションシップ内で、親列に一致しない値を持つ行が子テーブルに 1 つ以上ある場合に表示する空白行のみをフィルター処理します。 詳細については、次の例を参照してください。
次の表は、DAX で提供される ALL のバリエーションとその違いをまとめたものです。
関数と使用法 Description ALL(Column) テーブル内の指定された列からすべてのフィルターを削除します。その他の列に対しては、テーブル内の他のすべてのフィルターが引き続き適用されます。 ALL(Table) 指定されたテーブルからすべてのフィルターを削除します。 ALLEXCEPT(Table,Col1,Col2...) 指定された列を除き、テーブル内のすべてのコンテキスト フィルターをオーバーライドします。 ALLNOBLANK(table|column) リレーションシップの親テーブルから、空白行を除くすべての行、または空白行を除く列のすべての個別値を返し、存在する可能性のあるコンテキスト フィルターをすべて無視します ALL 関数の動作についての一般的な説明と、ALL(Table) と ALL(Column) を使用するステップバイステップの例については、ALL 関数に関する記事を参照してください。
この関数は、計算列または行レベルのセキュリティ (RLS) ルールで使用される場合、DirectQuery モードでの使用はサポートされません。
例
サンプル データの ResellerSales_USD テーブルには、値がないためにブック内のリレーションシップのどの親テーブルにも関連付けることができない行が 1 行含まれています。 このテーブルをピボットテーブルで使用して、空白行の動作と、関連付けのないデータのカウントを処理する方法を確認できます。
手順 1:関連付けのないデータを確認する
Power Pivot ウィンドウを開き、ResellerSales_USD テーブルを選択します。 ProductKey 列で、空白の値をフィルター処理します。 1 行のみ表示されます。 その行では、Salesorderlinenumber を除く、すべての列の値が空白である必要があります。
手順 2:ピボットテーブルを作成する
新しいピボットテーブルを作成し、datetime.[暦年] 列を [行ラベル] ウィンドウにドラッグします。 次のテーブルは、予想される結果を示しています。
行ラベル |
---|
2005 |
2006 |
2007 |
2008 |
総計 |
2008 と総計の間に空白のラベルがあることに気付きます。 この空白のラベルは、不明なメンバーを表します。これは、子テーブルのいずれの値も親テーブル内の値 (この例では datetime.[暦年] 列) と一致しないことを示すために作成された特別なグループです。
この空白のラベルがピボットテーブルに表示されると、datetime.[暦年] 列に関連付けられているテーブルの一部に、空白値または一致しない値があることがわかります。 親テーブルは空白のラベルを表示しますが、一致しない行は 1 つ以上の子テーブル内にあります。
この空白のラベル グループに追加される行は、親テーブルのいずれの値とも一致しない値 (たとえば、日付/時刻テーブルに存在しない日付)、または null 値 (日付の値が存在しない) のいずれかです。 この例では、子売上テーブルのすべての列に空白の値を配置しています。 親テーブルに子テーブルよりも多くの値がある場合は、問題は発生しません。
手順 3:ALL および ALLNOBLANK を使用して行数をカウントする
次の 2 つのメジャーを日付/時刻テーブルに追加して、テーブルの行をカウントします:日付/時刻の ALLNOBLANK の行カウントと日付/時刻の ALL の行カウント。 これらのメジャーの定義に使用できる式は次のとおりです。
// 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'))
空のピボットテーブルで、datetime.[暦年] 列を行ラベルに追加し、新しく作成したメジャーを追加します。 結果は次の表のようになります。
行ラベル | 日付/時刻の ALLNOBLANK の行カウント | 日付/時刻の ALL の行カウント |
---|---|---|
2005 | 1280 | 1281 |
2006 | 1280 | 1281 |
2007 | 1280 | 1281 |
2008 | 1280 | 1281 |
1280 | 1281 | |
総計 | 1280 | 1281 |
結果は、テーブル行数に 1 行の差があることを示しています。 ところが、Power Pivot ウィンドウを開いて日付/時刻テーブルを選択した場合、ここに示されている特殊な空白行が不明なメンバーであるため、テーブル内に空白行が見つかりません。
手順 4.カウントが正確であることを確認する
ALLNOBLANKROW では真の空白行がカウントされず、親テーブルの特殊な空白行のみを処理することを証明するために、次の 2 つのメジャーを ResellerSales_USD テーブルに追加します:ResellerSales_USD の ALLNOBLANKROW の行カウント、すべての ResellerSales_USD の ALL の行カウント。
新しいピボットテーブルを作成し、datetime.[暦年] 列を [行ラベル] ウィンドウにドラッグします。 作成したメジャーをここで追加します。 結果は次のようになります。
行ラベル | ResellerSales_USD の ALLNOBLANKROW の行カウント | ResellerSales_USD の ALL の行カウント |
---|---|---|
2005 | 60856 | 60856 |
2006 | 60856 | 60856 |
2007 | 60856 | 60856 |
2008 | 60856 | 60856 |
60856 | 60856 | |
総計 | 60856 | 60856 |
今度は、2 つのメジャーの結果が同じになりました。 これは、ALLNOBLANKROW 関数では、リレーションシップの 1 つ以上の子テーブルに一致しない値または空白値が含まれる場合に、テーブル内の真の空白行をカウントせず、親テーブルで生成された特殊なケースである空白行のみを処理するためです。