Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
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 を含むレコードが含まれています。
上記から、NULL でない値を保持する最下位 3 位の [Product].[SubCategory] は次の通り、 Socks, Cleaners, Caps の 3 つです。
次の結果の通り、NULL が最下位 3 つのレコードと認識されるため、NULL のレコードを保持する [Product].[SubCategory] が返されます。
-- 式
SELECT {[Measures].[Internet Sales Amount]} ON COLUMNS,BOTTOMCOUNT([Product].[Subcategory].Members ,3, [Measures].[Internet Sales Amount]) ON ROWSFROM[Adventure Works] |
対処方法
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] |
NULL を Filter した結果、NULL を除いた下位データを得ることができます。