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][2k5] Aide sur 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][2k5] Aide sur Requete MDX
    Bonjour,

    J'avais dejà posté ce post il y a qq temps, mais je n'ai tj pas reussi à trouver ce que je voulais.
    Donc, je voudrai filtrer des données, basées sur un cube SSAS 2005, entre 2 dates dans un rapport à partir de 2 parametres date: Date debut et date fin.
    Sachant que le filtre va se rapporter à ma dimention temps.
    J'ai vu qq trucs, mais je n'ai pas réussi à faire fonctionner mes requetes.
    Est ce que qq pourrai m'orienter?
    Merci.

  2. #2
    Membre éclairé
    Avatar de Reskibil
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 561
    Points : 815
    Points
    815
    Par défaut
    2 solutions :

    Soit tu mets un FROM et ton range de dates à partir de tes parametres (testé et approuvé)
    Soit un filter sur l'axe a filtrer du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    filter(
    [...]
    ,[Dim Time].[Date].currentmember.member_caption > "parametre from date" AND [Dim Time].[Date].currentmember.member_caption < "parametre to date"
    Moins garanti surtout si ton dataset n'est pas en OLE DB.

  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
    reskibil,
    merci pour ta super rapide reponse...

    tu me conseillerais de mettre ma requete Mdx en OLE DB? si oui pourquoi? je ne vois pas...

  4. #4
    Membre éclairé
    Avatar de Reskibil
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 561
    Points : 815
    Points
    815
    Par défaut
    D'un point de vue perso je met tout en OLE DB pour 2 raisons:
    - C'est plus flexible sur la forme du MDX et ca permet des trucs que la connexion SQL Server ne permet pas
    - C'est plus rapide (mais ca c'est peut etre lié à mes cubes)

    Inconvénient :
    - Il faut parfois tourner les requetes d'une facon peut intuitive car il concatene les noms de colonnes quand il y a des hierarchie donc on peut se rretrouver avec une valeur variable en nom de colonne et donc, ca plante le rapport si la valeur change forcément. Mais là, il suffit d'inverser ligne et colonne ou de créer des mesures bidons avec un nom fixe.

  5. #5
    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
    j'ai un enorme doute...j'ai le cerveau tout embrouillé...
    Voila dans ma source de données, j'ai bien une dimension de temps, mais dans mon cube j'en ai plein...
    C'est une base de données en rapport avec de la compta, et j'ai des dates concernant des truc,machin,bidule,chmilblik...Et dans mon cubes j'ai autant de hierarchies de temps que de dates associées à mes dimensions.
    par exemple dans mon cube j'ai:
    [date de Machin]
    [date de Truc]
    [date de Bidule]
    [date de validation de bidule]
    [date de solde de bidule]
    ...
    Est ce normal?

    Parce que, pour en revenir à ma requete qui doit etre filtrée sur une date de début et une date de fin, il faudrait que je filtre sur plusieurs hierarchies de temps...
    help!!

  6. #6
    Membre éclairé
    Avatar de Reskibil
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 561
    Points : 815
    Points
    815
    Par défaut
    Je connais pas ta base donc je peux pas te dire si c'est normal ou pas mais ca peut etre logique. Pour ma part, j'ai également des cas avec plusieurs dates (Issuing date, creation date, decision date ...) mais par contre, j'ai que 2 hierarchies communes à toutes les dates.
    Dnas le principe, une dimension temps dupliquée donc les hierarchies sont communes.
    C'est justement pour ce cas qu'on a commencé à utiliser du OLE DB car il permet de varier la valeur du parametre en passant d'une dim time à une autre facilement.

    Par exemple :
    Je veux faire la selection sur la creation date OU la issuing date

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT 
    [...]
    FROM ( SELECT ( STRTOSET ('{" + Parameters!date.value + "}', CONSTRAINED) ) ON 0
    FROM [Cube])
    Où le parametre date peut etre soit [Time Issuing].[Date].&[01/01/08], soit
    [Time creation].[Date].&[01/01/08] et ce dans un seul dataset.

    Pour le cas ou tu dois combiner la selection des dates entre elles, ca marche egalement. Là ou ca pose probleme (qui j'ai eu) c'est si tu dois filtrer une partie de tes données sur une date et l'autre partie sur une autre date, le tout pour le meme rapport. Là tu dois filtrer les mesures directement en fonction de ton parametre et ca flingue les perf.

    Donc pour ton cas, ca ajoute une 3e possibilité que j'avais oublié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WITH
    MEMBER [Somme] as SUM(iif([Dim Time].currentmember.member_caption > " + Parameters!from_date.value + " and [Dim Time].currentmember.member_caption < " + Parameters!to_date.value + ",[Ta mesure],null)
    Et tu filtre tes différentes mesures en fonction de la date que tu veux.
    Ce que tu peux faire egalement, c'est n'avoir qu'une date pour l'utilisateur mais qui filtre toutes mesures en la transformant dans le parametre du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ="[Dim time Creation].[date].[" & la date de l'utilisateur & "]"
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ="[Dim time issuing].[date].[" & la date de l'utilisateur & "]"
    dans un autre parametre. Les 2 parametres permettant ensuite de filtrer ton dataset.

  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
    merci pour toutes ces infos... ca me rassure un peu, parce que c'est pas moi qui est fait le cube...j'avais un doute sur le nb de hierarchies.

    Par contre concernant le code à employer j'ai rien compris...
    Je veux faire la selection sur la creation date OU la issuing date
    Code :
    SELECT
    [...]
    FROM ( SELECT ( STRTOSET ('{" + Parameters!date.value + "}', CONSTRAINED) ) ON 0
    FROM [Cube])Où le parametre date peut etre soit [Time Issuing].[Date].&[01/01/08], soit
    [Time creation].[Date].&[01/01/08] et ce dans un seul dataset.
    C'est du code que tu utilises avec une connection "OLE DB"?
    parce que "parameters!Date.value" n'est pas reconnu en connexion Analysis Services...

    Et tu filtre tes différentes mesures en fonction de la date que tu veux.
    Ce que tu peux faire egalement, c'est n'avoir qu'une date pour l'utilisateur mais qui filtre toutes mesures en la transformant dans le parametre du style
    Code :
    ="[Dim time Creation].[date].[" & la date de l'utilisateur & "]" et
    Code :
    ="[Dim time issuing].[date].[" & la date de l'utilisateur & "]" dans un autre parametre. Les 2 parametres permettant ensuite de filtrer ton dataset.
    c'est quoi les parameters de Style?

    Je suis loin...mais loin...
    Tout ca pour filtrer sur 2 dates!!

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 24
    Points : 25
    Points
    25
    Par défaut
    Dictionnaire des synonymes
    du style (de) : "comme", "tel que", "par exemple"

  9. #9
    Membre éclairé
    Avatar de Reskibil
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 561
    Points : 815
    Points
    815
    Par défaut
    Ce que tu peux faire egalement, c'est n'avoir qu'une date pour l'utilisateur mais qui filtre toutes mesures en la transformant dans le parametre. Du style :
    Voila ca doit etre plus clair là ;-)

    C'est du code que tu utilises avec une connection "OLE DB"?
    parce que "parameters!Date.value" n'est pas reconnu en connexion Analysis Services...
    Exactement. C'est ce que je disais sur le OLE DB. Ca permet d'insérer les parametres en tant que texte. Par contre, dès l'instant où tu as des "", il faut que ta requete entiere soit entre "".

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ="WITH
    MEMBER [TOTO] AS SUM([Dim Time].[Date].&[" + Parameters!Date.value + "], [Measures].[unemesure])
    SELECT
    [...]
    FROM CUBE
    WHERE blablabla"
    Dans un dataset en OLE DB, il va donc remplir les trous des parametres avec les valeurs puis va executer le dataset avec ces valeurs. Ca permet pas mal de trucs sympa. Au passage, petite précision, en OLE DB, pas besoin de déclarer les parametres dans le dataset puisque ce sont les parametres du rapport.

  10. #10
    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
    ok ok...j'étais loin pour le style...mais je l'avais mis que j'étais tres loin hier soir...

    Plus serieusement, en OLE DB qd je fais ma requete et que je veux remplir les champ de mon tableau je n'ai accès à rien ce qui peut etre normal, mais je fais comment pour renseigner les expressions des champs de mon tableau?
    Si je renseigne un champ avec un attribut que j'ai spécifié dans ma requete, j'ai une erreur comme quoi le champ "NomChamp" n'est pas dans l'étendu de mon dataset.

  11. #11
    Membre éclairé
    Avatar de Reskibil
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 561
    Points : 815
    Points
    815
    Par défaut
    Oui c'est normal. En fait il faut lancer une fois le dataset sans "" et sans parametre mais avec les valeurs pour qu'ils repere les champs. En gros, tu lances ton dataset avec le ! avec les valeurs. Tu vas dans les propriétés du dataset, onglet fields et là tu verra la liste des champs. Ensuite tu vire la requete avec valeurs et tu remet celle avec les parametres et ca va rouler.

    Attention toutefois, comme je l'ai dit, si tu as des hierarchie en colonne, il va les concatener pour sortir un nom de champ unique, par exemple :
    Dim_time_month_date et donc si tu as une valeur variable comme l'année en colonne, il va l'incorporer : Dim_time_2008_January_1, Dim_time_2008_January_2...

    Donc ca ca marche avec des champs fixes (comme les mesures par exemple). Sinon il faut créer une mesure bidon avec un nom fixe pour la valeur variable. Je m'explique :
    Voila un exemple que j'ai fait pou run de mes rapports :
    Je prend sur les colonnes une periode de 14 semaines mais la semaine de départ n'est pas figée, ca peut commencer n'importe ou donc le n° de semaine du nom du champ peut changer.
    Pour eviter ca, je crée une mesure bidon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MEMBER [Dim Time].[Calendar Week].[Week2] as '[Dim Time].[Calendar Week].[Week].&[" + Parameters!year.Value + "]&[" + Parameters!from_week2.Value + "]'
    Je garde la hierarchie (important) en y ajoutant un membre qui n'existe pas (Week2) et qui va prendre la valeur de ma semaine. Du coup, mon champ sera toujours nommé Dim_time_Calendar_Week_Week2 quelle que soit la semaine choisie.

    Dans le select, je prend donc ce champ:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT 
     
    {{{{[Dim Time].[Calendar Week].[prevyear]} + 
    {[Dim Time].[Calendar Week].[Week1]} +
    {[Dim Time].[Calendar Week].[Week2]}
    Et voila, mes colonnes ont des noms qui ne changent pas que je peux donc appeler dans mon rapport. C'est pas évident à expliquer sans l'avoir sous les yeux mais c'est la seule solution pour ce que j'avais besoin de faire et en connexion SQL Server, j'aurais pas pu.

  12. #12
    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
    Ok ca s'eclaircit un peu, mais j'ai pas trop compris l'histoire de renommage des parametres.

    bon donc j'ai une requete sans parametre qui fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ="SELECT NON EMPTY { [Measures].[Montant HT] } ON COLUMNS, NON EMPTY {([Dim Dimension].[NUMERO].[NUMERO].ALLMEMBERS * [Date de validation].[DATE].[DATE].ALLMEMBERS ) }  ON ROWS FROM [Win M9DW]"
    j'ajoute un filtre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ="SELECT NON EMPTY { [Measures].[Montant HT] } ON COLUMNS, NON EMPTY {filter( ([Dim Dimension].[NUMERO].[NUMERO].ALLMEMBERS * [Date de Validation].[DATE].[DATE].ALLMEMBERS ), [Date de Validtion].[DATE].currentmember.member_caption>="+parameters!FromDate.value+" and "+ [Date de Validation].[DATE].currentmember.member_caption<="+parameters!ToDate.value+)}  ON ROWS FROM [Win M9DW]"
    et là ca plante...
    l'erreur :
    TITRE*: Concepteur de rapports Microsoft
    ------------------------------

    Une erreur s'est produite lors de l'exécution de la requête.
    La référence d'objet n'est pas définie à une instance d'un objet.

    ------------------------------
    INFORMATIONS SUPPLÉMENTAIRES*:

    La référence d'objet n'est pas définie à une instance d'un objet. (System.Data)

    ------------------------------
    BOUTONS*:

    OK
    ------------------------------
    ca c'est l'erreur avec le "!".

    Par contre qd je vais sur l'onglet apercu elle a l'air de fonctionner mais en fait elle ne s'arrete pas...

    Mais ca vient peut etre du fait que j'ai pas trop compris l'histoire de renommage du parametre...

  13. #13
    Membre éclairé
    Avatar de Reskibil
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 561
    Points : 815
    Points
    815
    Par défaut
    Une fois que tu as mis tes parametres dans la requete, tu ne peux plus la lancer, il faut faire preview du rapport.

    Pour ta requete, il manque des trucs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ="SELECT NON EMPTY { [Measures].[Montant HT] } ON COLUMNS, 
    NON EMPTY 
    {filter( ([Dim Dimension].[NUMERO].[NUMERO].ALLMEMBERS 
    * [Date de Validation].[DATE].[DATE].ALLMEMBERS )
    , [Date de Validtion].[DATE].currentmember.member_caption>=" + parameters!FromDate.value + " a
    nd [Date de Validation].[DATE].currentmember.member_caption<=" + parameters!ToDate.value + " )}  
    ON ROWS 
    FROM [Win M9DW]"
    Là ca devrait etre mieux. Apres, il faut tester et adapter si ca marche toujours pas.

  14. #14
    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
    Excuse j'avais mal retranscrit ma requete, mais j'avais fait comme celle que t'as mis. je deviens bon...
    encore une petite question...qd je fais un preview de mon rapport, je dois renseigner un utilisateur et un mot de passe, ca me fait ca uniquement en connexion OLE DB. c'est normal?
    Et t'as un petite astuce pour modifier le format de la date de mon parametre?

  15. #15
    Membre éclairé
    Avatar de Reskibil
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 561
    Points : 815
    Points
    815
    Par défaut
    Pour login/Pwd, moi j'ai pas ca, peut etre que tu as mal fait ta source de données OLE DB. Il y a un onglet Credentials.

    Pour le format de date, il faut le faire dans le parametre ou si tu peux pas, dans un 2e parametre qui reprend le 1er en changeant le format et c'est ce 2e parametre que tu appelle dans ta requete.

  16. #16
    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
    Je voulais savoir aussi au niveau des performances qd tu fais un filtre sur une fourchette de date c'est acceptable? parce que pour moi ca rame un maximum...

  17. #17
    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
    Citation Envoyé par Reskibil Voir le message
    Pour login/Pwd, moi j'ai pas ca, peut etre que tu as mal fait ta source de données OLE DB. Il y a un onglet Credentials.

    Pour le format de date, il faut le faire dans le parametre ou si tu peux pas, dans un 2e parametre qui reprend le 1er en changeant le format et c'est ce 2e parametre que tu appelle dans ta requete.
    Je vais regarder le credential...

    En fait la date de ma base est de la forme "aaaa-mm-jj hh:mm:ss", avec un CDate(monparametre) j'obtiens le meme format que mon parametre "jj/mm/aaaa hh:mm:ss", ensuite je peux faire ma comparaison, ca te parait bon Master-es-Rapport?

  18. #18
    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
    Ma requete prends 5 minutes à s'exécuter avec un filter.
    Y a d'autres moyen de filtrer?
    ma requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ="SELECT NON EMPTY { [Measures].[Montant HT] } ON COLUMNS,
    NON EMPTY {
    filter( 
    ([Dim Dimension].[NUMERO].[NUMERO].ALLMEMBERS * [Date de Validation].[DATE].[DATE].ALLMEMBERS ), 
    [Date de Validation].[DATE].currentmember.member_caption>="+parameters!FromDate.value+")}  ON ROWS 
    FROM [Win M9DW]"

  19. #19
    Membre éclairé
    Avatar de Reskibil
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 561
    Points : 815
    Points
    815
    Par défaut
    Moi je pars du principe que tant que ca marche, c'est bon. C'est pas tres propre mais bon, ca fait son office. Par contre, il me semble que par défaut, le format des dates dans SSAS c'est plutot aa/mm/jj hh:mm:ss non ?

    Pour les perf, les range de date c'est l'horreur (c'est mon probleme en ce moment, avec en prime the YTD de l'année précédente et tout un bazar qui fait planter IE quand je lance le rapport, que du bonheur).

  20. #20
    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
    En fait elle a l'air de fonctionner, ca plante pas (c'est déjà ca), mais elle ne me renvoie rien.
    Par contre si je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iif(CDate(date de validation)>parametre_date,"Vrai","Faux")
    ce qui m'est renvoyé est cohérent.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [SSRS][2k5]Aide sur Requete MDX
    Par geof dans le forum SSRS
    Réponses: 1
    Dernier message: 27/03/2008, 20h58
  2. Aide sur Requete MDX
    Par geof dans le forum Développement
    Réponses: 19
    Dernier message: 03/03/2008, 20h00
  3. Aide sur Requete MDX
    Par geof dans le forum MS SQL Server
    Réponses: 19
    Dernier message: 03/03/2008, 20h00
  4. Aide sur requete MDX
    Par geof dans le forum Développement
    Réponses: 1
    Dernier message: 18/10/2007, 20h33
  5. Aide sur requete MDX
    Par geof dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 18/10/2007, 20h33

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