2017-05-18 121 views
1

我正在研究SSMS 2014中的一個查詢,我需要[度量]。[Percent Unique App Users]按月計算,以便我可以動態計算月份的增加百分比。我最好喜歡從上個月到上個月的比較開始,這最終會最終以每個月的報告形式運行(因此需要它是動態的)。MDX計算每月會員

有或沒​​有我的DATE成員時,[CurrentMonthUniqueUsers]和[LastMonthUniqueUsers]的計數保持不變(以示例顯示)。另外,如果沒有我的WHERE語句,我只會得到非會員行的結果。

WITH 
MEMBER [LastMonthUniqueUsers] as SUM({[Date].[Calendar].CurrentMember.Lag(2)},[Measures].[App Unique Users Loggedin]) 
MEMBER [CurrentMonthUniqueUsers] as SUM({[Date].[Calendar].CurrentMember.Lag(1)},[Measures].[App Unique Users Loggedin]) 
// 
MEMBER [Measures].[Percent Unique App Users] AS ([CurrentMonthUniqueUsers])/([LastMonthUniqueUsers]), FORMAT_STRING = "Percent" 
// 
MEMBER [CurrentDate] As Now() 
// 

SELECT 
    non empty[Project].[Client Name].children ON 0, 
    non empty{[Measures].[Percent Unique App Users], 
     [CurrentMonthUniqueUsers], 
     [LastMonthUniqueUsers], 
     [Measures].[App Logins], 
     [Measures].[App Unique Users Loggedin]} ON 1 
FROM 
    [OpsViewWarehouse] 
WHERE 
    [Date].[Year].[2017] 

下面的圖片是我得到的結果。登錄次數和唯一登錄次數始終保持不變,並且不會受到任何日期的過濾。

Data Screenshot

我新的MDX,所以任何幫助將不勝感激!

編輯(2017年5月22日):這是查詢與我whyTH提供的答案一起工作。請注意,它不是動態的,因爲我必須在列上指定日期(201705)。

WITH 
    MEMBER [2MonthsPriorUniqueUsers] AS Sum({[Date].[Calendar Year Month].CurrentMember.Lag(2)},[Measures].[App Unique Users Loggedin]) 
    MEMBER [1MonthPriorUniqueUsers] AS Sum({[Date].[Calendar Year Month].CurrentMember.Lag(1)},[Measures].[App Unique Users Loggedin]) 
    MEMBER [1MonthPriorTotalAppLogins] AS Sum({[Date].[Calendar Year Month].CurrentMember.Lag(1)},[Measures].[App Logins]) 
    MEMBER [Measures].[PercentUniqueIncreaseMoM] AS ([1MonthPriorUniqueUsers]/[2MonthsPriorUniqueUsers])-1,FORMAT_STRING = "Percent" 
SELECT 
    NON EMPTY 
    {[Date].[Calendar Year Month].[201705]} 
    * [Project].[Client Name].members ON 0, 
    NON EMPTY 
    { 
     [Measures].[PercentUniqueIncreaseMoM] 
    ,[1MonthPriorUniqueUsers] 
    ,[2MonthsPriorUniqueUsers] 
    ,[1MonthPriorTotalAppLogins] 
    } ON 1 
FROM [OpsViewWarehouse] 
+0

[Date]。[Year]。[2017] - > [日期]。[日曆]。[2017]可能會解決一個問題。 –

回答

1

在查詢您的CURRENTMEMBER是什麼,是在WHERE子句中 - 這是2017年 - 因此這將不會再重返一個月 - 它可能返回成員[Date].[Calendar].[All]

[Date].[Calendar].CurrentMember 

嘗試增加個月後的任一SELECT或WHERE子句:

// 
WITH 
    MEMBER [LastMonthUniqueUsers] AS 
    Sum 
    (
     {[Date].[Calendar].CurrentMember.Lag(2)} 
    ,[Measures].[App Unique Users Loggedin] 
    ) 
    MEMBER [CurrentMonthUniqueUsers] AS 
    Sum 
    (
     {[Date].[Calendar].CurrentMember.Lag(1)} 
    ,[Measures].[App Unique Users Loggedin] 
    ) 
    // 
    MEMBER [Measures].[Percent Unique App Users] AS 
    [CurrentMonthUniqueUsers]/[LastMonthUniqueUsers] 
    ,FORMAT_STRING = "Percent" 
    // 
    MEMBER [CurrentDate] AS 
    Now() 
SELECT 
    NON EMPTY 
     [Project].[Client Name].Children ON 0 
,NON EMPTY 
    {[Date].[Calendar].[Month].&[Jan 2017]} //<<<<<<change to a month member in your cube 
    * { 
     [Measures].[Percent Unique App Users] 
    ,[CurrentMonthUniqueUsers] 
    ,[LastMonthUniqueUsers] 
    ,[Measures].[App Logins] 
    ,[Measures].[App Unique Users Loggedin] 
    } ON 1 
FROM [OpsViewWarehouse]; 

上面也可以是一組數月:

// 
WITH 
    MEMBER [LastMonthUniqueUsers] AS 
    Sum 
    (
     {[Date].[Calendar].CurrentMember.Lag(2)} 
    ,[Measures].[App Unique Users Loggedin] 
    ) 
    MEMBER [CurrentMonthUniqueUsers] AS 
    Sum 
    (
     {[Date].[Calendar].CurrentMember.Lag(1)} 
    ,[Measures].[App Unique Users Loggedin] 
    ) 
    // 
    MEMBER [Measures].[Percent Unique App Users] AS 
    [CurrentMonthUniqueUsers]/[LastMonthUniqueUsers] 
    ,FORMAT_STRING = "Percent" 
    // 
    MEMBER [CurrentDate] AS 
    Now() 
SELECT 
    NON EMPTY 
    { 
     [Measures].[Percent Unique App Users] 
    ,[CurrentMonthUniqueUsers] 
    ,[LastMonthUniqueUsers] 
    ,[Measures].[App Logins] 
    ,[Measures].[App Unique Users Loggedin] 
    } ON 0 
,NON EMPTY 
    {Date].[Calendar].[Month].MEMBERS //<<<<<<change to the month hierarchy in your cube 
    * [Project].[Client Name].Children ON 1 
FROM [OpsViewWarehouse]; 
+0

提示:爲了調試代碼,您還可以使用{[Date]。[Calendar] .CurrentMember.Lag(2)}。UniqueName來檢查成員。它會返回[日期]。[日曆]。[全部]並將其清除。我發現它適用於複雜的MDX代碼。 –

+0

感謝您的幫助@whytheq。事實證明,我需要使用[日期] [日曆年月],並指定成員。雖然這至少可以讓我獲得可行的數據,但它仍然不是動態的,因爲我需要指定日期。還有什麼建議? –

+0

@NickZ能否請你發表另一個問題 - 你需要指定你需要的活力,例如,它需要在這個月,它需要永遠是最後一個完整的月份... – whytheq