MDX MAX运算符导致在Dimension上查询999/99999

时间:2015-02-02 10:24:17

标签: sql-server-2008-r2 mdx ssas-2008

我的维度的以下MDX查询返回值999/99999,具体取决于维度中的成员数。

WITH MEMBER [Measures].[MaxKey] AS
   MAX(
     [Fare Media].[Fare Media Id].ALLMEMBERS
   , [Fare Media].[Fare Media Id].currentmember.MEMBER_KEY)
 SELECT
   {[Measures].[MaxKey]} ON 0
 FROM
   [SPCube]

这给了我99999的结果,但实际上我的维度中的值大于此值,成员总数为640,000。

将相同的逻辑应用于多维数据集中的另一个维度,如下所示:

WITH MEMBER [Measures].[MaxKey] AS
   MAX(
     [Sales Period].[Sales Period Id].ALLMEMBERS
   , [Sales Period].[Sales Period Id].currentmember.MEMBER_KEY)
 SELECT
   {[Measures].[MaxKey]} ON 0
 FROM
   [SPCube]

我获得的答案是999作为最大值,但总成员是675,其中我的Id大于999。

我尝试应用StrToValue函数,但后来收到错误说:

  

预计会有MDX表达。指定了一个空表达式。

1 个答案:

答案 0 :(得分:1)

这是否会让您更接近您的期望?

 WITH 
   SET [X] AS {[Fare Media].[Fare Media Id].MEMBERS}
   MEMBER [Measures].[KeyMeasure] AS
     [Fare Media].[Fare Media Id].currentmember.MEMBER_KEY
   MEMBER [Measures].[MaxKey] AS
     MAX([X],[Measures].[KeyMeasure])
 SELECT
   [Measures].[MaxKey] ON 0
 FROM
   [dsvAfmsDWH_ServiceProviderCube]

然后你可以合并:

 WITH 
   SET [X] AS {[Fare Media].[Fare Media Id].MEMBERS}
   MEMBER [Measures].[MaxKey] AS
     MAX([X],[Fare Media].[Fare Media Id].currentmember.MEMBER_KEY)
 SELECT
   [Measures].[MaxKey] ON 0
 FROM
   [dsvAfmsDWH_ServiceProviderCube]

set X在脚本的其余部分之前完成,因此将其拆分应该会有所帮助。自定义集始终在自定义度量之前进行评估,因此度量集现在知道要使用的集合。


修改

由于我无法看到你的立方体,我在AdvWrks

上进行了一些测试

这是脚本中错误的简化版本:

WITH 
  MEMBER [Measures].[x] AS 
    [Customer].[Customer].CurrentMember.Member_Key 
SELECT 
  {[Measures].[x]} ON 0
 ,[Customer].[Customer].CurrentMember ON 1
FROM [Adventure Works];

这将返回默认成员"所有客户"我认为这对应于你的9999?

enter image description here

如果我然后扩展到类似我的第一个表达式,那么我们就有了这个:

WITH 
  SET [s] AS 
    [Customer].[Customer].MEMBERS 
  MEMBER [Measures].[KeyMeasure] AS 
    [Customer].[Customer].CurrentMember.Member_Key 
  MEMBER [Measures].[maxX] AS 
    Max
    (
      [s]
     ,[Measures].[KeyMeasure]
    ) 
SELECT 
  [Measures].[maxX] ON 0
FROM [Adventure Works];

返回更好的结果,没有您添加到评论中的错误。

enter image description here

如果我简化到相当于我的第二个脚本,我有以下内容:

WITH 
  SET [s] AS {[Customer].[Customer].MEMBERS}
  MEMBER [Measures].[maxX] AS 
    Max
    (
      [s]
     ,[Customer].[Customer].CurrentMember.Member_Key 
    ) 
SELECT 
  [Measures].[maxX] ON 0
FROM [Adventure Works];

结果没有问题:

enter image description here

重要

什么数据类型是层次结构[Fare Media].[Fare Media Id]的关键属性?如果它不是数字,则MAX将无效。