底数函数

时间:2016-08-25 08:30:52

标签: ssas mdx

SELECT 
  [Measures].[Internet Sales Amount] ON COLUMNS
 ,BottomCount
  (
    NonEmpty([Customer].[Customer].[Customer].MEMBERS)
   ,10
   ,[Measures].[Internet Sales Amount]
  ) ON ROWS
FROM [Adventure Works]
WHERE 
  [Date].[Calendar].[Calendar Year].&[2005];

上面的查询显示了最后10个客户名称为NULL度量值的结果。我正在使用Adventure works Cube。

根据我的理解,“bottomcount”与“mdx”查询中的where子句无法正常工作。我想用测量值获取2005年的最后10个客户名称,希望我在寻找解决方案而不使用关键字“DESCENDANTS”。

如果我遇到错误,请告诉我。

2 个答案:

答案 0 :(得分:1)

尝试一下:

bottomcount(
    nonempty(
        [Customer].[Customer].[Customer].Members
        ,[Measures].[Internet Sales Amount]
    )
    ,10
    ,[Measures].[Internet Sales Amount]
)

您获得的客户名称为NULL,因为在OLAP中您正在进行2维之间的笛卡尔积(度量是一个特殊维度,但它仍然作为一个维度)并不重要,因为你没有有价值它仍将交叉加入你的2套成员,除非你只要求非空的,它仍然会给你NULL。

答案 1 :(得分:1)

如果你想要他们完整的互联网销售额,那么将一些逻辑移到WITH条款中:

WITH 
  SET bot AS 
    NonEmpty
    (
      [Customer].[Customer].[Customer].MEMBERS
     ,(
        [Measures].[Internet Sales Amount]
       ,[Date].[Calendar].[Calendar Year].&[2005]
      )
    ) 
SELECT 
  [Measures].[Internet Sales Amount] ON COLUMNS
 ,BottomCount
  (
    bot
   ,10
   ,[Measures].[Internet Sales Amount]
  ) ON ROWS
FROM [Adventure Works];