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

Jasper Discussion :

[Cube/MDX] Calcul différent selon la hierarchie


Sujet :

Jasper

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 57
    Points : 50
    Points
    50
    Par défaut [Résolu][Cube/MDX] Calcul différent selon la hierarchie
    Bonjour,

    je débute en mdx/xmla, et autant la prise en main est aisée, et les capacités puissantes autant j'ai du mal à résoudre mon problème :

    J'ai un cube qui tourne sur 5 dimensions, la dedans, j'ai 2 mesures, une somme de qté ok, et une somme de qté totales.

    J'ai un CalculatedMember qui divise l'un par l'autre pour avoir un %, tout va bien, je mets les couleurs en fonction d'une marge, ça calcule vite, et les résultats sont pertinents, de la balle.

    Seulement j'apprends qu'il existe une règle dans mon calcul : A partir d'un certain seuil dans une hierarchie, je ne doit plus diviser les sommes de la population en cours, mais multiplier les % les constituants, et la je bloque, j'ai vu que je pouvais tester le niveau de la hierarchie, voila mon cube avec mon test sur le niveau de hierarchie qui m'interresse :

    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
    27
    28
    29
    30
    31
    32
    33
     
      <Cube name="EvolutionFPY" caption="EvolutionFPY" cache="true" enabled="true">
        <Table name="fait_fpy">
        </Table>
        <DimensionUsage source="Temps" name="Temps" caption="Temps" foreignKey="ffy_tps_id">
        </DimensionUsage>
        <DimensionUsage source="Produit" name="Produit" caption="Produit" foreignKey="ffy_pdt_id">
        </DimensionUsage>
        <DimensionUsage source="Etablissement" name="Etablissement" caption="Etablissement" foreignKey="ffy_etb_id">
        </DimensionUsage>
        <DimensionUsage source="Client" name="Client" caption="Client" foreignKey="ffy_dct_id">
        </DimensionUsage>
        <DimensionUsage source="Utilisateur" name="Utilisateur" caption="Utilisateur" foreignKey="ffy_utl_id">
        </DimensionUsage>
        <Measure name="SOMME_QTE_OK" column="ffy_qte_ok" datatype="Numeric" formatString="### ###" aggregator="sum" visible="true">
        </Measure>
        <Measure name="SOMME_QTE_TOT" column="ffy_qte_tot" datatype="Numeric" formatString="### ###" aggregator="sum" visible="true">
        </Measure>
        <CalculatedMember name="FPY_TOT" caption="FPY" dimension="Measures" visible="true">
          <Formula>
            <![CDATA[CASE
            WHEN
             [Etablissement].CurrentMember.Level.Name = "Poste de saisie"
            THEN
              4
            ELSE
              [Measures].[SOMME_QTE_OK]/[Measures].[SOMME_QTE_TOT]
            END]]>
          </Formula>
          <CalculatedMemberProperty name="FORMAT_STRING" expression="Iif([Measures].[FPY_TOT] < 1, Iif([Measures].[FPY_TOT] < 0.9, '|0.00|style=red', '|0.00|style=yellow'), '|0.00|style=green')">
          </CalculatedMemberProperty>
        </CalculatedMember>
      </Cube>
    et voila la dimension et sa hierarchie, en gros en dessous de Poste de saisie, je divise les sommes.

    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
     
      <Dimension type="StandardDimension" name="Etablissement" caption="Etablissement">
        <Hierarchy hasAll="true" allMemberName="Tous les etablissements" primaryKey="etb_id" caption="Etablissement">
          <Table name="dim_etablissement">
          </Table>
          <Level name="Poste de charge" column="etb_pdc" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never" caption="Etablissement">
          </Level>
          <Level name="Poste de saisie" column="etb_pds" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never" caption="Etablissement">
          </Level>
          <Level name="Equipement" column="etb_eqp" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never" caption="Etablissement">
          </Level>
          <Level name="Code Etablissement" column="etb_code" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never" caption="Etablissement">
          </Level>
        </Hierarchy>
      </Dimension>
    Mais je ne sais pas comment récupérer les résulats des niveaux inférieurs pour les multiplier, ni même si c'est possible.

    Je sèche, si vous avez un indice ou je pourrais chercher, je vous en rendrais milles grâces.
    De Catalunya fins Tolosa de Llengadoc.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 57
    Points : 50
    Points
    50
    Par défaut
    J'ai finalement trouvé comment naviguer dans les enfants, avec Descendants, il ne me restait plus qu'a lever le problème des aggrégations uniquement en somme, pour les transformer en aggrégations en produits, un peu de mathématiques et de logarythmes ( oui oui rappellez vous log(a*b) = log(a) + log(b)) et le tour est joué :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     WHEN
     
             [Etablissement].CurrentMember.Level.Name = "Poste de charge"
     
            THEN
     
             Power( 10, Sum( Descendants( Etablissement.CurrentMember, Etablissement.[Poste de saisie] ), log10( [Measures].[SOMME_QTE_OK] / [Measures].[SOMME_QTE_TOT] )  ) )
     
            ELSE
     
              [Measures].[SOMME_QTE_OK]/[Measures].[SOMME_QTE_TOT]
    Je mets la réponse ici, ça pourra servir à d'autres.
    De Catalunya fins Tolosa de Llengadoc.

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/04/2010, 21h02
  2. Affichage différent selon texte dans une case
    Par pingoo78 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/11/2005, 16h32
  3. tailles d'input différentes selon les postes (?)
    Par mch_27 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 26/10/2005, 11h21
  4. [Interface graphique]Composant différents selon le PC
    Par Cyborg289 dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 01/08/2005, 10h05
  5. CSS : fichier include différent selon chaque resolution
    Par Sylvain245 dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 31/03/2005, 17h57

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