如果在MDX语句中声明

时间:2017-08-22 17:00:59

标签: excel mdx powerquery

在Excel Powerquery中,我有一个MDX语句来查询分析服务。我尝试引入一个iif函数(我理解它应该像if / else语句一样工作),但它只是过滤结果。

以下是出于可读性和隐私原因而缩短的MDX声明示例:

   SELECT NON EMPTY { [Measures].[Revenue] } ON COLUMNS, NON EMPTY { (
    [Account Information].[Name].[Name].ALLMEMBERS 
    * ........ 
    * iif([Service].[Level 3] = [Service].[Level 3].[Linux],[Service].[Level 3].[Linux], [Service].[Level 2]) ) } 
DIMENSION PROPERTIES MEMBER_CAPTION,MEMBER_UNIQUE_NAME ON ROWS FROM ( SELECT ( { 
[Geography].[Subsidiary].&[France] } ) 
ON COLUMNS FROM ( SELECT ( { [Calendar].[Fiscal Date Hierarchy].[Fiscal Semester].&[FY18-H1] } ) 
ON COLUMNS FROM [Model])) WHERE ( [Calendar].[Fiscal Date Hierarchy].[Fiscal Semester].&[FY18-H1], [Geography].[Subsidiary].&[France] ) 
CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS

现在的结果是所有行都在 [服务]上进行过滤。[等级3]。[Linux]

我想要的结果是,如果适用于该行, [linux] 会添加一列 [Service] 。[等级2] 在所有其他情况下。

1 个答案:

答案 0 :(得分:0)

这对我来说似乎不正确:

iif(
  [Service].[Level 3] = [Service].[Level 3].[Linux]
 ,[Service].[Level 3].[Linux]
 ,[Service].[Level 2]
)

如果您要比较mdx中的成员是否相等,那么请使用IS运算符而不是=

iif(
  [Service].[Level 3] IS [Service].[Level 3].[Linux]
 ,[Service].[Level 3].[Linux]
 ,[Service].[Level 2]
)

但是这个条件[Service].[Level 3] IS [Service].[Level 3].[Linux]将始终返回False,因此您可能需要通过CURRENTMEMBER函数使用上下文:

iif(
  [Service].CURRENTMEMBER IS [Service].[Level 3].[Linux]
 ,[Service].[Level 3].[Linux]
 ,[Service].[Level 2]
)

但我仍然不知道这是怎么回事on rows ......没什么帮助

为什么你不能给我们所有的查询?!标有* ........ *的部分无法帮助我们