现有等同于HAVING

时间:2014-05-10 15:42:22

标签: ssas mdx ssms

这有效:

WITH 
    MEMBER [Measures].[CurrentDay] AS
        AGGREGATE( 
            [Date].[Calendar].Currentmember,
            [Measures].[Reseller Sales Amount]
        )
    MEMBER [Measures].[CurrentMonth] AS
        AGGREGATE( 
            [Date].[Calendar].Currentmember.parent,
            [Measures].[Reseller Sales Amount]
        )
SELECT
    NON EMPTY 
    { [Measures].[CurrentDay],
        [Measures].[CurrentMonth] } 
    ON COLUMNS,
    NON EMPTY 
    { [Date].[Calendar].[Date] }
    HAVING [Measures].[CurrentDay]<>null //<<<<<<<<<<<<<<having line
    ON ROWS
From [Adventure Works]

从我拥有的Adventure Works版本中返回以下内容:

enter image description here

如果我注释掉HAVING [Measures].[CurrentDay]<>null行,则会发生这种情况:

enter image description here

是否有另一种方法可以在不使用null的情况下消除CurrentDay HAVING行?

我尝试使用EXISTING但没有取得任何成功:

WITH 
    MEMBER [Measures].[CurrentDay] AS
        AGGREGATE( 
            [Date].[Calendar].Currentmember,
            [Measures].[Reseller Sales Amount]
        )
    MEMBER [Measures].[CurrentMonth] AS
        AGGREGATE( 
            [Date].[Calendar].Currentmember.parent,
            [Measures].[Reseller Sales Amount]
        )
SELECT
    NON EMPTY 
    { [Measures].[CurrentDay],
        [Measures].[CurrentMonth] } 
    ON COLUMNS,
    NON EMPTY 
    { EXISTING [Date].[Calendar].[Date] }
    ON ROWS
From [Adventure Works]

编辑

要在SSMS中运行nsousa的解决方案,我需要像这样嵌套IIF

WITH 
    MEMBER [Measures].[CurrentDay] AS
        AGGREGATE( 
            [Date].[Calendar].Currentmember,
            [Measures].[Reseller Sales Amount]
        )
    MEMBER [Measures].[CurrentMonth] AS
        IIF(
            ISEMPTY([Measures].[CurrentDay]),
            NULL,
            AGGREGATE( 
                [Date].[Calendar].Currentmember.parent,
                [Measures].[Reseller Sales Amount]
                )
        )
SELECT
    NON EMPTY 
    { [Measures].[CurrentDay],
        [Measures].[CurrentMonth] } 
    ON COLUMNS,
    NON EMPTY 
    { [Date].[Calendar].[Date] }
    ON ROWS
From [Adventure Works]

1 个答案:

答案 0 :(得分:1)

您可以重新定义您的指标:

WITH
    MEMBER [Measure].[Not Null Reseller Sales Amount] AS
        IIF( IsEmpty( [Measures].[Reseller Sales Amount] ), 0, [Measures].[Reseller Sales Amount] )
    MEMBER [Measures].[CurrentDay] AS
        AGGREGATE( 
            [Date].[Calendar].Currentmember,
            [Measures].[Not Null Reseller Sales Amount]
        )
    MEMBER [Measures].[CurrentMonth] AS
        AGGREGATE( 
            [Date].[Calendar].Currentmember.parent,
            [Measures].[Not Null Reseller Sales Amount]
        )
SELECT
    NON EMPTY 
    { [Measures].[CurrentDay],
        [Measures].[CurrentMonth] } 
    ON COLUMNS,
    NON EMPTY 
    { [Date].[Calendar].[Date] }
    ON ROWS
From [Adventure Works]