我先前对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]
)
如何仅在国家/地区级别上比较同类商店?
我的理解是,柏林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]
)