Sql server 2008 r2 如何使用带有时间维度的Case语句在SSAS中为计算成员编写MDX查询

Sql server 2008 r2 如何使用带有时间维度的Case语句在SSAS中为计算成员编写MDX查询,sql-server-2008-r2,case,ssas,mdx,olap-cube,Sql Server 2008 R2,Case,Ssas,Mdx,Olap Cube,我有一个计算过的成员,使用以下公式: CASE WHEN SUM([Time].[Year].currentmember ,[Measures].[Amount]) > 0 THEN 0 ELSE 1 END 这个计算过的成员可以按照我的意愿工作,但是当我拉一个维度成员,比如名称,即使在通过了一年的过滤器之后,当我通过这个计算过的成员时,它拉所有年份的数据 例如,如果我有2000-2010年的数据,那么当我通过2007年的过滤器时,这个成员会提取所有年份的数据,显示空白

我有一个计算过的成员,使用以下公式:

CASE
  WHEN SUM([Time].[Year].currentmember ,[Measures].[Amount]) > 0 
    THEN 0
  ELSE 1
END
这个计算过的成员可以按照我的意愿工作,但是当我拉一个维度成员,比如名称,即使在通过了一年的过滤器之后,当我通过这个计算过的成员时,它拉所有年份的数据


例如,如果我有2000-2010年的数据,那么当我通过2007年的过滤器时,这个成员会提取所有年份的数据,显示空白值。一旦我删除了这个计算成员,它就可以正常工作了,它只显示2007年的数据。我知道我在MDX中搞砸了,请帮助我谢谢

我想你的答案基本正确,但你需要将
0
换成
null

CASE
  WHEN SUM([Time].[Year].currentmember ,[Measures].[Amount]) > 0 THEN 1
  WHEN SUM([Time].[Year].currentmember ,[Measures].[Amount]) < 0 THEN 0
  ELSE   
    NULL  
END
案例
当总和([Time].[Year].currentmember,[Measures].[Amount])大于0时,则为1
当总和([Time].[Year].currentmember,[Measures].[Amount])小于0时,则为0
其他的
无效的
终止

您是否可以显示查询结果,其中一个符合您的要求,另一个不符合您的要求?我不太清楚你想解决什么问题。谢谢。我不能表示抱歉,但我可以解释我不能表示抱歉,但我可以解释如果我们有2007“dumbradish-100”的值,一旦我拉取计算的成员,它将成为dumbradish-100-1(其中1是计算的成员)。一旦我添加了cacluated成员,它就添加了一行不属于2007的数据,比如“Sampleuser----1”,但Sampleuser不属于2007,这就是为什么也不会提取数据的原因。我的意思是,就像我的多维数据集浏览器一样,这个计算过的成员添加了太多不属于2007年的附加行,它基本上添加了所有年份的所有名称。希望这对我有帮助,我想我明白了。假设在您的示例中,“dumbradissh”和“sampleuser”值属于其他维度。我想这就是我期望你的计算会员的表现。如果“sampleuser”没有2007年的记录,您的计算成员将返回1,因为SSAS作为默认值将把null视为零。因此,您的总和将返回NULL,被视为零,因此您的成员返回1。我猜您希望它返回NULL,这样它就不会出现在您的结果中。创建一个只包含总和而不包含大小写的成员。当我删除该案例时,它是否返回“SampleUser”-0?它的工作方式与我预期的一样,它不会引入属于2007年以外年份的其他值。那么,我应该如何为Case语句修复它,还是应该使用其他东西呢。计算成员是一个度量值,它不属于任何维度或关联的度量值组。这不是我所期望的,如果我这样做,则所有内容都变为1,并且它会在2007年以外的年份提取值。我不希望它拉这些值,逻辑也会断裂。当值大于0时,我希望它显示为1,但现在它变为1blank@AdaPongada-如果你只是交换空值和1呢?这仍然会打破我的条件,因为我希望它显示0为负值。我们的解决方案几乎给了我答案,它不会从其他年份提取名称,但对于负值,它显示为空白,这是空,但我希望它显示为零,只需扩展大小写即可…我已经编辑过,因此当>0时为1,当<0时为0,当0时为空。