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 :

Mise en place d'un script


Sujet :

SSAS

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 24
    Points : 12
    Points
    12
    Par défaut Mise en place d'un script
    Bonjour,
    Je souhaiterais faire un calcul de statistique en utilisant un cube OLAP dont le schéma est joint.
    Je souhaiterais effectuer un taux standardisé qui est obtenu de la façon suivante: Le calcul du PI et le calcul du TI
    Pour le PI la formule est la suivante:
    Au numérateur on le (nombre d'individus de la classe d'age i, de sexe j et de typeactivite z/ le nombre total des individus des différentes classes
    pour une zone géographique)
    exemple: si je prends les personnes des 15-19 et 25-30 ans pour l'age, de sexe masculin qui habitent dans le Rhône, le calcul est le suivant:
    (nombre des 15-19 ans,Masculin habitant dans le Rhône)/(nombre des des 15-19 ans et 25-30 ans,Masculin habitant dans le Rhône)

    Pour le calcul du TI:

    si je prends les personnes des 15-19 et 25-30 ans pour l'age, de sexe masculin qui sont chômeurs qui habitent dans le Rhône, le calcul est le suivant:
    (nombre des 15-19 ans,Masculin, chômeurs habitant dans le Rhône)/(nombre des des 15-19 ans et 25-30 ans,Masculin, chômeurs habitant dans le Rhône).

    Enfin le taux s'obtient en multipliant ces deux mesures.

    Je souhaiterais mettre ça en place dans un membre calculé ou dans un script
    afin de pouvoir faire des analyses sur excel, ou powerpivot afin que lorsque l'utilisateur choisit ces paramètres, les mesures se calculent automatiquement.
    Images attachées Images attachées  

  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
    Et vous n'avez pas essayé un embryon de requête? Je veux dire, sans méchanceté hein, mais c'est un forum technique, pas un générateur de MDX à partir de specs

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Je le poste ce soir mea culpa, car le script est sur mon PC.
    Désolé

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Bonsoir,

    J'ai essayé cette requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    WITH 
    MEMBER POPTOTALE as
     
    	(
    		[Measures].[Population Sexe Age TA],
    		([Sexe].[Hiérarchie].[Sexe].currentmember*[Age]. [Hiérarchie].[Age].currentmember)
    	)
     
    SELECT
    {[Measures].[Population Sexe Age TA],POPTOTALE} on 0,
    ([Sexe].[Hiérarchie].[Sexe],
    {([Age].[Hiérarchie].[Age].&[1]),([Age].[Hiérarchie].[Age].&[2]),([Age].[Hiérarchie].[Age].&[3])}) ON 1
     FROM [CUBE_ORSDWBIS];
    Pour le POPTOTALE j'obtient #Erreur car tend la fonction currentmember attend une expression de hierarchie.
    C'est que je souhaiterais choisir n'importe quel age age et sexe et la je bloque

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    j'ai résolu le problème d'erreur mais malheureusement je n'arrive plus à agréger le total par age et par sexe.
    En effet je souhaiterais ensuite intégrer ce membre calculer afin que lorsque l'utilisateur se connecte au cube avec excel et qu'il selectionne la mesure tout soit ok.
    Voici le requete que j'effectue:
    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
    WITH 
    MEMBER [Measures].[TESTTOTAL] AS
    aggregate
    (  crossjoin
      ([Sexe].[Hiérarchie].currentmember
       ,  
       [Age].[Hiérarchie].currentmember)
       ,[Measures].[Population Sexe Age TA]
    )
    select
    {[Measures].[Population Sexe Age TA],[Measures].[TESTTOTAL]} on 0,
    {[Sexe].[Hiérarchie].[Sexe].&[1],[Sexe].[Hiérarchie].[Sexe].&[2]}
    *
    {
    	([Age].[Hiérarchie].[Age].&[1]),
    	([Age].[Hiérarchie].[Age].&[2]),
    	([Age].[Hiérarchie].[Age].&[3])
    }
     on 1
    from [CUBE_ORSDWBIS];
    Et j'obtiens :
    Sexe Age Population TA TESTTOTAL
    Masculin 15 à 19 ans 2070115,833117 2070115,833117
    Masculin 20 à 24 ans 2002809,095835 2002809,095835
    Masculin 25 à 29 ans 1969003,433681 1969003,433681
    Feminin 15 à 19 ans 1975199,785228 1975199,785228
    Feminin 20 à 24 ans 1988746,745444 1988746,745444
    Feminin 25 à 29 ans 2017885,696774 2017885,696774

    Alors que je souhaiterais obtenir :
    Sexe Age Population TA TESTTOTAL
    Masculin 15 à 19 ans 2070115,833 6041928,363
    Masculin 20 à 24 ans 2002809,096 6041928,363
    Masculin 25 à 29 ans 1969003,434 6041928,363
    Feminin 15 à 19 ans 1975199,785 5981832,227
    Feminin 20 à 24 ans 1988746,745 5981832,227
    Feminin 25 à 29 ans 2017885,697 5981832,227

    Et franchement je rame dessus depuis un bon moment.
    Merci d'avance

  6. #6
    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
    Donc en résumé quand vous prenez un ensemble d'âges {Ax, Ay, Az} la valeur de la mesure doît être égale au ratio du premier âge sur les autres.

    Alors si vous faîtes un truc de ce style, pas vérifié, ça devrait correspondre à votre besoin je pense.

    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
    WITH 
    SET [QueryContextAges]
    AS
    [Age].[Hiérarchie].[Age]
     
    MEMBER [Measures].[Ratio] AS
    (
     
       NonEmpty
       (
          Existing [QueryContextAges],
          [Measures].[Population Sexe Age TA]
       ).Item(0),
       [Measures].[Population Sexe Age TA]
    )
    /
    [Measures].[Population Sexe Age TA]
    EDIT: Merci aussi de préciser la version, si supérieure à 2008, cela permet d'utiliser les DYNAMIC SET dans le script MDX pour détecter les multisélecitons dans un sous cube.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    Je vous remercie, je vais tester je vous assure que j'ai essayé tout le week end à trouver une solution en vain.
    Auriez vous des liens vers vers divers documentation ou vers le nom de livres qui traitent de genre.
    La version utilisé est Microsoft SQL server 2008 R2.
    De plus, j'ai pris note de vos recommendations.

  8. #8
    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
    Les docs en ligne sur MDX sont faméliques. On peut cependant conseiller de visiter le site http://www.ssas-info.com et d'acheter le très récent MDX cookbook, de très bonne facture et qui permet de répondre à ce type de problématique avancée:
    http://www.amazon.co.uk/Microsoft-Se.../dp/1849681309

    En revanche ne pas miser trop sur des ressources en français, hormis cet ebook de Dominique Verrière.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Je vous remercie pour la liste des livres et j'ai acquéris le livre de Dominique Verriere qui permet d'avoir de bonnes bases.
    Je viens d'essayer la requete MDX, il me calcul le ratio sur la population total du sexe selectionnée toute categorie d'age confondu et non sur le total de la population selectionée.

  10. #10
    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
    Oui faute d'innatention... Vous auriez pu essayer de la corriger, c'est comme ça qu'on apprend vous savez ... Enfin bref.

    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
    WITH 
    SET [QueryContextAges]
    AS
    [Age].[Hiérarchie].[Age]
     
    MEMBER [Measures].[Ratio] AS
    (
     
       NonEmpty
       (
          Existing [QueryContextAges],
          [Measures].[Population Sexe Age TA]
       ).Item(0),
       [Measures].[Population Sexe Age TA]
    )
    /
    Aggregate
    (
       NonEmpty
       (
          Existing [QueryContextAges],
          [Measures].[Population Sexe Age TA]
       ),
       [Measures].[Population Sexe Age TA]
    )

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    J'ai essayé le code suivant sans trop y croire et c'est OK, par contre je ne comprends pas pourquoi votre code ne fonctionne pas car vous agréger et malheureusement j'obtiens toujours 1 pour le ratio.
    Et je vous assure que je cherche je me noie même dans la doc, mais le problème est que je n'ai pas compris votre instruction auriez vous l'amabilité de me l'expliquer?
    PS: j'ai tenu compte de vos remarques

    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
     
    WITH 
       MEMBER [Measures].[Test] AS 
      [Measures].[Population Sexe Age TA]/
      Sum
         ( 
          ( 
            Axis(1)
           )
          ,[Measures].[Population Sexe Age TA]
         ) 
     SELECT 
       {[Measures].[Population Sexe Age TA]
       ,[Measures].[Test]
       } ON 0
      ,NON EMPTY(
      [Sexe].[Sexe].&[1]
      ,{ 
    	[Age].[Age].&[1]
      ,[Age].[Age].&[2]
      ,[Age].[Age].&[3]
      ,[Age].[Age].&[4]
           }
         ) ON 1
     FROM [CUBESTAGE];

  12. #12
    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
    Mea culpa pour ce coup ci, en regardant votre requête c'est normal qu'il ne marche pas vraiment, j'avais lu en diagonale et compris que vous travailliez avec des filtres.
    Ce que vous voulez faire est effectivement assez compliqué sans utiliser la fonction Axis(). En effet il faudrait être capable de capturer les membres de Age utilisés en requête (mon SET capture les filtres/sous cubes) ce qui n'est pas trivial.
    Le problème que vous allez rencontrer avec Axis c'est que c'est très peu tolérant, à savoir que si vous cross joinez les axes dans un outil client le résultat sera différent...
    Mais pour un besoin de ce genre (i.e. un ratio des sélections en ligne, donc une détection de la séleciton dans une requête) vous ne pouvez hélas pas vraiment faire autrement.

  13. #13
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Donc si je connecte excel à mon cube je serais obliger de mettre tous ce que je dois sélectionner sur les lignes?
    Autrement, je souhaiterais savoir si dans mon cas la commande scope pouvait m'aider.

  14. #14
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Bonjour,
    La mise en place de ce calcul touche presque à sa fin.
    En effet, en executant la requête MDX suivante j'obtiens le résulat voulu:
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    WITH
    MEMBER [Measures].[Ratio PI] 
    AS
    Aggregate
    (
     {[Geographie].[Lieu].[Pays].members}
       *
       {[Type Activte].[Type Activite].&[1]:[Type Activte].[Type Activite].&[6]},
       [Measures].[Population Sexe Age TA])
    /
    Aggregate
    (
       {
        ([Age].[Age].&[1]),
        ([Age].[Age].&[2]),
        ([Age].[Age].&[3])
       }
       *{[Geographie].[Lieu].[Pays].members}
       *{[Type Activte].[Type Activite].&[1]:[Type Activte].[Type Activite].&[6]},
       [Measures].[Population Sexe Age TA]
    ) 
    MEMBER [Measures].[Ratio TI] AS
    Aggregate
    (
        {[Type Activte].[Type Activite].currentmember},
       [Measures].[Population Sexe Age TA])
    /
     
    Aggregate
    (
       {[Type Activte].[Type Activite].&[1],[Type Activte].[Type Activite].&[2]},
       [Measures].[Population Sexe Age TA]
    ) 
    MEMBER [Measures].[Taux Standardise] AS
    (
    	[Measures].[Ratio PI]
    	*
    	[Measures].[Ratio TI]
    	*100
    )
    SELECT 
    {
       [Measures].[Ratio PI],
       [Measures].[Population Sexe Age TA],
       [Measures].[Ratio TI],
       [Measures].[Taux Standardise]
    }
    ON 0,
    [Sexe].[Sexe].&[1]
       *
       {
           ([Age].[Age].&[1]),
           ([Age].[Age].&[2]),
           ([Age].[Age].&[3])
       } *{[Type Activte].[Type Activite].&[1],[Type Activte].[Type Activite].&[2]}
       *{[Geographie].[Lieu].[Ville].&[1001],[Geographie].[Lieu].[Ville].&[1002]}
    ON 1
    FROM [CUBESTAGE]
    Toutefois je ne sais pas comment faire pour que ma requete prennent dans le calcul de la mesure:[Measures].[Ratio PI] dynamiquement l'age selectionné et dans le calcul de la mesure:[Measures].[Ratio TI] dynamiquement le type d'activite.
    Il doit y avoir une astuce, peut etre en utilsant un sous cube ou un scope pour forcer la requete à se focaliser que sur ces éléments(j'ai essayé mais ca n'a rien donné ).
    Et je vous assure si j'arrive à mettre en place celà j'écrirais un tuto qui pourra être diffusé (avec votre permission bien sur).

    Au fait, tous ces caculs vont être intégrer dans des membres calculé sous BIDS et l'utilisateur final aura comme front end Excel 2010.

    Je me demandais si ce problème ne pouvait être contourné en utilisant SSRS.
    Vu que l'âge et le type d'activté sont des paramètres choisies par l'utilisateur, SSRS devrait pouvoir y récupérer?

Discussions similaires

  1. [ZF2] cron, mise en place de script auto
    Par badstring dans le forum Zend Framework
    Réponses: 0
    Dernier message: 10/12/2014, 16h58
  2. [MySQL] Mise en place d'un script
    Par muriellelapuce dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 05/04/2009, 10h29
  3. [AJAX] Mise en place du script combobox ajax
    Par spawns dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/11/2008, 17h34
  4. Script de sauvegarde avec mise en place de l'ARCHIVELOG
    Par phil4444 dans le forum Administration
    Réponses: 4
    Dernier message: 24/04/2008, 17h35

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