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 :

DAX : Calcul de la moyenne sur les 4 dernières semaines


Sujet :

SSAS

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut DAX : Calcul de la moyenne sur les 4 dernières semaines
    Bonjour,

    Je travaille sur SSAS Tabular et l'activité mesurée consiste à suivre les créations de dossier client. Mon problème consiste à calculer un indicateur correspondant à la moyenne d'une mesure appellée "Flux" sur les 4 dernières semaines.
    En MDX, on pouvait fournir ce résultat à manipulant des parallelperiod mais je n'arrive pas à récupérer le même comportement sous DAX.

    Auriez vous une idée pour me débloquer ?

    Exemple illustré pour la moyenne d'un flux sur une seule semaine :
    ...................Flux total...........Flux moyen sur 1 semaine
    01/01/2012...........632
    02/01/2012.........3 599
    03/01/2012.........3 672
    04/01/2012.........3 429
    05/01/2012.........3 800
    06/01/2012.........3 146
    07/01/2012.........1 418................2 814
    08/01/2012.........1 030................2 871
    09/01/2012.........4 162................2 951
    10/01/2012.........3 586................2 939
    11/01/2012.........3 537................2 954

    ....


    Merci

  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
    Pas de 2012 sous la main pour vérifier, mais utiliser la fonction DatesInPeriod devrait approcher de la solution pour ce type de moyenne mobile non?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    =AverageX
    (
       Summarize
       (
          DatesInPeriod(Temps[DateID] , LastDate(Temps[DateID]),28,DAY),
          Temps[DateID],
          "FluxTotal",
          Calculate
          ( 
             Sum(Flux[FluxTotal]),
             AllExcept(Temps,Temps[DateID])
          )
       )
       ,[FluxTotal]
    )
    NB: Le AllExcept est là pour enlever tous les filtres pouvant avoir été ajoutés à la DimTemps, sauf le filtre en cours sur le niveau clé. On en a besoin parce que le modèle Tabular à l'inverse de Multidim "existe" automatiquement les mesures dans le contexte de requête et ne fait pas d'attribute overwrite automatique.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup, ça fonctionne ! J'ai encore un peu de mal avec ce langage bien qu'on y retrouve des concepts relationnels.

    Encore une question : j'ai besoin d'agréger les résultats retournés à la semaine, où faut-il compléter cette expression, dans la partie calculate ?

  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
    La moyenne mobile que je t'ai passée va chercher les 28 jours précédant la dernière date de la sélection - DaysInPeriod de LastDate - ce qui constitue une table de dates. Elle crée ensuite une table - Summarize - avec la somme de ta mesure pour sur cet intervalle et juste sur lui - Calculate(...) - pour chaque Date du contexte - Temps[DateID]. Elle calcule ensuite la moyenne de la somme sur cette table au jour avec AverageX. Libre toi sachant cela de modifier les granularités sur le temps pour afficher par exemple à la semaine glissante en face de chaque jour.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    En fait j'obtient systématiquement une erreur dès que je ne prend plus la variable date dans mon agrégat :

    Voici l'expression que j'aimerais manipuler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Flux moyen:=AVERAGEX
    (
     
    	Summarize
    	(
    		DatesInPeriod('D_DATE'[Date]; LastDate('D_DATE'[Date]);-28;DAY);
    		'D_DATE'[Semaine];
    		"Flux_Nouveau";
    		Calculate
    		( 
    			Sum([Flux_nouveau]); 
    			AllExcept(D_DATE;'D_DATE'[Date])
    		)
    	) ;
    	[Flux_nouveau]
    )
    Cependant j'ai une erreur sur le champs semaine pourtant existant dans la table D_DATE. J'imagine que cela est lié à la table de date retournée par DatesInPeriod. J'ai bien tenté cette expression dans le summarize mais ça ne fonctionne pas dès que je retire l'agrégat 'D_Date'[Date]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Summarize
    	(
    		DatesInPeriod('D_DATE'[Date], LastDate('D_DATE'[Date]),-28,DAY),
    		"Semaine", weeknum('D_DATE'[Date]),
    		"Flux_Nouveau",
    		Calculate
    		( 
    			Sum('FLUX'[FLUX_NOUVEAU]), 
    			AllExcept(D_DATE,'D_DATE'[Date])
    		)
    	)
    Je suis certains d'être à deux doigts de la solution mais je butte bêtement sur cette notion. Encore merci pour votre aide.

  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
    Excuse moi je ne comprends pas tout à fait ce que tu veux
    Au niveau jour avec l'expression que je t'ai donnée tu vas bien avoir au niveau jour la moyenne sur les 28 derniers jours (i.e. la somme des flux sur 28 jours divisé par 28)? Et au niveau semaine idem en prenant le dernier jour de la semaine comme fin de période, au niveau mois idem avec le dernier jour du mois comme fin de pèriode de 28.

    Ce que tu souhaites faire (ce que j'ai un peu de mal à comprendre) c'est quel type de moyenne? Si je prends ton exemple:

    En fait j'obtient systématiquement une erreur dès que je ne prend plus la variable date dans mon agrégat :

    Voici l'expression que j'aimerais manipuler :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Flux moyen:=AVERAGEX
    (
     
    	Summarize
    	(
    		DatesInPeriod('D_DATE'[Date]; LastDate('D_DATE'[Date]);-28;DAY);
    		'D_DATE'[Semaine];
    		"Flux_Nouveau";
    		Calculate
    		( 
    			Sum([Flux_nouveau]); 
    			AllExcept(D_DATE;'D_DATE'[Date])
    		)
    	) ;
    	[Flux_nouveau]
    )
    Cependant j'ai une erreur sur le champs semaine pourtant existant dans la table D_DATE. J'imagine que cela est lié à la table de date retournée par DatesInPeriod. J'ai bien tenté cette expression dans le summarize mais ça ne fonctionne pas dès que je retire l'agrégat 'D_Date'[Date]
    Je comprends alors que tu souhaites la moyenne de l'indicateur par semaine sur les quatre dernières semaines en glissant?

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    C'est bien ça oui, j'ai besoin de calculer la moyenne de l'indicateur par semaine sur les quatre dernières semaines en glissant, sachant que ma dimension temps est à la journée.

    Désolé pour le manque de clarté.

  8. #8
    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
    Et ça marche comment, la moyenne se fait avec des semaines entières (LMMJVSD) ou des blocs de 7 jours? Et si on utilise de vraies semaines que faire si on a des trous: par exemple si on est mercredi la semaine en cours compte ou on considère juste les 4 dernières semaines complètes?

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Ce qui me gène le plus dans la situation actuelle est que lorsque l'activité est analysée à la semaine, les agrégats sous-totaux représentent toujours une activité au niveau jour.
    Je pense que la capture ci-dessous sera plus parlante :



    L'idéal serait que les sous-totaux (en rouge sur la capture d'écran) représentent bien la somme des données détaillées.

    Si impossible, il me faudrait alors calculer l'indicateur à la semaine de manière à avoir des résultats cohérents lorsque l'axe des temps est détaillé à la semaine. Effectivement cela deviendrait tordu lorsque l'utilisateur descend son analyse au jour mais ça serait moins faux par rapport à ce qui m'est demandé.

Discussions similaires

  1. Indemnité de stage non payée sur les 6 dernières semaines
    Par mvk44 dans le forum Droit du travail
    Réponses: 3
    Dernier message: 25/01/2011, 16h34
  2. Réponses: 4
    Dernier message: 07/05/2008, 10h53
  3. calcul de moyenne sur les bins d'un histogramme
    Par berlilou dans le forum MATLAB
    Réponses: 3
    Dernier message: 10/03/2008, 16h03
  4. [BO XI] Variable Moyenne sur les X dernieres semaines
    Par bandini dans le forum Débuter
    Réponses: 4
    Dernier message: 23/01/2008, 00h14
  5. moyenne sur les valeurs d'un même tableau
    Par DelphLaga dans le forum Langage
    Réponses: 12
    Dernier message: 25/09/2006, 11h35

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