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

SSRS Discussion :

[SSRS][2005][MDX] Créer une mesure


Sujet :

SSRS

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    644
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 644
    Par défaut [SSRS][2005][MDX] Créer une mesure
    Bonjour,

    J'ai un dataset qui liste les ventes sur plusieurs années.
    Dans mon état je dois avoir une colonne du total des ventes de l'année n, de l'année n-1 et de l'année n-2.
    Je voudrai savoir comment peut on faire pour ca, sachant que l'année d'exercice est un paramètre.
    Je pensais créer une mesure pour chaque année, mais ca ne fonctionnera pas vu que'on est filtré sur l'année d'exercice et donc que je n'aurai pas les données des années antérieures...
    qq a une idée?
    merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 269
    Par défaut
    Tu crées un membre calculé dans ta query pour chaque valeur année-n (donc un pour année-1, année-2).

    Dans la définition de chaque membre calculé, tu utlise la fonction "parallelperiod". Ex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    with member [Measures].[N-1]
    as
        (parallelperiod([DimTemps].[CalendarTime].[Year], -1, strtomember(@ParamAnnee)), [Measures].[MesureAAfficher])
     
    select ...

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    644
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 644
    Par défaut
    le pb c'est que mon parametre "Année d'exercice" n'est pas basé sur ma dimension de temps...

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 269
    Par défaut
    C'est à dire?

    Tu ne peux pas t'arranger pour que ça le deviennent?

    Ex : sa valeur est "2002".

    Ton code devient donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    WITH member [Measures].[N-1]
    AS
        (parallelperiod([DimTemps].[CalendarTime].[Year], -1, strtomember('[DimTemps].[CalendarTime].&[' + CStr(@ParamAnnee) + ']')), [Measures].[MesureAAfficher])
     
    SELECT ...

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    644
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 644
    Par défaut
    Je ne vois pas comment je peux faire pour baser mon année d'exercice sur ma dimension de temps.
    J'ai une table dimExercice dans laquelle j'ai:
    id Année Société
    1 2000 Société1
    2 2001 Société1
    3 2002 Société1
    ...

    Dans ma table de fait j'ai
    IdFact IdExercice IdProduit MntVente
    1 1 1 1000
    2 1 2 2000
    3 1 3 3000
    4 2 1 10000
    5 2 2 20000
    6 3 1 10000000
    7 3 2 20000000
    ...

    Je ne vois pas comment faire pour rattacher ca à ma dimension de temps, ou alors faudrait tout exploser et là ca devient chaud...Trop d'impacts...
    Je tiens à signaler que j'ai récupérer le projet comme ca...

    Sinon j'ai tj l'option de faire ca dans SSIS, mais ca m'aurait eviter de modifier mon package et mon datawarehouse... et puis c'est pas terrible comme solution...

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 269
    Par défaut
    Ok, ta dimension de temps est différente de ta dimension exercice. Est-ce qu'une année d'exercice correspond à une année de ta dimension de temps?

    Si ton paramètre te renvoie une une valeur de type "2000" (comme expliqué dans l'exemple donné précédemment), tu devrais pouvoir appliqué la technique que je t'ai exposée juste avant.

    Tu n'as pas à te préocuper des id de clés utilisés dans les tables. C'est le moteur OLAP qui se chargera de te renvoyer les bons enregistrements...

  7. #7
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    644
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 644
    Par défaut
    ok, donc si ma dimension de temps pour les dates de vente dans mon cube s'appelle "date de vente", avec des attributs "ANNEE", "DATE", "MOIS"...
    J'ai pas de hierarchie.
    Je devrais mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    with member [Measures].[N1] as (parallelperiod([Date de vente].[ANNEE], -1, strtomember('[Date de vente].[ANNEE].&[' + CStr(@AnneeExercice) + ']')),  [Measures].[MNT Vente])
    ca devrait fonctionner?

  8. #8
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    644
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 644
    Par défaut
    Je viens de m'apercevoir que ma dimension de temps avait un type "regular"...
    Donc je l'ai mis en "Time"...
    Y a d'autres modifications à faire dans mon cube?

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 269
    Par défaut
    Il faut également spécifier le type de chaque attribut (comme pour la dimension).

    Donc "Année" aura le type "Year", "Mois" le type "Month", ...

    Par contre, "parallelperiod" prend en premier paramètre une expression de niveau. Donc, il faut que tu aies une hiérarchie de définie (je pense).

  10. #10
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    644
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 644
    Par défaut
    Donc j'ai fait tout ce que tu m'as dit...
    J'ai mis tous les type comme ca devait etre.
    J'ai créé une hiérarchie bidon dans laquelle je n'ai qu'un attribut "ANNEE"
    Et qd j'execute ma requete j'ai tj ce p***** de message "Requete en cours de préparation...." et ca scotche.
    Ma requete MDX :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      with member [Measures].[N1] as (parallelperiod([Date de Vente].[CalendarANNEE].[ANNEE], -1, strtomember('[Date de vente - Marché].[CalendarANNEE].[ANNEE].&[' + CStr(@DimExercice) + ']')),  [Measures].[MNT Vente
     
    SELECT NON EMPTY { [Measures].[N1] ,[Measures].[MNT Vente] } ON COLUMNS, 
    NON EMPTY { ([Dim Exercice ].[ETABLISSEMENT].[ETABLISSEMENT].ALLMEMBERS * [Dim Exercice].[EXERCICE].[EXERCICE].ALLMEMBERS * [Dim Produit].[NUMERO].[NUMERO].ALLMEMBERS * [Dim Produit].[LIBELLE].[LIBELLE].ALLMEMBERS * [Date de Vente].[DATE].[DATE].ALLMEMBERS ) } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS 
    FROM ( SELECT ( STRTOSET(@DimExercice, CONSTRAINED) ) ON COLUMNS 
    FROM [Cube]) CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS
    Y a un truc que je fais mal?

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 269
    Par défaut
    Bon y a déjà un truc qui me saute aux yeux, c'est que le niveau que tu spécifie dans la fonction parallelperiod n'est pas bon par rapport à ce que tu mets dans ton "strtomember".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      WITH member [Measures].[N1] AS (parallelperiod([Date de Vente].[CalendarANNEE].[ANNEE], -1, strtomember('[Date de vente - Marché].[CalendarANNEE].[ANNEE].&[' + CStr(@DimExercice) + ']')),  [Measures].[MNT Vente])
    Ca devrait plutôt être:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      WITH member [Measures].[N1] AS (parallelperiod([Date de Vente].[CalendarANNEE].[ANNEE], -1, strtomember('[Date de vente].[CalendarANNEE].[ANNEE].&[' + CStr(@DimExercice) + ']')),  [Measures].[MNT Vente])
    Vérifie bien aussi les parenthèses ouvrantes et fermantes.

    Puis pour valider ta query, exécute là dans le Management Studio en remplaçant ton paramètre par une de ses valeurs (donc le @DimExercice par '2000' par exemple). C'est plus simple. Une fois qu'elle est bonne, tu la copies colle dans ton dataset SSRS en remettant le paramètre.

    J'ai également noté que tu fait beaucoup de crossjoin et plusieurs fois sur des attributs différents d'une même dimension. Ca ne me parait pas très bon pour les perfs (enfin, sauf si ton cube contient très peu de données). Essaie de t'arranger pour éviter ça.

    Ex: tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Dim Produit].[NUMERO].[NUMERO].ALLMEMBERS * [Dim Produit].[LIBELLE].[LIBELLE].ALLMEMBERS
    Je suppose que c'est pour récupérer le numéro du produit ainsi que son libellé... Tu pourrais probablement éviter cela en créant un membre calculé récupérant le libellé du produit grâce à une "member property". Ou tu pourrais encore configurer la propriété "keycolumn" du numéro de produit à "Numero" et la propriété "namecolumn" à "libellé".

    Idem pour ta dimension exercice. A ce niveau là, tu pourrais probablement créer une hiérarchie "Etablissement - Exercice" ou l'inverse qui t'éviterait de faire un crossjoin entre les 2 attributs puisque en SSRS, lorsque tu récupère un membre d'un niveau donné d'une hiérarchie, le query designer inclut automatiquement les parents de ce membre (enfin, le parent de chaque niveau supérieur au niveau récupéré par ta query).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SSRS][2005][MDX] Left outer join en MDX
    Par geof dans le forum SSRS
    Réponses: 7
    Dernier message: 20/06/2008, 12h15
  2. Réponses: 2
    Dernier message: 17/06/2008, 09h52
  3. Réponses: 23
    Dernier message: 28/09/2007, 13h16
  4. [SQL SERVER 2005] comment créer une base de données ?
    Par Syrrus dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 13/03/2007, 14h26
  5. [C#/SQL Server 2005] Comment créer une base de donnée par le code ?
    Par FraktaL dans le forum Accès aux données
    Réponses: 4
    Dernier message: 09/09/2006, 17h27

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