Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > Autres
Autres Autres logiciels d'informatique décisionnelle, de statistiques, générateurs d’états ou outils infocentre : EpiInfo, FreeReport, FastReport, Hyperion, JPivot, QuickReport, Mondrian, ReportBuilder, Stata, Spad, Spss, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/12/2011, 15h43   #1
Invité de passage
 
Homme
Consultant en Business Intelligence
Inscription : décembre 2011
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : décembre 2011
Messages : 2
Points : 0
Points : 0
Par défaut Comment filtrer un cube sur une période ?

Bonjour,

Je souhaite filtrer un cube sur une période donnée.

Au départ, j'avais créé dans mon cube une dimension de type "TimeDimension" avec 4 niveaux (Année, Trimestre, Mois et Jour), et je filtrais ainsi :

WITH MEMBER [Date].[Toutes les dates].[annee].[quarter].[mois].[Du ${jourdebut}/${moisdebut}/${anneedebut} au ${jourfin}/${moisfin}/${anneefin}] AS
Aggregate([Date].[Toutes les dates].[${anneedebut}].[${quarterdebut}].[${moisdebut}].[${jourdebut}] : [Date].[Toutes les dates].[${anneefin}].[${quarterfin}].[${moisfin}].[${jourfin}])
select NON EMPTY {[Measures].[Nombre 1], [Measures].[Nombre 2]} ON COLUMNS,
NON EMPTY {[Zone].[Toutes les zones]} ON ROWS
from [MonCube]
where ([Date].[Toutes les dates].[annee].[quarter].[mois].[Du ${jourdebut}/${moisdebut}/${anneedebut} au ${jourfin}/${moisfin}/${anneefin}])


Chaque paramètre ${x} est le résultat d'une sélection d'un paramètre de mon appli (SpagoBI en l’occurrence).
Cela marchait bien.

Le problème est que pour arriver à ce résultat, l'utilisateur doit renseigner 8 paramètres. C'est donc beaucoup trop lourd.
L'idée est donc de ne sélectionner en entrée qu'une date de début et de fin.

J'ai donc créé une nouvelle dimension avec seulement le champs date qui est de type String (car le type date ne passe pas avec ma BD - Sybase IQ -). Ce champ s'écrit ainsi : "2011-05-30".
J'ai donc pensé parser le résultat du paramètre avec la fonction 'Mid'. Et je me suis dit que j'allais adapter ma requête MDX ainsi :

WITH MEMBER [Date].[Toutes les dates].[annee].[quarter].[mois].[Du ${datedebut} au ${datefin}] AS
Aggregate([Date].[Toutes les dates].['Mid(${datedebut},1,4)'].[A calculer].['Mid(${datedebut},6,2)'].['Mid(${datedebut},9,2)'] : [Date].[Toutes les dates].['Mid(${datefin},1,4)'].[A calculer].['Mid(${datefin},6,2)'].['Mid(${datefin},9,2)]')
select NON EMPTY {[Measures].[Nombre 1], [Measures].[Nombre 2]} ON COLUMNS,
NON EMPTY {[Zone].[Toutes les zones]} ON ROWS
from [MonCube]
where ([Date].[Toutes les dates].[annee].[quarter].[mois].[Du ${datedebut} au ${datefin}])


La fonction Mid récupère bien l'année, le mois et jour (pour le quarter, je m'en sortirai avec des Iif). En revanche, la requête MDX ne récupère pas le résultat de la fonction, mais la fonction entière.

Par exemple, si mon paramètre $datedebut="2011-05-30" et $datefin="2011-06-30", alors la requête MDX est :
WITH MEMBER [Date].[Toutes les dates].[annee].[quarter].[mois].[Du 2011-05-30 au 2011-06-30}] AS
Aggregate([Date].[Toutes les dates].['Mid(2011-05-30,1,4)'].[A calculer].['Mid(2011-05-30,6,2)'].['Mid(2011-05-30,9,2)'] : [Date].[Toutes les dates].['Mid(2011-06-30,1,4)'].[A calculer].['Mid(2011-06-30,6,2)'].['Mid(2011-06-30,9,2)'])
select NON EMPTY {[Measures].[Nombre 1], [Measures].[Nombre 2]} ON COLUMNS,
NON EMPTY {[Zone].[Toutes les zones]} ON ROWS
from [MonCube]
where ([Date].[Toutes les dates].[annee].[quarter].[mois].[Du ${datedebut} au ${datefin}])


mais j'ai l'erreur suivante :
Mondrian Error:Failed to parse query 'WITH MEMBER[Date].[Toutes les dates].[annee].[quarter].[mois].[Du 2011-05-30 au 2011-06-30}] as Aggregate([Date].[Toutes les dates].['Mid("2011-05-30",1,4)'].[Trimestre 2].['Mid("2011-05-30",6,2)'].['Mid("2011-05-30",9,2)'])

Evidemment l'année 'Mid("2011-05-30",1,4)' n'existe pas dans mon cube. C'est bien l'année 2011 qui existe.
La fonction Mid me renvoie les bons résultats ('Mid("2011-05-30",1,4)'=2011, 'Mid("2011-05-30",6,2)'=05, 'Mid("2011-05-30",9,2)'=30).

Il faudrait que le résultat de la requête MDX soit :
WITH MEMBER [Date].[Toutes les dates].[annee].[quarter].[mois].[Du 2011-05-30 au 2011-06-30}] AS
Aggregate([Date].[Toutes les dates].[2011].[A calculer].[05].[30] : [Date].[Toutes les dates].[2011].[A calculer].[06].[30])
select NON EMPTY {[Measures].[Nombre 1], [Measures].[Nombre 2]} ON COLUMNS,
NON EMPTY {[Zone].[Toutes les zones]} ON ROWS
from [MonCube]
where ([Date].[Toutes les dates].[annee].[quarter].[mois].[Du ${datedebut} au ${datefin}])


Le problème vient du fait que ma fonction est à l'intérieur d'un membre de ma dimension. Il faudrait que j'arrive à échapper ma fonction pour qu'elle soit exécutée avant l'exécution de la requête MDX.

Quelle est alors la bonne syntaxe ? J'ai essayé avec le & ([Date].[Toutes les dates].&['Mid("2011-05-30",1,4)']), avec des +, ...
Mais rien n'y fait.

Merci de votre aide.
aolliet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 10h05   #2
Invité de passage
 
Homme
Consultant en Business Intelligence
Inscription : décembre 2011
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : décembre 2011
Messages : 2
Points : 0
Points : 0
En fait, je croyais que pour filtrer sur une période, il fallait que la dimension portant sur les dates soit de type 'TimeDimension'.
Mais ce n'est pas la peine. Une Dimension standard suffit.
J'ai donc ajouté le niveau 'Date' dans ma dimension Date, et effectué le filtre sur la période avec :

WITH MEMBER [Date].[Toutes les dates].[annee].[quarter].[mois].[jour].[Du ${datedebut} au ${datefin}] AS
Aggregate([Date].[Date].[${datedebut}] : [Date].[Date].[${datefin}])
select NON EMPTY {[Measures].[Nombre 1], [Measures].[Nombre 2]} ON COLUMNS,
NON EMPTY {[Zone].[Toutes les zones]} ON ROWS
from [MonCube]
where ([Date].[Toutes les dates].[annee].[quarter].[mois].[jour].[Du ${datedebut} au ${datefin}])
aolliet est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h17.


 
 
 
 
Partenaires

Hébergement Web