2015-10-16 53 views
1

假設我有簡單的表,如銷售數據:MDX:相較於上年同期

  • ID店
  • ID產品
  • 日期

你能幫我寫計算成員的MDX查詢來獲得當期銷售比率與去年同期嗎?

例如,如果選擇月或季度作爲維之一。

+0

我根本不知道一切是如何做到這一點在立方體秒。在關係數據庫中,我做了2個獨立的報告並將它們合併爲 –

+0

爲了編寫任何查詢,需要知道關係模式。請張貼涉及的整個架構。 –

回答

0

讓我們假設你有[年],[月]和[日]級別的[時間]維度。

如果

SELECT 
    [Time].[Jan 2015]:[Time].[Dec 2015] on 0, 
    [Measures].[Sales] on 1 
FROM 
    [Cube] 

返回的2015年所有月份的銷售,我們可以添加一個計算的措施,以獲得比:

WITH 
    MEMBER [Sales Ratio] AS DivN( 
       [Sales], 
       (ParallelPeriod([Time].[Year], 1, [Time].current), [Sales]) 
    SELECT 
    [Time].[Jan 2015]:[Time].[Dec 2015] on 0, 
    {[Sales],[Sales Ratio]} on 1 
    FROM 
    [Cube] 

DivN是icCube具體,並允許將是「空」安全。

ParallelPeriod是一個標準的MDX函數,返回前幾個月。您也可以使用Lag(-12),即在12級中向後移動。

current (aka Currentmember)也是標準的MDX,允許檢索層次結構/維度的當前值。

在icCube中,我會添加一個function導航到上一年,以便您可以重新使用它(並根據需要修復一個)。像:

WITH 
    FUNCTION timePrevYear(t_) AS ParallelPeriod([Time].[Year], 1, t_) 
    MEMBER [Sales Ratio] AS DivN( 
       [Sales], 
       (timePrevYear([Time].current), [Sales]) 
    SELECT 
    [Time].[Jan 2015]:[Time].[Dec 2015] on 0, 
    {[Sales],[Sales Ratio]} on 1 
    FROM 
    [Cube] 

這將是一個有點過分,但最終你可以在我們在MDX Utility或統計尺寸致電添加這種計算的,所以你甚至可以讓最終用戶在選擇此從報告工具下拉列表。更多關於這個here

0

在我爲我的客戶創建模型,我有時走另一條路線爲IC3曾建議:

尤其是當會有很多對這些頂級額外的計算(如年初至今,inception-迄今爲止,月至今等)。

這就是: 負荷再次以相同的事實數據,但設置爲「加載日期」的「日期」 - 1年(如MySQL的:DATE_ADD(,間隔 - 1年)

優點:

  • 追溯歷史可以
  • 很多公式可以「頂」這些被添加,你一直都知道的基本知識都ok