2017-07-25 3 views
0

Je viens de mettre en œuvre une structure SSAS qui traite de l'abonnement client et newsletter.SSAS (recherche de mesure mdx) compte client distinct dans une catégorie à une date

Je fais face à une sorte de question simple que je ne résous pas maintenant ..

Voici un simple extrait d'un de ma table de fait:

Date | chat | Contacter

201401 | noSub | Paul
201403 | Multi | Paul
201602 | Mono | jean
201604 | Mono | Paul
201604 | Multi | Paul
201609 | noSub | jean
201703 | Multi | Paul

Je veux obtenir une mesure (contactnumber) qui me donne combien de contact il y a dans une catégorie au moment de la demande ..

Je crée cette mesure: (DC_Contact est un compte distinct de contacts)

[Measures].[ContactNumber] = AGGREGATE( NULL : [Period].[Per Quarter].CURRENTMEMBER ,[Measures].[DC_Contact])

mais quand je vérifie en 201703, il me donne noSub = 2 (excepted 1) Multi = 2 (excepted 1) Mono = 2 (excepted 0)

Et 201604 j'aurai noSub = 2 (excepted 2) Multi = 1 (excepted 0) Mono = 1 (excepted 0)

Répondre

0

Merci d'avoir répondu. je trouve une solution à la question

CREATE MEMBER CURRENTCUBE.[Measures].[mono] AS 
filter(
    GENERATE(
     DynamicContactSet, 
     tail(
     -- ORDER(
      filter(
       [Contact].[Contact PMID].currentmember 
       * {null : [Period].[Per quarter].currentmember} 
       * {null : [Period].[Per week].currentmember} 
       * [Category].[Category].[Category] 
      ,[Measures].[max_date]>0) 
     -- ,[Measures].[max_date],desc) 
     ,1) 
    ),cint([Category].[Category].currentmember.MEMBER_KEY)= 1 
).count 
, VISIBLE = 0; 

CREATE MEMBER CURRENTCUBE.[Measures].[multi] AS 
filter(
    GENERATE(
     DynamicContactSet, 
     tail(
     -- ORDER(
      filter(
       [Contact].[Contact PMID].currentmember 
       * {null : [Period].[Per quarter].currentmember} 
       * {null : [Period].[Per week].currentmember} 
       * [Category].[Category].[Category] 
      ,[Measures].[max_date]>0) 
     -- ,[Measures].[max_date],desc) 
     ,1) 
    ),cint([Category].[Category].currentmember.MEMBER_KEY)= 2 
).count 
, VISIBLE = 0; 


CREATE MEMBER CURRENTCUBE.[Measures].[unsuscriber] as 
filter(
    GENERATE(
     DynamicContactSet, 
     tail(
     -- ORDER(
      filter(
       [Contact].[Contact PMID].currentmember 
       * {null : [Period].[Per quarter].currentmember} 
       * {null : [Period].[Per week].currentmember} 
       * [Category].[Category].[Category] 
      ,[Measures].[max_date]>0) 
    -- ,[Measures].[max_date],desc) 
    ,1) 
    ),cint([Category].[Category].currentmember.MEMBER_KEY)=3 
).count 
, VISIBLE = 0; 


CREATE MEMBER CURRENTCUBE.[Measures].[notopin] as 
DynamicContactSet.count - (mono + multi + unsuscriber) 
, VISIBLE = 0; 



CREATE MEMBER CURRENTCUBE.[Measures].[ContactNumber] AS 
CASE 
    WHEN cint([Category].[Category].currentmember.MEMBER_KEY)= 1 THEN mono 
    WHEN cint([Category].[Category].currentmember.MEMBER_KEY)= 2 THEN multi 
    WHEN cint([Category].[Category].currentmember.MEMBER_KEY)= 3 THEN unsuscriber 
    ELSE notopin 
END 
, VISIBLE = 1; 

Alors je peux obtenir à tout moment à quel point il y a des contacts dans une catégorie:

SELECT [Measures].[ContactNumber] on columns 
,(

    {[Period].[Per Quarter].[month].[M01-2000] 
    ,[Period].[Per Quarter].[month].[M01-2005] 
    ,[Period].[Per Quarter].[month].[M01-2007] 
    ,[Period].[Per Quarter].[month].[M01-2010] 
    ,[Period].[Per Quarter].[month].[M01-2015] 
    ,[Period].[Per Quarter].[month].[M01-2017] 
    ,[Period].[Per Quarter].[month].[M12-2017]} 
    ,[Category].[Category].[Category] 
) ON rows 

FROM [BI SUBSCRIPTION] 
where 
{       
    [Contact].[Contact PMID].[jean paul] 
    [Contact].[Contact PMID].[jean michel] 
    [Contact].[Contact PMID].[jean françois]  
    [Contact].[Contact PMID].[jean christophe]  
    [Contact].[Contact PMID].[jean rachid] 
}     

Mais le plus gros problème est maintenant la performance ... Mais Je ne vois pas comment améliorer perf sans réduire le volume de données.

Cordialement

0

Il est assez difficile de vous aider a nous manquons de détails sur la structure de votre cube, mais vous devriez probablement doe quelque chose en utilisant DistinctCount (https://docs.microsoft.com/en-us/sql/mdx/distinctcount-mdx)

Ne hésitez pas à ajouter plus d'informations sur la structure, Cela devrait aider à vous aider.