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 :

Agréger un set [2008R2]


Sujet :

SSAS

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 48
    Points : 68
    Points
    68
    Par défaut Agréger un set
    Bonjour,

    Je cherche a realiser une requete qui vas me dire pour les membres d'un axe combien j'ai d'elements dans un autre axe par un toppercent


    Fonctionnellement j'arrive a avoir mon resultat avec un membre calculé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    with
    member measures.counttop80 as 'count(crossjoin( 
    	{[DIM1].[DIM1].currentmember}, 
    	TopPercent( 
    	nonempty( [DIM2].[DIM2].[Level 03].Members, [Measures].[Amount] ), 80, [Measures].[Amount] )
    evidement j'ai pas mal de membres dans DIM1 ce qui rend le resultat assez long...

    J'ai fait un test simple pour avoir le resultat hors comptage et la surprise c'est hyper rapide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    With 
     
    SET SET_Top80 as 'generate( 
    nonempty([dim1].[dim1].[Level 05].members,[Measures].[Amount]), 
    	crossjoin( 
    	{[DIM1].[Dim1].currentmember}, 
    	TopPercent( 
    	nonempty( [DIM2].[DIM2].[Level 03].Members, [Measures].[Amount] ), 80, [Measures].[Amount] ) 
    			 ))'
    si je selectionne le set j'ai bien pour chaque membre de dim1 (au niveau le plus fin) les elements de DIM2 qui font le 80%

    Dans mon jeux de données actuel la requete avec le set prend 2sec et celle sur le membre calculé prend 1 minute

    Celle qui prend 2 seconde me renvoie 3734 lignes, celle qui prend 1 minute renvoie 876 ligne (avec une mesure qui si je l'agrège fait bien 3734 donc fonctionnellement c'est bon)

    1/je ne comprend pas trop la différence de perf, peut etre la clef est le generate qui ne vas pas travailler comme le membre calculé qui liui vas faire une requête par element...
    2/est il possible qu'a partir du set je puisse avoir mon resultat final?je ne sais pas comment agréger le set pour avoir les membres de DIM1 et le count des membres de DIM2
    3/j'ai fait un serveur lié pour faire une requête SQL par dessus la requête MDX avec un simple group by et je m'en sors a 4secondes, j'aimerais avoir le meme temps de réponses en mdx pur


    En espérant avoir été clair

    Nicolas

  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
    Ta question en gros si je remplace par des trucs plus métier ce serait du genre c'est "combien de produits du Top 80% en CA chaque vendeur a vendu?"?
    Si je me trompe dis moi.

    Alors la solution ce serait de calculer le Top 80% dans un set, car ce top est calculé une fois dans le contexte de la requête et valide pour tous les membres.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    WITH SET [Top80Produits]
    AS
    TopPercent
    ( 
    	[Produit].[Produits].[Level 03].Members, 
    	80,
    	[Measures].[Amount] 
    )
    Et ensuite le membre calculé qui fait simplement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    MEMBER [NbDansTop80Produits]
    AS
    Count
    (
    	Exists
    	(
    		[Produit].[Produits].[Level 03].Members
    		,,"Ventes"
    	)
    )
    Pour ta différence de perfs, ça vient principalement du fait que ton Set est Existé dans le contexte global de la requête, alors que ton NonEmpty dans le member entraîne un Exists sur tous les produits par appel. D'ou si tu le monitores avec MDX Studio une grosse différence au niveau des Query Subcube.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 48
    Points : 68
    Points
    68
    Par défaut
    Bonjour françois et merci pour ta réponse.
    Focntionnellement c'est pas tout a fait ça.
    En restant dans ton cas metier je dirais que pour chaque vendeur je veut savoir combien il a fallu de produit pour atteindre 80% de ses ventes
    donc les produits varient d'un vendeur a l'autre pour constituer le top 80 (dans ton cas fonctionnel on calcul le top 80 au global et on regarde ceux de ce panel qui ont été vendu pour chaque vendeur)

    D'ou le fait que j'utilise un generate.
    Dans mes 2 exemple j'ai:
    Cas 1 : je genere ce top 80 et ca vas tres vite, mon resultset a bien pour chaque "vendeur" la liste des produits de son top 80, mais je ne veux pas cette liste je veux juste savoir combien il en a fallu.
    J'ai donc essayé de mettre ca dans un membre calculé et boum les perfs explosent

    Mais en ajoutant la clause exists a l'interieur de ma mesure je retrouve des temps de réponse très raisonnables!
    J'en ai profité pour lire ton article sur les exists, je suis un peu rouillé en mdx ca m'a bien remis les idées en place, encore merci!

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

Discussions similaires

  1. set term ^
    Par tux dans le forum Débuter
    Réponses: 8
    Dernier message: 12/10/2004, 20h42
  2. Créer les get et set des classes
    Par cameleon2002 dans le forum JBuilder
    Réponses: 3
    Dernier message: 17/09/2003, 21h03
  3. IB 6.0.1 - Win XP - Character Set
    Par SuperTotor dans le forum InterBase
    Réponses: 4
    Dernier message: 03/06/2003, 20h25
  4. Query data set
    Par Sandra dans le forum JBuilder
    Réponses: 3
    Dernier message: 20/01/2003, 10h08
  5. character set // Nls_lang
    Par fopicht dans le forum Oracle
    Réponses: 2
    Dernier message: 23/05/2002, 12h04

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