2017-05-18 7 views
1

Je travaille sur une requête dans SSMS 2014 où j'ai besoin de [Mesures]. [Pourcentage d'utilisateurs uniques de l'application] par mois, afin que je puisse calculer dynamiquement le pourcentage d'augmentation du mois. Je préférerais commencer par comparer le mois dernier au mois précédent, et cela finira par être exécuté comme un rapport tous les mois (d'où la nécessité qu'il soit dynamique).Membres calculés de MDX par mois

Avec ou sans mes membres DATE, le nombre de [CurrentMonthUniqueUsers] et [LastMonthUniqueUsers] reste le même (voir dans l'exemple). De plus, sans mon instruction WHERE, je n'obtiens des résultats que pour mes lignes non-MEMBER.

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] 

L'image ci-dessous est ce que j'obtiens pour les résultats. Le nombre de connexions et le nombre de connexions uniques sont pour tous les temps et ne sont filtrés par aucune date.

Data Screenshot

Je suis nouveau MDX, de sorte que toute aide serait grandement appréciée!

EDIT (5/22/2017): Voici la requête qui a fonctionné avec la réponse fournie par whytheq. Notez qu'il n'est pas encore dynamique en ce que je dois spécifier une date (201705) sur la colonne.

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]. [Année]. [2017] -> [Date]. [Calendrier]. [2017] peut résoudre un problème. –

Répondre

1

Dans votre requête votre CURRENTMEMBER est ce qui est dans la clause WHERE - qui est 2017 - donc ce ne retournera pas un mois - il est probablement le retour du membre [Date].[Calendar].[All]:

[Date].[Calendar].CurrentMember 

Essayez d'ajouter mois soit dans le SELECT ou la clause 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]; 

ci-dessus pourraient également être un ensemble de mois:

// 
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

Indice: pour déboguer le code, vous pouvez également vérifier un membre avec {[Date]. [Calendrier] .CurrentMember.Lag (2)}. UniqueName. Il retournerait le [Date]. [Calendrier]. [Tous] et le rendrait clair. Je l'ai trouvé utile pour le code MDX complexe. –

+0

Merci pour votre aide @whytheq. Il s'est avéré que je devais utiliser [Date]. [Année civile] et spécifier le membre. Bien que cela me donne au moins des données viables, il n'est pas dynamique dans la mesure où je dois spécifier une date. D'autres suggestions? –

+0

@NickZ pouvez-vous poster une autre question? Vous devez spécifier le dynamisme dont vous avez besoin, par ex. il doit être ce mois-ci, il doit toujours être le dernier mois complet ... – whytheq