2017-09-27 40 views
0

需要產生在MDX一個特定的輸出和我在努力產生期望的結果。我正在嘗試使用ADW Cube構建一個示例。獲得同樣的措施在兩列並排的側不同的時間段中MDX

我需要製作一個表格,我有三列:

  1. 某些類別(城市在這個例子中,但本專欄將 最終動態更改在SSRS所選參數),
  2. 一些措施該類別(在這個例子中網絡銷售部)某個月份的
  3. 同樣的措施在第二列,但對於前一個月

表應該被過濾僅基於在第二列措施前三名最高的項目。

下面是我到目前爲止所得到的一些簡單的靜態示例,但是這個想法基本上是這樣的:用戶在參數中選擇一些值,這些值將對錶格進行過濾的數據進行子集化(由[Country](Canada )在示例中)。然後,他將選擇他希望得到結果的某個層級中的粒度級別(在該示例中由[City]表示)。他會選擇期望的時間段(具體的[年份]和[月份])。在運行查詢, 他應該得到類似的表如下(在那裏他根據第二列前三名的結果):

Category  Internet Sales Amount (CurrentPeriod) Internet Sales Amount (PreviousPeriod) 
Langford  $13,468.39        null 
Vancouver  $12,291.48        $7,447.26 
Sooke   $11,563.01        null 

第一列代表所選擇的粒度。第二列代表給定項目的選定年份組合的互聯網銷售額,第三列代表所選組合之前一個月的互聯網銷售額。

這是我到目前爲止。我是能夠產生表的前兩列,但我很努力,包括第三列也是如此。我來自SQL,對於MDX來說是相當新穎的,所以如果我所問的問題看起來很簡單,或者我迄今爲止的方法與應該如何完成相關,那麼請耐心等待。

SELECT [Measures].[Internet Sales Amount] ON 0, 
TopCount 
    ({[Customer].[City].[City].Members} 
    , 3 
    , [Measures].[Internet Sales Amount] 
    ) ON 1 
FROM [Adventure Works] 
WHERE ([Customer].[Country].&[Canada], 
     [Date].[Calendar Year].&[2007], 
     [Date].[Month of Year].&[12]) 

回答

0

好吧,我設法解決了這個簡化的例子。

WITH 
    MEMBER [Measures].[SalesPrevMth] AS 
    (
     [Measures].[Internet Sales Amount] 
    ,[Date].[Calendar].CurrentMember.PrevMember 
    ) 
SELECT 
    NON EMPTY 
    { 
     [Measures].[Internet Sales Amount] 
    ,[Measures].[SalesPrevMth] 
    } ON COLUMNS 
,NON EMPTY 
    TopCount 
    ({ 
     [Customer].[City].[City].Members 
     * 
     [Date].[Calendar].[Month].ALLMEMBERS 
     }, 3, [Measures].[Internet Sales Amount]) ON ROWS 
FROM 
(
    SELECT 
    [Date].[Calendar].[Month].&[2007]&[12] ON COLUMNS 
    FROM [Adventure Works] 
) 
WHERE [Customer].[Country].&[Canada];