具有多个值和空值的参数的 MDX 查询

MDX Query with parameters with multiples values and null value

我使用 SSAS Cube 和 Datazen(仪表板创建器)。我有一个带有 3 个参数的数据视图(对于 valueCode 'AZE'):

AgeClassCode: 'AGE01', 'AGE02', 'AGE03', ...

StatutCode: 'A', 'B', 'C', 'D', ...

NiveauCode: 'X', 'Y', 'W', ...

对于此查询,当我使用多个值或每个值只使用一个值时,它会起作用。 但我希望在参数值为空时查询 returns 参数的所有值。我已经测试了 ISEMPTY(@param)、ISEMPTY(STRTOSET(@param)),...但是 returns 这个错误:

An mdx expression was expected. An empty expression was specified.

此查询适用于一个或多个值:

   SELECT 
   NON EMPTY 
   { 
        [Measures].[Value], [Measures].[PreviousValueYear], [Measures].[PreviousValueReportMonth] 
   } ON COLUMNS, 
   NON EMPTY 
   { 
        NONEMPTY
        (
            [EntiteFederal].[ServiceCode].[ServiceCode].ALLMEMBERS *
            [EntiteFederal].[EntiteCode].[EntiteCode].ALLMEMBERS *
            [ReportMonth].[ReportMonth].[ReportMonth].ALLMEMBERS *
            [T].[Year].[Year].ALLMEMBERS 
        ) 
    } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS 
    FROM
    ( 
            SELECT ( { [ValueType].[ValueCode].&[AZE] } ) ON COLUMNS 
            FROM (
                    SELECT ( STRTOSET('{{ @AgeClassCode }}') ) ON COLUMNS 
                    FROM ( 
                            SELECT ( STRTOSET('{{ @NiveauCode }}') ) ON COLUMNS 
                            FROM 
                            ( 
                                SELECT ( (STRTOSET('{{ @StatutCode }}') ) ON COLUMNS 
                                FROM [MyCube]
                            )
                        )
                )
    )                       
    WHERE 
    ( 

        IIF( STRTOSET('{{ @StatutCode }}').Count = 1, STRTOSET('{{ @StatutCode }}'), [Statut].[StatutCode].currentmember ),
        IIF( STRTOSET('{{ @NiveauCode }}').Count = 1, STRTOSET('{{ @NiveauCode }}'), [Niveau].[NiveauCode].currentmember ),
        IIF( STRTOSET('{{ @AgeClassCode }}').Count = 1, STRTOSET('{{ @AgeClassCode }}'), [AgeClass].[AgeClassCode].currentmember ),
        [ValueType].[ValueCode].&[AZE]
     )

我需要更改什么?

编辑:

测试 strtoset()

,好的解决方案是

isError()

当使用 strToSetstrToMember 时,您需要提供一个代表有效 mdx 的字符串,例如这些都可以:

strToSet("[AgeClassCode].[AgeClassCode].members")

strToMember("[AgeClassCode].[AgeClassCode].[AGE01]") 

这无效,因为 NULL 不是字符串,也不是表示 mdx 的东西:

strToSet(NULL)

因此,如果在您的客户端中您希望 NULL 代表所有成员,那么您需要以某种方式将 NULL 转换为字符串“[AgeClassCode].[AgeClassCode].members”,然后才能到达 strToSet