Reporting services MDX:查找特定年份和上一年的两周指定日期范围的销售值
我正在创建一个数据集,在该数据集中,我最终希望比较特定年份(2014年)的特定两周日期范围和前一年的相同周数(即,到指定日期范围的最后一个日期为止的两周) 到目前为止,我所做的是创建查询以查找指定两周日期范围的相关数据,如下所示:Reporting services MDX:查找特定年份和上一年的两周指定日期范围的销售值,reporting-services,ssas,mdx,Reporting Services,Ssas,Mdx,我正在创建一个数据集,在该数据集中,我最终希望比较特定年份(2014年)的特定两周日期范围和前一年的相同周数(即,到指定日期范围的最后一个日期为止的两周) 到目前为止,我所做的是创建查询以查找指定两周日期范围的相关数据,如下所示: SELECT NON EMPTY { [Measures].[Quantity], [Measures].[Total Price] ,[Measures].[Contribution Margin], [Measures].[Profit Margi
SELECT NON EMPTY {
[Measures].[Quantity], [Measures].[Total Price]
,[Measures].[Contribution Margin], [Measures].[Profit Margin]
} ON COLUMNS,
NON EMPTY {
( [Dim Date].[Calender].[Date].[2014-11-20]:[Dim Date].[Calender].[Date].[2014-11-30]
,[Dim Store2].[Store Key].&[1024] )
} on rows
from [DSV_FactStoreSales 1]
我不明白我是如何得到与前一年相同的时期的。我已经看过了ParallelPeriod
,但是我看到的示例包括currentmember
,但是在这个示例中,我有一个指定的范围,跨越两周
有人知道如何实现这一点吗?我需要它在同一个查询中,以便能够将结果集用作SSRS中的数据集
编辑
我运行了查询:
SELECT NON EMPTY {
[Measures].[Quantity]
,[Measures].[Total Price]
,[Measures].[Contribution Margin]
,[Measures].[Profit Margin]
} ON COLUMNS,
NON EMPTY
{
(
parallelperiod([Dim Date].[Calender].[Year],1,[Dim Date].[Calender].[Date].[2014-11-17])
:
parallelperiod([Dim Date].[Calender].[Year],1,[Dim Date].[Calender].[Date].[2014-11-30]),[Dim Store2].[Store Key].&[1024]
)
} on rows
from [DSV_FactStoreSales 1]
但它给了我一个结果集:
Quantity Total Price Contribution Margin Profit Margin
2014-11-07 1024 1 119.2 47.04 39.46%
2014-11-10 1024 1 31.6 21.1 66.77%
2014-11-25 1024 1 55.2 25.45 46.11%
2014-11-26 1024 2 110.8 65.78 59.37%
2014-11-28 1024 166 20903.62 9101.82 43.54%
2014-11-29 1024 117 11870.75 5535 46.63%
2014-11-30 1024 50 9148.8 4008.13 43.81%
2014-12-01 1024 91 11574.39 4933.01 42.62%
2014-12-02 1024 21 2776.8 1254.12 45.16%
与追求的效果相比,日期似乎特别不合适
编辑2
我试过这个问题
Select Non empty {[Measures].[Total Price]} on 0,
([Dim Date].[Calender].[Date].members) on 1
FROM (Select
{
(parallelperiod([Dim Date].[Calender].[Month],4,[Dim Date].[Calender].[Date].[2014-11-22])
:parallelperiod([Dim Date].[Calender].[mONTH],4,[Dim Date].[Calender].[Date].[2014-14-28]), [Dim Store2].[Store Key].&[1041])
} on columns
from [DSV_FactStoreSales 1])
但结果显示了从2014-07-26
到2018-05-02
的销售额。可能存在一些底层层次结构错误,或者我误解了ParallelPeriod()
请注意
在上一个示例查询中,我在月份
做了一些测试
编辑3“使用成员方法”
我还尝试了建议的解决方案,以成员身份调用,如下所示:
With
Member [Measures].[QuantityParallelPeriod] as
(
ParallelPeriod([Dim Date].[Calender].[Year],1,[Dim Date].[Calender].CurrentMember),
[Measures].[Quantity]
)
Select Non empty {[Measures].[QuantityParallelPeriod],[Measures].[Total Price]} on 0,
non empty{([Dim Date].[Calender].[Date].members)} on 1
FROM (Select
{
(parallelperiod([Dim Date].[Calender].[MOnth],4,[Dim Date].[Calender].[Date].[2014-11-22])
:parallelperiod([Dim Date].[Calender].[MOnth],4,[Dim Date].[Calender].[Date].[2014-11-28]), [Dim Store2].[Store Key].&[1024])
} on columns
from [DSV_FactStoreSales 1])
但结果是
Quantity
Parallel
Period Total Price
2014-11-07 (null) 119.2
2014-11-10 (null) 31.6
2014-11-25 (null) 55.2
2014-11-26 (null) 110.8
2014-11-28 (null) 20903.62
2014-11-29 (null) 11870.75
2014-11-30 (null) 9148.8
2014-12-01 (null) 11574.39
2014-12-02 (null) 2776.8
2015-11-13 1 (null)
2015-11-16 1 (null)
2015-12-01 91 (null)
2015-12-02 21 (null)
我不明白为什么只有日期在指定的parallelperiod范围之外
才会返回值
编辑预期输出
我期望的输出是:
Quantity TotalPrice Contribution margin ProfitMargin
2013-11-17 4 5 13 23 %
2013-11-18 4 5 15 25 %
. . . . .
. . . . .
. . . . .
2013-11-30 1 100 80 80 %
2014-11-17 1 100 80 80 %
2014-11-18 1 100 80 80 %
. . . . .
. . . . .
. . . . .
2014-11-30 1 100 80 80 %
(如果数值是伪值,并且“逻辑上”可能无法相加)它将返回1年前设置的相同期间:
{
ParallelPeriod([Dim Date].[Calender].[Year],1,[Dim Date].[Calender].[Date].[2014-11-20])
:
ParallelPeriod([Dim Date].[Calender].[Year],1,[Dim Date].[Calender].[Date].[2014-11-30])
}
为了将计算的度量值添加到去年:
With
Member [Measures].[QuantityParallelPeriod] as
(
ParallelPeriod([Dim Date].[Calender].[Year],1,[Dim Date].CurrentMember),
[Measures].[Quantity]
)
完整代码必须如下所示:
With
Member [Measures].[QuantityParallelPeriod] as
(
ParallelPeriod([Dim Date].[Calender].[Year],1,[Dim Date].[Calender].CurrentMember),
[Measures].[Quantity]
)
Select
Non empty {[Measures].[Quantity],[Measures].[QuantityParallelPeriod]} on 0,
Non empty {[Dim Date].[Calender].[Date].[2014-11-20]:[Dim Date].[Calender].[Date].[2014-11-30]} on 1
From [DSV_FactStoreSales 1]
Where ([Dim Store2].[Store Key].&[1024])
它将返回您1年前设定的相同期限:
{
ParallelPeriod([Dim Date].[Calender].[Year],1,[Dim Date].[Calender].[Date].[2014-11-20])
:
ParallelPeriod([Dim Date].[Calender].[Year],1,[Dim Date].[Calender].[Date].[2014-11-30])
}
为了将计算的度量值添加到去年:
With
Member [Measures].[QuantityParallelPeriod] as
(
ParallelPeriod([Dim Date].[Calender].[Year],1,[Dim Date].CurrentMember),
[Measures].[Quantity]
)
完整代码必须如下所示:
With
Member [Measures].[QuantityParallelPeriod] as
(
ParallelPeriod([Dim Date].[Calender].[Year],1,[Dim Date].[Calender].CurrentMember),
[Measures].[Quantity]
)
Select
Non empty {[Measures].[Quantity],[Measures].[QuantityParallelPeriod]} on 0,
Non empty {[Dim Date].[Calender].[Date].[2014-11-20]:[Dim Date].[Calender].[Date].[2014-11-30]} on 1
From [DSV_FactStoreSales 1]
Where ([Dim Store2].[Store Key].&[1024])
这是一个可行的解决方案。如果这不是您想要的最终工作查询的形状,请澄清,因为我在您的问题中没有抓住这一点
WITH
MEMBER [Dim Date].[Calender].[All].[Prior Year] as
Aggregate(
{
parallelperiod([Dim Date].[Calender].[Year],1,[Dim Date].[Calender].[Date].[2014-11-17])
:
parallelperiod([Dim Date].[Calender].[Year],1,[Dim Date].[Calender].[Date].[2014-11-30])
}
)
MEMBER [Dim Date].[Calender].[All].[Current Year] as
Aggregate(
{
[Dim Date].[Calender].[Date].[2014-11-17]
:
[Dim Date].[Calender].[Date].[2014-11-30]
}
)
SELECT {
[Measures].[Quantity], [Measures].[Total Price]
,[Measures].[Contribution Margin], [Measures].[Profit Margin]
} ON COLUMNS,
{[Dim Date].[Calender].[All].[Prior Year],
[Dim Date].[Calender].[All].[Current Year]}
on rows
from [DSV_FactStoreSales 1]
Where [Dim Store2].[Store Key].&[1024]
根据您澄清的预期结果,这里是另一个形状:
SELECT {
[Measures].[Quantity], [Measures].[Total Price]
,[Measures].[Contribution Margin], [Measures].[Profit Margin]
} ON COLUMNS,
{
{
parallelperiod([Dim Date].[Calender].[Year],1,[Dim Date].[Calender].[Date].[2014-11-17])
:
parallelperiod([Dim Date].[Calender].[Year],1,[Dim Date].[Calender].[Date].[2014-11-30])
},
{
[Dim Date].[Calender].[Date].[2014-11-17]
:
[Dim Date].[Calender].[Date].[2014-11-30]
}
}
on rows
from [DSV_FactStoreSales 1]
Where [Dim Store2].[Store Key].&[1024]
这是一个可行的解决方案。如果这不是您想要的最终工作查询的形状,请澄清,因为我在您的问题中没有抓住这一点
WITH
MEMBER [Dim Date].[Calender].[All].[Prior Year] as
Aggregate(
{
parallelperiod([Dim Date].[Calender].[Year],1,[Dim Date].[Calender].[Date].[2014-11-17])
:
parallelperiod([Dim Date].[Calender].[Year],1,[Dim Date].[Calender].[Date].[2014-11-30])
}
)
MEMBER [Dim Date].[Calender].[All].[Current Year] as
Aggregate(
{
[Dim Date].[Calender].[Date].[2014-11-17]
:
[Dim Date].[Calender].[Date].[2014-11-30]
}
)
SELECT {
[Measures].[Quantity], [Measures].[Total Price]
,[Measures].[Contribution Margin], [Measures].[Profit Margin]
} ON COLUMNS,
{[Dim Date].[Calender].[All].[Prior Year],
[Dim Date].[Calender].[All].[Current Year]}
on rows
from [DSV_FactStoreSales 1]
Where [Dim Store2].[Store Key].&[1024]
根据您澄清的预期结果,这里是另一个形状:
SELECT {
[Measures].[Quantity], [Measures].[Total Price]
,[Measures].[Contribution Margin], [Measures].[Profit Margin]
} ON COLUMNS,
{
{
parallelperiod([Dim Date].[Calender].[Year],1,[Dim Date].[Calender].[Date].[2014-11-17])
:
parallelperiod([Dim Date].[Calender].[Year],1,[Dim Date].[Calender].[Date].[2014-11-30])
},
{
[Dim Date].[Calender].[Date].[2014-11-17]
:
[Dim Date].[Calender].[Date].[2014-11-30]
}
}
on rows
from [DSV_FactStoreSales 1]
Where [Dim Store2].[Store Key].&[1024]
谢谢回复!我已将其添加到查询中,但随后我得到了编辑中概述的输出。使用ParallelPeriod,是否可以将指定日期范围的销售值与上一年指定日期范围的销售值放在同一结果集中?据我了解,它只返回上一年的销售额?我也尝试过这个。我已经用结果更新了edit3
下的OP。谢谢回复!我已将其添加到查询中,但随后我得到了编辑中概述的输出。使用ParallelPeriod,是否可以将指定日期范围的销售值与上一年指定日期范围的销售值放在同一结果集中?据我了解,它只返回上一年的销售额?我也尝试过这个。我已经用结果更新了edit3
下的OP。谢谢你的回复!在一个测试商店上运行您的查询-其唯一销售额在2015-05-12:2015-05-18
之间的StoreKey=1041
,我得到PriorYear的销售额为342(这是商店1041在2015年5月的总销售额),而当前年份为(空)。但我希望我很快会在OP中更新输出。你知道为什么该计划选择将2015年的销售额作为优先考虑因素吗?我预计2014年11月17日的四月将在2013年。@Cenderze您如何在日历层次结构中对年度级别进行排序?我已经将Dim Date设置为YQMWD层次结构。我不知道如何检查特定级别的顺序。我现在使用的是默认值(不过,我已经“指出”了我的级别,即从季度点到年度,从月份点到季度点等)。@Cenderze在Excel中,如果您将日历层次结构放入“过滤器”部分(如果是数据透视表)并弹出下拉列表,我假设它是2013年、2014年等,而不是2014年,2013?什么版本的SSAS?谢谢您的回复!在一个测试商店上运行您的查询-其唯一销售额在2015-05-12:2015-05-18
之间的StoreKey=1041
,我得到PriorYear的销售额为342(这是商店1041在2015年5月的总销售额),而当前年份为(空)。但我希望我很快会在OP中更新输出。你知道为什么该计划选择将2015年的销售额作为优先考虑因素吗?我预计2014年11月17日的四月将在2013年。@Cenderze您如何在日历层次结构中对年度级别进行排序?我已经将Dim Date设置为YQMWD层次结构。我不知道如何检查特定级别的顺序。我现在使用的是默认值(但是我已经“指出”了我的级别,即从季度点到年度,从月份点到季度点等等。)@Cenderze在Excel中,如果您将日历层次结构放入数据透视表的过滤器部分,并弹出下拉列表,我假设它是2013、2014等,而不是2014、2013?SSAS的哪个版本?