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

时间:2016-04-04 09:05:29

标签: sql-server ssas mdx cube

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

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

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

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

使用此查询,当我使用多个值或每个值只有一个值时,它可以正常工作。 但我希望当参数的值为null时,查询返回参数的所有值。我已经测试了ISEMPTY(@param),ISEMPTY(STRTOSET(@param)),...但是这会返回错误:

  

预计会有mdx表达式。指定了一个空表达式。

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

   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()

1 个答案:

答案 0 :(得分:1)

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

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

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

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

strToSet(NULL)

因此,如果在您的客户端中,您希望NULL表示所有成员,那么您需要将NULL转换为字符串“[AgeClassCode]。[AgeClassCode] .members”,然后才能点击strToSet