2017-03-17 122 views
0

我正在創建一個數據集,我最終希望比較特定年份(2014年)和相同的特定兩週日期範圍(即直到指定日期範圍的最後日期的兩週)。MDX:查找特定年份和上一年的兩週指定日期範圍的銷售價值

我迄今所做的是創建查詢以查找指定的兩個週日期範圍,因爲這的相關數據:

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% 

,其中特別的日期似乎離相比受到追捧的效果。

EDIT 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,我在Month這個最後一個示例Query中做了一些測試。

編輯3 「採用與會員辦法」

我也嘗試了建議的解決方案來調用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 % 

(其中數值是虛擬值,可能不累加「邏輯」)

回答

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]) 
+0

謝謝回答!我已經將其添加到查詢中,但是在編輯中獲得了輸出。使用ParallellPeriod,是否有可能在同一結果集中具有指定日期範圍的銷售額*和*前一年的指定日期範圍的銷售額?根據我的理解,它僅返回前一年的銷售額? – Cenderze

+0

我已經更新了我的答案,嘗試添加額外的措施。 –

+0

我也試過這個。我已經在'EDIT 3'下更新了OP的結果。 – Cenderze

0

這是一個可行的解決方案了一槍。如果這不是您想要的最終工作查詢的形狀,請澄清一下,因爲我沒有在您的問題中看到。

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] 
+0

感謝您的回覆!在測試商店上運行您的查詢 - 通過'StoreKey = 1041',其銷售額在'2015-05-12:2015-05-18'之間,我得知PriorYear的銷售額是342(這是總銷售額2015年5月,商店1041),CurrentYear爲(null)。但我期望我將在OP中更新的輸出。你知道爲什麼該計劃選擇將2015年的銷售額作爲PriorYear嗎?我預計2014-11-17的PriorYear將在2013年。 – Cenderze

+0

@Cenderze您如何在日曆層次結構中對年度層次進行排序?大年前來嗎? – GregGalloway

+0

我已將Dim Date設置爲YQMWD層次結構。我不知道如何檢查特定級別的順序。我現在使用的默認值(然而,我已經「指出」我的水平eachother,即季指向年,月指向季等) – Cenderze

相關問題