IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SSAS Discussion :

Mesures sur un intervalle de temps


Sujet :

SSAS

  1. #1
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 77
    Points : 58
    Points
    58
    Par défaut Mesures sur un intervalle de temps
    Bonjour
    Mon titre n'est pas très explicite, mais je ne sais pas comment le tourner
    Voici ma problématique avec les données suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Client1 : Date entrée = 20090521 - Date de sortie = 20091025
    Client2 : Date entrée = 20090612 - Date de sortie = NULL
    Client3 : Date entrée = 20090205 - Date de sortie = 20100115
    Je voudrais obtenir la mesure suivante :
    - Nombre de clients sur une période donnée

    Par exemple, si je choisis le mois de Juillet 2009, je voudrais la valeur 3 (les 3 clients sont encore client à cette période). Par contre, si je choisis Mars 2009, je voudrais la valeur 1 (il n'y a qu'un seul client, client à cette date).

    Est-ce-qu'on peut faire ça dans un cube ?

    Avec la dimension Temps je ne vois pas trop comment m'en sortir, alors si vous avez des idées...

    D'avance merci.

    Iza

  2. #2
    Membre émérite Avatar de FrancoisJehl
    Homme Profil pro
    BI Engineer
    Inscrit en
    Juillet 2009
    Messages
    1 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : BI Engineer
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 485
    Points : 2 883
    Points
    2 883
    Par défaut
    Salut Isa, je te réponds direct ici.
    Ce que tu veux faire c'est un cumul annuel, que nous appellon YearToDate() de ta mesure NombreDeCV.

    Pour calculer ça tu dois aggréger sur un jeu contenant tous tes membres depuis le début de l'année, et donc faire un:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Aggregate(Ytd(),Measures.NombreDeCV
    Sachant que Ytd() fonctionnellement c'est un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    PeriodsToDate
    (
    TaDimensionTemps.TaHierarchieTemps.TonNiveauAnnee,  
    TaDimensionTemps.TaHierarchieTemps.CurrentMember
    )
    HTH,

  3. #3
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 77
    Points : 58
    Points
    58
    Par défaut
    Bonjour François
    J'ai déjà fait ça et ça ne marche pas. Le periodToDate m'aggrège tout sur un niveau, le problème c'est que je ne veux pas aggréger sur l'année.
    Je reprends mon exemple que je complète :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Client1 : Date entrée = 20090521 - Date de sortie = 20091025
    Client2 : Date entrée = 20090612 - Date de sortie = NULL
    Client3 : Date entrée = 20090205 - Date de sortie = 20100115
    Client4 : Date entrée = 20090101 - Date de sortie = 20090125
    Si je me place en juillet 2009, l'aggrégation va me sortir la mesure 4 alors que c'est 3 que j'attends (le client4 n'est plus là en juillet).
    Je pense que c'est quand même là-dessus qu'il faut partir, je crois que je vais faire une dimension et mesures cachées qui sont basées sur la date de sortie. Je vais aggréger là-dessus et soustraire à la mesure donnée sur la date d'entrée... en espérant que ça marche.
    Merci François

  4. #4
    Membre émérite Avatar de FrancoisJehl
    Homme Profil pro
    BI Engineer
    Inscrit en
    Juillet 2009
    Messages
    1 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : BI Engineer
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 485
    Points : 2 883
    Points
    2 883
    Par défaut
    Si je résume bien ce que tu veux faire c'est qu'à un instant t tu veux les clients inscrits avant t mais n'ayant pas résilié ou a une date postérieure à t.

    Donc tu recouvres
    - Les dates d'inscription antérieures au CurrentMember
    NULL : [Date_Inscription].[Hierarchie].CurrentMember
    - Les dates de sortie postérieures au CurrentMember
    [Date_Sortie].[Hierarchie].CurrentMember.Lag(-1):NULL

    Bon du coup le problème c'est que tu dois poser deux filtres et affecter la date du jour aux deux c'est sûr...

    Tu CrossJoines tout ça, un coup d'Aggregate et youpla:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Aggregate
    (
    CrossJoin 
    ( 
    NULL:[Date_Inscription].[Hierarchie].CurrentMember,
    [Date_Sortie].[Hierarchie].CurrentMember.Lag(-1):NULL
    )
    , [Measures].[TaMesure]
    )
    Ca me parait pas déconnant vu comme ça.

  5. #5
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 77
    Points : 58
    Points
    58
    Par défaut
    Bonsoir François
    Oui, c'est tout à fait ça !
    le code MDX est un peu obscur pour le moment , mais je vais tester tout ça ligne par ligne pour bien capter comment ça marche.
    Vendredi je me suis pris la tête a essayer d'affecter une valeur (un membre) à ma seconde dimension... enfin ce que tu dis là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Bon du coup le problème c'est que tu dois poser deux filtres et affecter la date du jour aux deux c'est sûr...
    J'ai voulu faire un truc du genre, en reprenant ton exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [Date_Sortie].[Hierarchie].([Date_Inscription].[Hierarchie].CurrentMember)
    car je n'affiche qu'une seule dimension aux utilisateurs.
    Evidemment ça ne marche pas

    Franchement, le MDX c'est quand même tordu

  6. #6
    Membre émérite Avatar de FrancoisJehl
    Homme Profil pro
    BI Engineer
    Inscrit en
    Juillet 2009
    Messages
    1 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : BI Engineer
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 485
    Points : 2 883
    Points
    2 883
    Par défaut
    Ben après tu peux toujours positionner les deux en utilisant LinkMember, si tes deux dims sont deux Role Playing - donc ont les mêmes clés de niveau. Tu positionnes la DateInscription et tu dérives la date fin avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Aggregate
    (
    CrossJoin 
    ( 
       NULL:[Date_Inscription].[Hierarchie].CurrentMember,
       LinkMember
       (
          [Date_Inscription].[Hierarchie].CurrentMember.Lag(-1),
          [Date_Sortie].[Hierarchie]
       ):NULL
    )
    , [Measures].[TaMesure]
    )

  7. #7
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 77
    Points : 58
    Points
    58
    Par défaut
    Tu sais quoi François... franchement t'es trop fort.
    Au moins, j'avais déjà pris toutes les fonctions qu'il fallait, PeriodtoData, Linkmember... après c'est l'utilisation dans un membre calculé qui est terrible !
    Question pro, -tu fais (ou ta boite) fait des formations "pures" MDX ?
    Tu me contactes sur mon mail ?
    Encore merci !

  8. #8
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 77
    Points : 58
    Points
    58
    Par défaut
    Bonjour François
    En attendant la formation du mois de mars avec Romuald (j'espère qu'il est aussi fort que toi ), j'ai encore une question, toujours sur le même sujet. J'ai utilisé ta requête MDX, mais je voudrais faire un distinct et dès que je fais ça, ça me sort des chiffres aberrants...
    Voici l'exemple initial un peu enrichi sur le client 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Client1 : Date entrée = 20090521 - Date de sortie = 20091025
    Client1 : Date entrée = 20100201 - Date de sortie = 20100215
    Client1 : Date entrée = 20100220 - Date de sortie = 20100225
    Client2 : Date entrée = 20090612 - Date de sortie = NULL
    Client3 : Date entrée = 20090205 - Date de sortie = 20100115
    Client4 : Date entrée = 20090101 - Date de sortie = 20090125
    Le client1 part puis revient plusieurs fois dans le mois.
    Je voudrais que sur le mois de février 2010, le nombre qui sort soit 1 et pas 2.
    J'ai fait ça, mais ça déconne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Aggregate
    (
    CrossJoin 
    ( 
       NULL:[Date_Inscription].[Hierarchie].CurrentMember,
       LinkMember
       (
          [Date_Inscription].[Hierarchie].CurrentMember.Lag(0),
          [Date_Sortie].[Hierarchie]
       ):NULL
    )
    , [Measures].[ClientID de type distinct count]
    )
    Je suppose qu'il faut que j'utilise la fonction MDX "distinct" mais je ne vois pas où la caser.

    Est-ce-que tu peux encore m'aider ?

    Merci !

Discussions similaires

  1. [MySQL] Requête MySql sur un intervalle de temps
    Par Equinoxe5 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/01/2012, 13h35
  2. Condition sur intervalles de temps
    Par Christophe Charron dans le forum Débuter
    Réponses: 6
    Dernier message: 13/04/2007, 10h09
  3. Requette access sur intervalle de temps
    Par skyman272 dans le forum Access
    Réponses: 15
    Dernier message: 18/02/2006, 10h45
  4. [Timer]Comment mesurer un intervalle de temps ?
    Par Pill_S dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 07/05/2004, 17h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo