MDX:计算的度量值使用“where”和“from select”给出不同的结果

MDX:计算的度量值使用“where”和“from select”给出不同的结果,mdx,iccube,Mdx,Iccube,我对2条MDX语句有一个问题,第一条给出了正确的结果,但第二条与预期的不同 由于MDX是动态构建的,所以我宁愿使用第二个 create calculated member [Sejours Ambulatoire] as sum([Ambu].[Ambu].[Ambu].[Ambulatoire], NbSejours) create calculated member [Taux Ambulatoire] as IIF( [Ambu].[Ambu].current is [Ambu].[Amb

我对2条MDX语句有一个问题,第一条给出了正确的结果,但第二条与预期的不同

由于MDX是动态构建的,所以我宁愿使用第二个

create calculated member [Sejours Ambulatoire] as sum([Ambu].[Ambu].[Ambu].[Ambulatoire], NbSejours)
create calculated member [Taux Ambulatoire] as IIF( [Ambu].[Ambu].current is [Ambu].[Ambu].[Non Ambulatoire], 0, divN([Sejours Ambulatoire], [Measures].[NbSejours] , 0)   ), format_string='percent'
第1代码:

select [Measures].[Taux Ambulatoire] on 0
from [Cube]
where  {[Ambu].[Ambu].[Non Ambulatoire]} * {[Etablissement].[Lieu établissement].[All-M].&[CHU de Brest]} * { [Periode].[Periode].[All-M].&[2014] }
-结果0,00%正确

第二代码:

SELECT
 { [Measures].[Taux Ambulatoire] }  ON 0
 FROM ( SELECT
{ [Periode].[Periode].[All-M].&[2014] } ON 0,
{ [Etablissement].[Lieu établissement].[All-M].&[CHU de Brest] } ON 1,
{ [Ambu].[Ambu].[Non Ambulatoire] } ON 2
     FROM [Cube])
-结果120,86%不正确


有人能解释一下区别吗?

不要忘记,在icCube中,您有一个MDX调试器,它将帮助您了解MDX语句的不同部分是如何解决的

问题是如何解决这个表达式:

[Ambu].[Ambu].current
Current未从subselect筛选器定义中获取值。它从其他源获取值:where子句、axis和计算成员中定义的元组

两种可能的解决办法

1将筛选器放在where子句中,而不是放在筛选器中,因此current将返回where子句中定义的元组

2要使IIF工作,可以使用返回子选择和where子句内容的函数

isIn( GetFilterInfo([Ambu].[Ambu]) , [Ambu].[Ambu].[Non Ambulatoire] )

尽管如此,我还是会仔细检查我的陈述。

我尝试了iSinGetFilterInfo的建议

with member [Taux Ambulatoire Test] as iif(isIn( GetFilterInfo([Ambu].[Ambu]) , [Ambu].[Ambu].[Non Ambulatoire] ), 0, divN([Sejours Ambulatoire], [Measures].[NbSejours] , 0)   ), format_string='percent'
SELECT
 { [Measures].[Taux Ambulatoire Test] }  ON 0
, [Ambu].[Ambu] on 1
 FROM ( SELECT
{ [Periode].[Periode].[All-M].&[2014] } ON 0,
{ [Etablissement].[Lieu établissement].[All-M].&[CHU de Brest] } ON 1
--,{ [Ambu].[Ambu].[Non Ambulatoire] } ON 2
     FROM [Cube])
这更有效,但不是在我想得到所有行上的[Ambu].[Ambu]的情况下,我仍然得到120,86%的非抵押贷款

create calculated member [Sejours Ambulatoire] as sum([Ambu].[Ambu].[Ambu].[Ambulatoire], NbSejours)
create calculated member [Sejours NONAmbulatoire] as sum([Ambu].[Ambu].[Ambu].[Non Ambulatoire], NbSejours)
create calculated member [Taux Ambulatoire] as IIF( [Sejours NONAmbulatoire] = [Measures].[NbSejours], 0, divN([Sejours Ambulatoire], [Measures].[NbSejours] , 0)   ), format_string='percent'
我找到的唯一解决方案是为sejoursnanombulatoire创建一个度量。然后[Taux Ambulatoire]正在检查整个选择是否为非燃烧

create calculated member [Sejours Ambulatoire] as sum([Ambu].[Ambu].[Ambu].[Ambulatoire], NbSejours)
create calculated member [Sejours NONAmbulatoire] as sum([Ambu].[Ambu].[Ambu].[Non Ambulatoire], NbSejours)
create calculated member [Taux Ambulatoire] as IIF( [Sejours NONAmbulatoire] = [Measures].[NbSejours], 0, divN([Sejours Ambulatoire], [Measures].[NbSejours] , 0)   ), format_string='percent'

我将在本周末回答,这是MDX的一个复杂问题,即覆盖的层次结构。需要一些时间来适应,在这里定义元组,更改它们的计算方式。您也可以尝试where选项,它更接近于第1个版本