2017-05-18 115 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