0

我之前对 SSAS MDX 上一年的问题 - 忽略过滤器 已解决。现在我有另一个问题。我现在得到了商店上一年的正确结果,但国家层面的聚合是错误的。

我的问题是我没有得到商店上一年的值,因为过滤器踢了那个值:

商店 | 实际营业额 | 营业额上年

汉堡 | 100.00 | 120.00

慕尼黑 | 140.00 | 130.00

科隆 | 90.00 | 110.00

柏林 | 150.00 | 无效的

然后我从 MoazRub 尝试了这个查询:

with 
member [Measures].[Turnover PrevYear] as 
IIF( IsEmpty([Measures].[Turnover Actual] ), 
    NULL,   
    SUM(      
       ([Store Status].[Store Status Type].defaultmember, ParallelPeriod( [Date].[Year - Quarter - Month - Date].[Year],1,[Date].[Year - Quarter - Month - Date].CurrentMember))
       ,   [Measures].[Turnover Actual]
       ) 
    )
Select  
non empty{[Measures].[Turnover Actual],[Measures].[Turnover PrevYear]} 
on Columns,
non empty{[Store].[Store].[Store].members}
on Rows
from [Sales Cube]
where (
[Date].[Year - Quarter - Month - Date].[Month].&[2020]&[1], 
[Store Status].[Store Status Type].&[Comparable], 
[Store].[Country].[Country].&[GERMANY]
)

我在商店级别得到了正确的结果:

商店 | 实际营业额 | 营业额上年

汉堡 | 100.00 | 120.00

慕尼黑 | 140.00 | 130.00

科隆 | 90.00 | 110.00

柏林 | 150.00 | 120.00

在国家一级,我得到了一个错误的 SUM,因为现在在 2020 年 1 月“不可比”的另一家商店“不来梅”包含在总和中。

TOTAL 应该是(不包括不来梅,哪个是“不可比较”:460.00

总“情况”:580.00(包括不来梅)

国家级查询:

with 
member [Measures].[Turnover PrevYear] as 
IIF( IsEmpty([Measures].[Turnover Actual] ), 
    NULL,   
    SUM(      
       ([Store Status].[Store Status Type].defaultmember, ParallelPeriod( [Date].[Year - Quarter - Month - Date].[Year],1,[Date].[Year - Quarter - Month - Date].CurrentMember))
       ,   [Measures].[Turnover Actual]
       ) 
    )
Select  
non empty{[Measures].[Turnover Actual],[Measures].[Turnover PrevYear]} 
on Columns,
non empty{[Store].[Country].[Country].&[GERMANY]}
on Rows
from [Sales Cube]
where (
[Date].[Year - Quarter - Month - Date].[Month].&[2020]&[1], 
[Store Status].[Store Status Type].&[Comparable]
)

我如何才能仅对可比商店进行国家级汇总?

4

1 回答 1

0

我的理解是 2019 年 1 月的柏林是一个特例。您只想忽略过滤器“[Store Status].[Store Status Type].&[Comparable]”一次。对于所有其余部分,您希望过滤器工作吗?如果是这种情况,请使用下面的查询。但是请确保您将正确的值替换为

[Date].[Year - Quarter - Month - Date].CurrentMember="January 2020" 使用 [Date].[Year - Quarter - Month - Date].[Month].& [2020]&[1]

with 
member [Measures].[Turnover PrevYear] as 
IIF( IsEmpty([Measures].[Turnover Actual] ), 
    NULL,   
    case when [Store].[Store].currentmember= "Berlin" and [Date].[Year - Quarter - Month - Date].CurrentMember="January 2020"
    then 
    SUM(      
       ([Store Status].[Store Status Type].defaultmember, ParallelPeriod( [Date].[Year - Quarter - Month - Date].[Year],1,[Date].[Year - Quarter - Month - Date].CurrentMember))
       ,   [Measures].[Turnover Actual]
       ) 
     else 
     SUM(      
       ( ParallelPeriod( [Date].[Year - Quarter - Month - Date].[Year],1,[Date].[Year - Quarter - Month - Date].CurrentMember))
       ,   [Measures].[Turnover Actual]
       )
       end 
    )
Select  
non empty{[Measures].[Turnover Actual],[Measures].[Turnover PrevYear]} 
on Columns,
non empty{[Store].[Store].[Store].members}
on Rows
from [Sales Cube]
where (
[Date].[Year - Quarter - Month - Date].[Month].&[2020]&[1], 
[Store Status].[Store Status Type].&[Comparable], 
[Store].[Country].[Country].&[GERMANY]
)

根据提供的excel,我的理解是它总结了所有商店,甚至那些不在德国的商店。基于这种理解,您需要在上下文中使用“现有”关键字来强制评估这个expersion。试试下面的查询

 with 
    member [Measures].[Turnover PrevYear] as 
    IIF( IsEmpty([Measures].[Turnover Actual] ), 
        NULL,   
        SUM( existing     
           ([Store Status].[Store Status Type].defaultmember, ParallelPeriod( [Date].[Year - Quarter - Month - Date].[Year],1,[Date].[Year - Quarter - Month - Date].CurrentMember))
           ,   [Measures].[Turnover Actual]
           ) 
        )
    Select  
    non empty{[Measures].[Turnover Actual],[Measures].[Turnover PrevYear]} 
    on Columns,
    non empty{[Store].[Country].[Country].&[GERMANY]}
    on Rows
    from [Sales Cube]
    where (
    [Date].[Year - Quarter - Month - Date].[Month].&[2020]&[1], 
    [Store Status].[Store Status Type].&[Comparable]
    )
于 2020-03-06T20:01:48.820 回答