LN + MDX + ExcelMDX + SQL 2008

Mas que un post esto será una recopilación de otros post. Básicamente porque me fue un poco difícil saber que pasaba con mi Analisys Services en base a un problema inicial.

Problema Inicial:
Necesito hacer una agregación de productos de una medida de mi cubo, como saben la agregación por defecto que existe en SSAS es suma, pero no hay uno de producto.

Es decir necesitaba: a*b*c*d*….

Solución:
Como es un problema que ya han tenido muchas personas, la solución lo encontré en codeplex, que al final te redirecciona a esta pagina –> http://geekswithblogs.net/darrengosbell/archive/2006/07/18/85539.aspx 

básicamente la formula se resume en EXP(sum(logN(col_with_vals))) y ya lo puedes pasar a MDX y funciona…

Nota a parte tiene Mosha Pasumansky (para mi uno de los mejores en MDX) con una alternativa mucho mas interesante –> http://sqlblog.com/blogs/mosha/archive/2006/12/18/how-to-aggregate-values-as-a-product-multiplication-in-mdx.aspx

que ya no utiliza Logaritmo Neperiano sino un Logaritmo base 10 –>

with
member Measures.Weight as [Organization].[Organizations].unary_operator
member Measures.WeightLog as log10(Measures.Weight)
member Measures.SumOfWeightLogs as Sum(Descendants([Organization].[Organizations].CurrentMember,,Leaves), Measures.WeightLog)
member Measures.ProductOfWeights as 10^Measures.SumOfWeightLogs

select {Measures.ProductOfWeights} on 0
from [Adventure Works]

Hasta ahí no hay problemas para poder implementar la solución, pero por cosas de la vida no me funciono en el servidor, no funciono ninguna de las soluciones!!!

La Salvación: 
Cuando busque por todos lados porque había pasado esto me entere de cosas que no sabia hasta hoy de SSAS, para empezar las librerías que están por defecto referenciados en el server de AS.

VBAMDX –> Esta librería es la que nos permite utilizar todas las funciones de VBA en nuestro MDX y adivinen!!! tiene la función LOG (de logaritmo)

ExcelMDX –> Nos permite utilizar librerías de Excel en el MDX como el mutifamoso IRR (TIR en español, que es la tasa interna de retorno, otro problema que les contare en otro post), acá tenemos la función LN, LOG10, etc…

Ahora los problemas que podemos tener cuando no nos funciona la consulta de MDX expuesta en la solucion es porque no estan registradas.

Para el VBAMDX basta con revisar el Source y la ruta y la dll referenciada. Si no lo esta lo debemos registrar manualmente, click derecho –> NEW ASSEMBLY –> etc… la dll que debes tener debe ser (C:Program FilesMicrosoft SQL ServerMSAS10.MSSQLSERVEROLAPbinmsmdvbanet.dll)

Como mi problema ha sido con las funciones de Excel dentro de mi MDX, el problema era la dll: ExcelMDX, sencillamente porque en mi servidor tenia excel 2003 y le hice el upgrade a excel 2007 y esto se debe hacer antes de instalar SQL 2008, por ello se debe reparar el SQL para solucionarlo.

Ahora se preguntaran porque instale excel en el server, la respuesta es que sql no viene con la dll de excel para utilizar esas funciones, asi que si la vas a usar te obliga a tener excel es un bug registrado en microsoft –> https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=124864

Otro detalle que deben saber es que LOG es una palabra reservada asi que si la deseas utilizar por VBA debes colocarlo asi: VBA![LOG] para no tener problemas.

Resumen:
Lo aprendido hoy es que podemos utilizar las funciones de Excel en MDX pero necesitamos instalarlo en el server, y la instalacion del excel debe ser antes del de SQL, sino tendras que reparar el SQL como lo hice yo 🙂