SQL Server Developer Support チーム
概要
MDX 関数の BOTTOMCOUNT を利用し、セットを指定した値で昇順に並び替える際、NULL となる値を FILTER する必要があります。
対処方法
前提
弊社 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 を排除しない場合
次の結果の通り、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] |
-- NULL を排除する場合
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] |
以上の通りです。