使用动态mdx表达式计算CELL

时间:2014-02-26 01:31:05

标签: ssas mdx olap-cube

我一直在尝试创建一个(有点复杂的?)单元格计算,我需要使用动态公式但不起作用。最后我得到了mdx表达式作为单元格值,这是错误的。这是我的表达:

-----------------------------------------------------------------------
---SET With 2 elements(Sales Fcst(20131223), Sales Fcst(2014))
WITH SET [CategoryFcst] AS 
FILTER([Category].[Category].children, InStr([Category].[Category].CURRENTMEMBER.MEMBER_CAPTION,"Sales Fcst") > 0 )


CELL CALCULATION SalesPlanAch FOR 
                 '([Category].[Category].[Sales Plan Att%], [Measures].[Amount])'   
                   AS 
                   '(StrToMember("' + [CategoryFcst].item(0).UNIQUENAME + '"),[Measures].[Amount] )'


--The formula expression result is: (StrToMember("[Category].[Category].&[29]"),[Measures].[Amount] )



SELECT [Time].[Calendar Time].[Quarter].members on columns,
[Category].[Category].children on rows

from [AllData]
WHERE ([Measures].[Amount])

-----------------------------------------------------------------------

如果我直接将'(StrToMember("[Category].[Category].&[29]"),[Measures].[Amount])'作为单元格计算公式,它就会起作用,但我需要动态计算它。

另外,如果我把'(StrToMember("' + '[Category].[Category].&[29]' + '"),[Measures].[Amount] )'不起作用。它将该字符串设置为单元格值。

这不是真正的细胞计算,而是导致我出现问题的部分。 我很感激任何建议/答案。

祝你好运, 丹尼尔

1 个答案:

答案 0 :(得分:1)

只需使用

'(StrToMember([CategoryFcst].item(0).UNIQUENAME),[Measures].[Amount] )'

据我所知,围绕此表达式引用的必要性归因于Analysis Services as described here的历史记录。并且,如同一篇文章中所述,在Analysis Services的2005版本中,对WITH子句中的成员和集定义进行了更改,但显然不适用于很少使用的单元格计算。因此,这里的引号不是包含字符串的东西,而是或多或少地包含表达式的语法要求。

我实际上不确定如何在此表达式中使用单引号。但是您可以在MDX表达式中使用双引号或单引号来包含字符串。因此,您很少会遇到在这种表达式中绝对需要单引号的必要性。