我正在创建一个数据集,我最终希望比较特定年份(2014年)和前一年同一周的特定两周日期范围(即指定日期范围的最后一个日期之前的两周)。
到目前为止,我所做的是创建查询以查找指定的两周日期范围的相关数据,如下所示:
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
,但在此示例中,我有一个指定的范围,跨越两周。
有没有人知道如何实现这个?我需要将它放在同一个Query中,以便能够将结果集用作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()
? Please note
我在最后一个示例Query中对Month
进行了一些测试。
编辑3“使用With MEMBER方法”
我也尝试过建议的解决方案来调用WITH Member AS
,如下所示:
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)
我不明白指定Outside
的日期parallelperiod range
如何返回值?
编辑预期输出
我期望输出的结果是:
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 %
(其中数值是虚拟值,可能不会“逻辑地”加起来)
答案 0 :(得分:1)
它将在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 :(得分:0)
以下是工作解决方案的镜头。如果这不是您想要的最终工作查询的形状,请澄清,因为我没有在您的问题中发现这一点。
set terminal pngcairo size 1024,768 enhanced
set output 'output.png'
unset colorbox
set lmargin 0
set rmargin 0
set tmargin 0
set bmargin 0
unset tics
set pm3d map
set palette
set zero 1E-40
set cbrange[0:16]
set xrange[-1.7999999105699706625216549582546577:-1.7999999105620294592711161385523155]
set yrange[-2.941176470588235211202093999389572e-12:2.941176470588235211202093999389572e-12]
splot "splot.dat" using 1:2:3 with pm3d notitle
unset output
根据您澄清的预期结果,这是另一种形式:
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]