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 :

Utiliser une mesure comme dimension


Sujet :

SSAS

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Somme (Picardie)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 31
    Points : 21
    Points
    21
    Par défaut Utiliser une mesure comme dimension
    Bonjour,

    Je cherche à savoir s'il existe une astuce, un bout de code MDX permettant d'utiliser une mesure comme une dimension. Je m'explique.

    J'ai une mesure "Nombre de factures", dans une table de fait, analysables suivant les dimensions classiques que sont : Par clients, fournisseur, date, produits...

    J'ai besoin de calculer le nombre de clients ayant 0 factures, 1 facture, 2 factures... et continuer à pouvoir utiliser le filtrer sur les fournisseurs, produits, date...

    Est ce possible ?

    Requête MDX ?
    Membre calculé ?

  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
    Bah encore une fois ma vieille combine des tranches d'âge en tout dynamique de la mort. Après faut pas se plaindre si c'est pas aussi rapide qu'une vraie dimension. Mais si tu peux le modéliser en relationnel ce serait quand même plus performant. Et ça ferait plaisir aux plus Kimballiens de ce forum.

    Je te donne le truc à adapter: l'idée étant de générer une dimension technique avec toutes tes valeurs et de scoper dessus.

    http://fjehl.wordpress.com/2010/12/0...-temps-en-mdx/
    François JEHL
    BI Engineer | MVP SQL Server
    http://fjehl.wordpress.com
    Pour me contacter, par MP ou ici, mais pas pour des questions techniques.

    /*
    Avant de poster cherchez dans la FAQ et utilisez la fonction "Rechercher" du forum.
    Au moment de poster, posez votre question dans le bon sous-forum (Débuter, SSAS, SSRS, SSIS), en utilisant les TAGs prédéfinis ([2K], [2K5], [2K8], [2K8R2]).
    */

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Somme (Picardie)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    Ok merci. Nous cherchons depuis ce matin à l'aide de ton astuce 'Tranche d'âge' mais le problème est un peu différent. Nous n'avons pas de notions de temps.

    Nous avons bien créé la dimension technique : 0 facture, 1 facture, 2 factures mais ensuite comment la relier avec ma mesure issue de la table de FAIT ?

  4. #4
    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
    Bah en fait je viens de relire en entier: si ton truc ne peut pas - comme cela en a l'air - être géré côté SQL, tu vas devoir le faire en MDX.

    J'ai besoin de calculer le nombre de clients ayant 0 factures,...
    Heureusement que c'est juste pour les clients, on devrait pouvoir faire un truc.
    Prends ta dimension technique (Appelons la "Tranches Factures Clients").
    Si on reprend le même principe que mon post, tu vas scoper sur un truc comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SCOPE ([Tranche Factures Clients].[Tranche Factures Clients].[Tranche Factures Clients]);
       This = --On est sur la tranche de x à y
       Aggregate
       (
          [Tranche Factures Clients].[Tranche Factures Clients].DefaultMember
          *
          { Clients ayant entre x et y factures } 
       )
    END SCOPE;
    Le problème c'est que du coup ton expression de set va être un Filter entre les bornes... essaie d'abord ça, tu pourrais alors tenter un Exists(IIF( un peu comme ça en créant une mesure bidon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE MEMBER Measures.[Client est dans la Tranche]
    AS
    IIF
    (
       ([Client].[Client].CurrentMember,[Measures].[Nb Factures])
       >= 
       [Tranche Factures Clients].[Tranche  Factures Clients].CurrentMember.Properties("Borne Inf") 
       And 
       ([Client].[Client].CurrentMember,[Measures].[Nb Factures])
       <
       [Tranche Factures Clients].[Tranche  Factures Clients].CurrentMember.Properties("Borne Sup"),
       1,
       Null
    ), VISIBLE=0, NON_EMPTY_BEHAVIOR = {[Measures].[Nb Factures]}
    Et du coup mon expression de set (qui remplace { Clients ayant entre x et y factures } deviendrait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NonEmpty([Client].[Client].[Client],[Client est dans la Tranche])
    .

    Mais c'est expérimental.

    Sinon la solution de créer une mesure par tranche: avantage du coup tu peux utiliser un Sum(IIF) pattern et ça performera pas mal (cf Mosha: http://sqlblog.com/blogs/mosha/archi...ns-in-mdx.aspx). Mais par contre tu n'auras que le Count qui marche du coup. A tester.
    François JEHL
    BI Engineer | MVP SQL Server
    http://fjehl.wordpress.com
    Pour me contacter, par MP ou ici, mais pas pour des questions techniques.

    /*
    Avant de poster cherchez dans la FAQ et utilisez la fonction "Rechercher" du forum.
    Au moment de poster, posez votre question dans le bon sous-forum (Débuter, SSAS, SSRS, SSIS), en utilisant les TAGs prédéfinis ([2K], [2K5], [2K8], [2K8R2]).
    */

Discussions similaires

  1. [CR] Utiliser une collection comme source de données
    Par augereau dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 03/11/2006, 16h40
  2. comment utiliser une icone comme bouton
    Par othmane126 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 04/10/2006, 19h14
  3. Utiliser une variable comme nom de fichier
    Par lo00_ dans le forum MATLAB
    Réponses: 1
    Dernier message: 28/06/2006, 13h57
  4. Utiliser une Etiquette comme bouton
    Par pschmidtke dans le forum IHM
    Réponses: 6
    Dernier message: 07/06/2006, 14h48
  5. [curseurs] utiliser une variable comme nom de champ
    Par Christian31 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/09/2005, 14h12

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