none
Erreur '1.#INF' dans un Membre calculé RRS feed

  • Question

  • Bonjour,

    Je débute dans la BI.

    Je dois faire une requête MDX pour calculer le turn over. J'ai un problème dans le résultat de la division dans ma requête MDX.

    Le résultat de ma division dans [SSMS] et dans [SSAS] sont différents.
    Dans [SSAS 2k5], j'ai certaines résultats de la division à '1.#INF' alors que sous [SSMS] j'ai bien mon pourcentage de turn over.

    Je n'arrive pas à comprendre l'origine du problème.
    Est ce que qq'un aurait déjà eu un problème similaire ?


    Merci
    lundi 6 avril 2009 10:08

Réponses

  • Merci philippe pour ton aide. Ta requête m'a bien aider à enlever les '1.#inf'.

    Voici les résultats que j'obtiens sous [SSMS] et [SSAS 2k5]
    			[SSMS]			[SSAS]
    2008	janvier		5.47945205479452	4.14
    	février		1.9629225736096		1.53
    	mars		2.72536687631027	2.20
    	avril		2.20661985957874	1.85
    	mai		1.95694716242661	
    	juin		4.19847328244275
    	juillet		3.22886989553656
    	août		6.40074211502783
    	septembre	6.08537693006358
    	octobre		6.15655233069481
    	novembre	3.28719723183391
    	décembre	25.6896551724138
    	
    2009	janvier		2.97619047619048
    	février		2.02874049027895
    	mars		0.420168067226891
    	avril		(null)
    	mai		(null)
    	juin		(null)

    Je vais utiliser le profiler, comme tu me l'a indiqué plus haut, pour comprendre la différence de résultat de la requête MDX sous [SSMS] et sous [SSAS 2K5].
    • Marqué comme réponse beb1982 mardi 7 avril 2009 09:39
    lundi 6 avril 2009 15:35

Toutes les réponses

  • Bonjour,

    peux-tu inclure le code de ton membre calculé ? Et aussi le code en question que tu utilises pour voir les resultats.

    "1.#INF" signifie une division par zero, tu pourrais sans doute commencer par faire une trace en utilisant le profileur et voir si les deux requetes (celle utilisant SSAS 2k5, l'autre utilisant SSMS) sont bien exactement les memes.

    Dans le cas d'un membre calculé en tous cas, tu devrais avoir dans ton code un ISEMPTY() pour palier aux cas ou le denominateur est "vide". Un exemple d'utilisation est ici: http://www.databasejournal.com/features/mssql/article.php/10894_3426201_4/MDX-Essentials-Logical-Functions-The-IsEmpty-Function.htm

    Philippe
    lundi 6 avril 2009 10:45
  • Pour calculer le Turn Over , je multiplie le nb de pers. par 100 puis le divise par le nombre de personne à la fin du mois :

    Sum(
       ({Descendants(
         [TEMPS].[ANNEE - SEMESTRE -  TRIMESTRE -  MOIS -  DATE -  JOURFERIE -  WEEKEND -  JOUROUVRE].CurrentMember
         ,[TEMPS].[DATE])}
         ,{[TYPE ENTREE SORTIE].[TYPE ENTREE SORTIE].&[Sortie]})
       , [Measures].[TF ENTREE SORTIE Count]
      )* 100
      / Sum(
        ({Descendants(
          [TEMPS].[ANNEE - SEMESTRE -  TRIMESTRE -  MOIS -  DATE -  JOURFERIE -  WEEKEND -  JOUROUVRE].NextMember
          ,[TEMPS].[DATE])})
        , [Measures].[Effectif Global]
      )
    lundi 6 avril 2009 12:06
  • Je ne connais pas le profiler.
    Peux-tu m'expliquer comment le lancer ?

    Je te remercie.
    lundi 6 avril 2009 12:19
  • Pour ton membre calcule, tu devrais prendre en compte quand le denominateur est 0, par exemple comme ceci:

    IIF(Sum(({Descendants([TEMPS].[ANNEE - SEMESTRE - TRIMESTRE - MOIS - DATE - JOURFERIE - WEEKEND - JOUROUVRE].NextMember
    ,[TEMPS].[DATE])}), [Measures].[Effectif Global])=0,
    null,
    Sum(({Descendants([TEMPS].[ANNEE - SEMESTRE - TRIMESTRE - MOIS - DATE - JOURFERIE - WEEKEND - JOUROUVRE].
    CurrentMember
    ,[TEMPS].[DATE])},{[TYPE ENTREE SORTIE].[TYPE ENTREE SORTIE].&[Sortie]}), [Measures].[TF ENTREE SORTIE Count])* 100
    /
    Sum(({Descendants([TEMPS].[ANNEE - SEMESTRE - TRIMESTRE - MOIS - DATE - JOURFERIE - WEEKEND - JOUROUVRE].NextMember,[TEMPS].[DATE])}), [Measures].[Effectif Global]))

    Quel est le resultat dans les deux applications si tu utilises ce code ?

    Concernant le profileur, je ne suis pas sur de la version francaise, en tout cas sur la version anglaise tu y accedes par Start --> Program Files --> SQL Server 2005 --> Performance Tools --> SQL Server Profiler. Apres tu peux creer une trace sur un serveur specifique (dans ton cas tu te connecterais sur ta base de donnees OLAP) et voir l'activite - et donc les requetes qui sont lancees par les applications.

    Philippe

    lundi 6 avril 2009 12:32
  • Merci philippe pour ton aide. Ta requête m'a bien aider à enlever les '1.#inf'.

    Voici les résultats que j'obtiens sous [SSMS] et [SSAS 2k5]
    			[SSMS]			[SSAS]
    2008	janvier		5.47945205479452	4.14
    	février		1.9629225736096		1.53
    	mars		2.72536687631027	2.20
    	avril		2.20661985957874	1.85
    	mai		1.95694716242661	
    	juin		4.19847328244275
    	juillet		3.22886989553656
    	août		6.40074211502783
    	septembre	6.08537693006358
    	octobre		6.15655233069481
    	novembre	3.28719723183391
    	décembre	25.6896551724138
    	
    2009	janvier		2.97619047619048
    	février		2.02874049027895
    	mars		0.420168067226891
    	avril		(null)
    	mai		(null)
    	juin		(null)

    Je vais utiliser le profiler, comme tu me l'a indiqué plus haut, pour comprendre la différence de résultat de la requête MDX sous [SSMS] et sous [SSAS 2K5].
    • Marqué comme réponse beb1982 mardi 7 avril 2009 09:39
    lundi 6 avril 2009 15:35