Quantcast
Channel: Microsoft SQL Server Japan Support Team Blog
Viewing all articles
Browse latest Browse all 293

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

$
0
0

  

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 を除いた下位データを得ることができます。


Viewing all articles
Browse latest Browse all 293

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>