NULL データが含まれる場合の MDX 関数 BOTTOMCOUNT 使用の注意事項


 

SQL Server Developer Support チーム

 

概要

 

 

SQL Server Analysis Services のキューブデータには、データソースとなるデータに依存し、メジャーに NULL データを含む場合があります。
MDX 関数に BOTTOMCOUNT という関数があり、これは、指定した項目を並べ替え、下位から指定した件数分のデータを取得するという関数です。

 

この関数を利用した場合に NULL データが含まれていると、並べ替えの結果、NULL が下位となり NULL のデータを優先して返すこととなり、想定しない結果が返ったと感じる場合があります。

 

データ例
弊社 Adventure Works DW サンプルデータベースを基に、BOTTOMCOUNT を利用し、メジャーの Internet Sales Amount が最下位 3 つの [Product].[SubCategory] を返却する方法を案内します。

[Product].[SubCategory] 別の Internet Sales Amount は以下の通り、NULL を含むレコードが含まれています。

 

clip_image001

上記から、NULL でない値を保持する最下位 3 位の [Product].[SubCategory] は次の通り、 Socks, Cleaners, Caps の 3 つです。 

clip_image002

次の結果の通り、NULL が最下位 3 つのレコードと認識されるため、NULL のレコードを保持する [Product].[SubCategory] が返されます。

-- 式

SELECT

{[Measures].[Internet Sales Amount]} ON COLUMNS,

BOTTOMCOUNT(

[Product].[Subcategory].Members

,3

, [Measures].[Internet Sales Amount]

) ON ROWS

FROM

[Adventure Works]

 

-- 結果

clip_image003

対処方法

MDX 関数の BOTTOMCOUNT を利用し、セットを指定した値で昇順に並び替える際、NULL となる値を FILTER する必要があります。

実装例 

NULL を排除するように、FILTER した場合、NULL のレコードを保持する [Product].[SubCategory] は排除されるため、NULL でない値を保持する最下位 3 位の [Product].[SubCategory] である、 Socks, Cleaners, Caps の 3 つが返されます。 

-- 式

SELECT

{[Measures].[Internet Sales Amount]} ON COLUMNS,

BOTTOMCOUNT(

FILTER([Product].[Subcategory].Members,

NOT ISEMPTY([Measures].[Internet Sales Amount]))

                ,3

                , [Measures].[Internet Sales Amount]

) ON ROWS

FROM       

[Adventure Works]

-- 結果

clip_image004

 

NULL を Filter した結果、NULL を除いた下位データを得ることができます。

Comments (0)

Skip to main content