Meilleur auteur de réponses
Erreur '1.#INF' dans un Membre calculé

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
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
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 -
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] )
-
-
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 -
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