SSAS MDX上一年-国家汇总问题

问题描述 投票:0回答:1

我先前对SSAS MDX Previous Year - Ignore Filter的问题已解决。现在我有另一个问题。我现在得到该商店的上一年正确的结果,但是在国家/地区一级的汇总是错误的。

我的问题是我没有得到商店的前一年值,因为过滤器将该值踢了:

商店|实际成交额|上一年度的营业额

汉堡| 100.00 | 120.00

慕尼黑| 140.00 | 130.00

科隆| 90.00 | 110.00

柏林| 150.00 | null

然后我尝试了来自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

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

TOTAL应该是(不莱梅(Bremen)没有一个是“不可比较的”: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]
)

如何仅在国家/地区级别上比较同类商店?

ssas mdx mdx-query analysisservices
1个回答
0
投票

我的理解是,柏林2019年1月是一个特例。您只想忽略过滤器“ [存储状态]。[存储状态类型]。&[可比较]”。对于其余所有内容,您希望过滤器都能正常工作吗?如果是这种情况,请使用下面的查询。但是请确保将正确的值替换为

[日期]。[年-季度-月-日期]。CurrentMember=“ 2020年1月”代替“ 2020年1月”的标题[日期]。[年-季度-月-日期]。[月]。&[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,我的理解是它将所有商店汇总,甚至包括不在德国的商店。基于此了解,您需要使用“ Existing”关键字来强制在上下文中评估此expension。尝试查询下面

 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]
    )
© www.soinside.com 2019 - 2024. All rights reserved.