NonEmptyCount
EssbaseのMDX NonEmptyCount()関数は、#Missing以外の値に評価される、セット内のタプルのカウント数を返します。数値式が指定されている場合、式はすべてのタプルのコンテキストで評価され、#MISSING以外の値のカウントが返されます。
集約ストレージ(ASO)キューブでは、NonEmptyCount()が最適化されているため、キューブを1回のみスキャンすることで、すべてのセルの個別カウントの計算を実行できます。この最適化を行わないと、データベースは、個別のカウントに対応するセルの数と同じ回数スキャンされます。NONEMPTYCOUNT最適化は、アウトライン・メンバー式の構文が次の場合にトリガーされます。
NONEMPTYCOUNT(set, measure, exclude_missing)
構文
NonEmptyCount ( set [,numeric_value_expression [, exclude_missing ]] )
パラメータ
- set
-
タプルをカウントするセット。
- numeric_value_expression
-
オプション。数値または数値を返す式。MDX文法ルールを参照してください。
- exclude_missing
-
オプション。SetのメンバーのMeasure値が欠落している場合(Setは格納されたディメンションの1次元セット、Measureは格納されたメジャー)に、返されるカウント値が欠落していることを示すフラグ。
exclude_missingパラメータは、個別のカウント計算を実行するメトリックを問い合せる問合せのパフォーマンスを向上させることにより、ASOキューブでのNonEmptyCountの最適化をサポートします。次の例2を参照してください。
デフォルトでは、SetのすべてのメンバーのMeasure値が欠落している場合、ゼロの値が返されます。
例1
次のMDX問合せ:
With
Member [Measures].[Number Of Markets]
as 'NonEmptyCount (Market.Levels(0).Members, Sales)'
Select
{[Measures].[Number Of Markets]} on Columns,
{[100].Children, [200].Children} on Rows
FROM Sample.Basic
次の出力を返します:
表4-117 MDX例からの出力グリッド
(軸) | Number of Markets |
---|---|
100-10 | 20 |
100-20 | 16 |
100-30 | 8 |
200-10 | 20 |
200-20 | 17 |
200-30 | 9 |
200-40 | 3 |
例2
ASOキューブでは、エンティティ(顧客や製品など)の個別の数をカウントするのが一般的です。数式メンバーまたは計算メンバーを定義することにより、個別のカウントを実行できます。たとえば、数式メンバー[DistinctCustomerCnt]
を追加し、次の数式を使用して、Productを購入した個別の顧客の数を計算できます:
NONEMPTYCOUNT(Customer.Levels(0).Members, [Units])
次のMDX問合せは、Productsの数と同じ回数だけデータベースをスキャンし、各Productの個別の顧客数を個別に評価します。
SELECT
{[DistinctCustomerCnt]} on COLUMNS,
Products.Levels(0).Members on ROWS