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] Problème de perf avec requete MDX


Sujet :

SSRS

  1. #1
    Membre actif
    Inscrit en
    Avril 2005
    Messages
    644
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 644
    Points : 254
    Points
    254
    Par défaut [SSRS][2005] Problème de perf avec requete MDX
    Bonjour,

    J'ai une requete mdx qui est la suivante :
    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
    18
    19
    20
    21
    22
    23
    24
    SELECT 
    NON EMPTY 
    { [Measures].[Montant HT ligne Mandat],
    [Measures].[Cumul commandé HT Engagement], 
    [Measures].[Montant HT Engagement], 
    [Measures].[MNT HT LIG MAN HORS COM], 
    [Measures].[MNT HT LIG LIQ HORS COM], 
    [Measures].[Montant HT ligne] } ON COLUMNS, 
    NON EMPTY 
    { 
    ([Dim Exercice Budgetaire].[ETABLISSEMENT].[ETABLISSEMENT].ALLMEMBERS * 
    [Dim Exercice Budgetaire].[EXERCICE].[EXERCICE].ALLMEMBERS * 
    [Dim Engagement].[NUMERO PROP].[NUMERO PROP].ALLMEMBERS * 
    [Dim Engagement].[NUMERO].[NUMERO].ALLMEMBERS * 
    [Dim Compte].[COMPTE BUD].[COMPTE BUD].ALLMEMBERS * 
    [Dim Tiers].[NOM TIERS].[NOM TIERS].ALLMEMBERS * 
    [Dim Mandat].[STATUT].[STATUT].ALLMEMBERS * 
    [Dim Mandat].[CODES].[CODES].ALLMEMBERS ) 
    } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS 
    FROM 
    ( SELECT ( { [Dim Mandat].[STATUT].&[M] } ) ON COLUMNS 
    FROM 
    [CUbe])
    CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS
    J'ai le résultat en 1s...

    J'ajoute la ligne en rouge :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    with 
    member [Measures].[MandatRDP] as iif([Dim Mandat].[CODES].&[MDT], [Measures].[Montant HT ligne Mandat],0)
    SELECT 
    NON EMPTY 
    { [Measures].[Montant HT ligne Mandat],
    [Measures].[Cumul commandé HT Engagement], 
    [Measures].[Montant HT Engagement], 
    [Measures].[MNT HT LIG MAN HORS COM], 
    [Measures].[MNT HT LIG LIQ HORS COM], 
    [Measures].[Montant HT ligne] } ON COLUMNS, 
    NON EMPTY 
    { 
    ([Dim Exercice Budgetaire].[ETABLISSEMENT].[ETABLISSEMENT].ALLMEMBERS * 
    [Dim Exercice Budgetaire].[EXERCICE].[EXERCICE].ALLMEMBERS * 
    [Dim Engagement].[NUMERO PROP].[NUMERO PROP].ALLMEMBERS * 
    [Dim Engagement].[NUMERO].[NUMERO].ALLMEMBERS * 
    [Dim Compte].[COMPTE BUD].[COMPTE BUD].ALLMEMBERS * 
    [Dim Tiers].[NOM TIERS].[NOM TIERS].ALLMEMBERS * 
    [Dim Mandat].[STATUT].[STATUT].ALLMEMBERS * 
    [Dim Mandat].[CODES].[CODES].ALLMEMBERS ) 
    } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS 
    FROM 
    ( SELECT ( { [Dim Mandat].[STATUT].&[M] } ) ON COLUMNS 
    FROM 
    [Cube])
    CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS
    A ce moment là ma requete ne finit jamai de s'exécuter.
    Qqn pourrait me dire ce que je fais de mal, et comment faire pour améliorer les perf, sachant que je veux ajouter 2 autres mesures dans le "WITH MEMBER".

    Merci

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 269
    Points : 339
    Points
    339
    Par défaut
    Je pense que le problème de ton expression iif est qu'elle est évaluée pour toutes les cellules renvoyées par ta query (pas de bulk evaluation mode) et surtout elle renvoie une valeur pour chaque cellule (donc ton non empty ne sert à rien). Comme tu as énormément de crossjoin, ca prend tu temps.

    Essaie de remplacer ton "0" par null.

  3. #3
    Membre actif
    Inscrit en
    Avril 2005
    Messages
    644
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 644
    Points : 254
    Points
    254
    Par défaut
    merci mais ca ne change rien...tj hyper long.
    J'imagine que je dois calculer mes montants dans mon ETL?

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 269
    Points : 339
    Points
    339
    Par défaut
    Je viens de remarquer également la condition de ton iif

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iif([Dim Mandat].[CODES].&[MDT], [Measures].[Montant HT ligne Mandat],0)
    Tu ne devrais pas plutôt mettre ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iif([Dim Mandat].[CODES].currentmember is [Dim Mandat].[CODES].&[MDT], [Measures].[Montant HT ligne Mandat],0)
    Ca fonctionne de mettre directement le membre?

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 269
    Points : 339
    Points
    339
    Par défaut
    je vois également que tu fais des crossjoins que tu pourrais éviter.

    Ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [Dim Exercice Budgetaire].[ETABLISSEMENT].[ETABLISSEMENT].ALLMEMBERS * 
    [Dim Exercice Budgetaire].[EXERCICE].[EXERCICE].ALLMEMBERS
    Si tu fais une hiérarchie "Etablissement - Exercice", ou l'inverse, tu pourras éviter de faire ce crossjoin.

    En SSRS, si tu demande à avoir les membres d'un niveau d'un hiérarchie sur l'axe des rows, automatique, tu vas récupérer les membres parents de ce niveau.

    Donc dans l'exemple que je te donne, tu mets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    Dim Exercice Budgetaire].[ETABLISSEMENT - Exercice].[Exercice].ALLMEMBERS
    Et tu récupères automatiquement les établissement allant avec tes exercices.

  6. #6
    Membre actif
    Inscrit en
    Avril 2005
    Messages
    644
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 644
    Points : 254
    Points
    254
    Par défaut
    c'était un test que je faisais...
    J'avais essayé avec le "currentmember", sans plus de succes...
    MDX que du bonheur!!!

  7. #7
    Membre actif
    Inscrit en
    Avril 2005
    Messages
    644
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 644
    Points : 254
    Points
    254
    Par défaut
    pour les hierarchie je suis d'accord, faut que je le fasse...

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 269
    Points : 339
    Points
    339
    Par défaut
    Un truc que tu pourrais également faire, c'est créer une mesures invisible directement dans le script de ton cube puis placer un scope desssus. Le scope contiendrait ton iif.

    Ca améliorerait probablement les choses.

    Pour revenir sur les hiérarchies, tu n'es pas le seul à faire ce genre de chose. Dans la pratique cela fonctionne bien mais une fois qu'il faut faire des requêtes, c'est une autre histoire.

    La performance d'un cube et de membres calculés est quelque chose de très complexe. Bien sûr le mdx écrit est important mais il y a également d'autres facteurs (comme la création de hiérarchies, de relations d'attributs, d'aggrégations) sans oublier un bon design du star schema (je vois souvent cela en clientèle).

    Sans cela, on n'améliore la performance en collant des rustines et un jour, ca pête...

  9. #9
    Membre actif
    Inscrit en
    Avril 2005
    Messages
    644
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 644
    Points : 254
    Points
    254
    Par défaut
    oui ce doit etre mon cas pour les aggrégations, en meme temps je ne vois pas ce que c'est...

    Un truc que tu pourrais également faire, c'est créer une mesures invisible directement dans le script de ton cube puis placer un scope desssus. Le scope contiendrait ton iif.
    là c'est du chinois pour moi...

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 269
    Points : 339
    Points
    339
    Par défaut
    Dans le tab "script" de ton cube, tu peux placer le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    create member currentcube.[Measures].[MandatRDP]
    as
        null,
    visible = false;
     
    scope ([Measures].[MandatRDP], [Dim Mandat].[CODES].&[MDT]);
        this = [Measures].[Montant HT ligne Mandat];
    end scope;
    Et tu remplaces ta query par:

    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
    18
    19
    20
    21
    22
    23
    24
    25
     
    SELECT 
    NON EMPTY 
    { [Measures].[MandatRDP], [Measures].[Montant HT ligne Mandat],
    [Measures].[Cumul commandé HT Engagement], 
    [Measures].[Montant HT Engagement], 
    [Measures].[MNT HT LIG MAN HORS COM], 
    [Measures].[MNT HT LIG LIQ HORS COM], 
    [Measures].[Montant HT ligne] } ON COLUMNS, 
    NON EMPTY 
    { 
    ([Dim Exercice Budgetaire].[ETABLISSEMENT].[ETABLISSEMENT].ALLMEMBERS * 
    [Dim Exercice Budgetaire].[EXERCICE].[EXERCICE].ALLMEMBERS * 
    [Dim Engagement].[NUMERO PROP].[NUMERO PROP].ALLMEMBERS * 
    [Dim Engagement].[NUMERO].[NUMERO].ALLMEMBERS * 
    [Dim Compte].[COMPTE BUD].[COMPTE BUD].ALLMEMBERS * 
    [Dim Tiers].[NOM TIERS].[NOM TIERS].ALLMEMBERS * 
    [Dim Mandat].[STATUT].[STATUT].ALLMEMBERS * 
    [Dim Mandat].[CODES].[CODES].ALLMEMBERS ) 
    } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS 
    FROM 
    ( SELECT ( { [Dim Mandat].[STATUT].&[M] } ) ON COLUMNS 
    FROM 
    [Cube])
    CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS

Discussions similaires

  1. [2012] Problème de perf MDX entre 2005 et 2012
    Par Jinroh77 dans le forum SSAS
    Réponses: 16
    Dernier message: 17/09/2013, 13h50
  2. SQLSERVER 2005 - Pb de perfs avec la cmd top
    Par jeeps64 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 10/08/2009, 13h10
  3. Réponses: 3
    Dernier message: 14/04/2008, 16h17
  4. [Delphi 2005] : Problème avec MessageDlg.....
    Par babyface dans le forum Langage
    Réponses: 2
    Dernier message: 08/07/2005, 12h07
  5. Problème de perfs Sous requetes IN
    Par ias83 dans le forum SQL
    Réponses: 4
    Dernier message: 15/06/2005, 12h39

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