29 agosto 2010

Alternativas para procesar un cubo de Analysis Services

Hace unos días recibí una pregunta del maestro del tenis de Venezuela y el Caribe, el gran Eduardo Delgado, y copio a continuación:

¿Hay alguna forma de refrescar automáticamente un cubo usando T-SQL o algún otro método que pueda ser invocado por una aplicación externa? …Te lo pregunto porque tengo un Datawareouse cuyos procesos de ETL están desarrollados en informática y los datos se ven en un cubo en Analysis Services, actualmente el cubo se está refrescando manualmente y quiero automatizar esta parte.

Esta fue mi respuesta:

Claro que hay un par de formas. SSAS soporta XMLA lo cual te permite crear los comandos para procesar el cubo usando XML con una sintaxis predefinida. Con esto podrías por lo menos hacer 3 cosas:

Estas sugerencias fueron dadas asumiendo que no se está usando SSIS como herramienta del ETL y por tanto no se pueden aprovechar los controles que ya SSIS trae para procesar cubos de SSA. Recuerden que para generar los scripts de XMLA para procesar sus dimensiones o cubos, lo pueden hacer fácilmente con el SQL Server Management Studio y luego modificarlo según sea necesario:

image

image

Al pulsar el botón se generará un script similar al siguiente:

<Batch xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
<Parallel>
<Process xmlns:xsd=http://www.w3.org/2001/XMLSchema
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xmlns:ddl2=http://schemas.microsoft.com/analysisservices/2003/engine/2
xmlns:ddl2_2=http://schemas.microsoft.com/analysisservices/2003/engine/2/2
xmlns:ddl100_100=http://schemas.microsoft.com/analysisservices/2008/engine/100/100
xmlns:ddl200=http://schemas.microsoft.com/analysisservices/2010/engine/200
xmlns:ddl200_200="http://schemas.microsoft.com/analysisservices/2010/engine/200/200">
<Object>
<DatabaseID>Health Plan Analytics</DatabaseID>
</Object>
<Type>ProcessFull</Type>
<WriteBackTableCreation>UseExisting</WriteBackTableCreation>
</Process>
</Parallel>
</Batch>





Además de las recomendaciones que le sugerí, mi buen amigo Eduardo, respondió que finalmente puso el código XMLA para procesar sus cubos dentro de un Job del SQL Server Agent para finalmente ejecutarlo usando el procedimiento almacenado sp_start_job desde su paquete de Informatica, lo cual fue una excelente forma de resolver este interesante caso.


Alan

7 comentarios:

Kenia Garcia dijo...

Hola,

Quisiera saber com se puede mejorar la navegacion de los cubos que no se haga lento en las consultas

Estoy trabajando con analysis services 2008

Alexander C. dijo...

Hola Alan, Tenemos varios cubos construidos en SQL Server 2008, pero queria saber si depronto conoce algun diseño de tal manera que al cargar las dimensiones y hechos con paquetes maestros tanto de dimensiones conformadas, como no conformadas y llegado el caso de que falle una carga de una o dos dimensiones que no sean conformadas, la estructura de paquetes maestros permita que no falle la carga de los cubos en los cuales no tenian relacion con las dimensiones que fallaron. Gracias por su colaboracion...Alexander

Alexander C. dijo...

Complementando, porque he visto soluciones que cargan todas las dimensiones y las procesan y luego cargan las tablas de hechos y procesan los cubos pero en el momento que falle una carga o procesamiento de una dimension fallan todos los cubos..

Lades dijo...

Hola, quisiera saber si es posible usar procedimientos almacenados de SQL Server en un cubo de SSAS, ya que necesito hacer un calculo muy complejo, que lo resumo asi:

De un conjunto de registro deb ordenarlos x tipo, luego aplicar una ponderacion a cada registro y la sumatoria es el resultado.

Es decir si tengo como Dimensiones al producto y Fechas de Venta, los registros pasan por ese calculo y muestro como medida el resultado.

Entonces para evitar usar procedimientos de SSAS(mi manejor de MDX es muy pobre), quiero saber si es posible usar procedimientos almacenados de alguna base de datos de SQL.

Muchisimas gracias por la ayuda.

Cristina dijo...

Tengo una solución con seis cubos. Tres de ellos deben procesarse diariamente (ABC)y los otros tres mensualmente (DEF). Tengo dos paquetes SSIS para realizar estas tareas pero estoy presentando un problema. Teniendo los 6 cubos generados, cuando corro el paquete para procesar los cubos ABC se dejan de visualizar los cubos DEF como si no estuvieran procesados. Y lo mismo ocurre cuando corro el paquete para procesar los cubos DEF, se dejan de visualizar los cubos ABC. Mi pregunta es: siempre debe procesarse la solución completa? o hay alguna forma de solucionar este problema?

Alan Koo dijo...

Hola Cristina,

Lo que debe estar sucediendo, es que como parte del procesamiento de los primeros 3 cubos, debes estar procesando dimensiones como "Full Process" que también están siendo usadas en los cubos "CDE". Si haces un full process a una dimensión, tienes que volver a procesar todos los cubos dependientes. Por tanto la recomendación es que sólo le hagas un "Process Update" a las dimensiones. Déjame saber si esto resuelve el problema.

Saludos,

Alan

Alan Koo dijo...

Lades,

Perdona que no haya podido responder antes, tal vez es bastante tarde, pero para beneficio de los demás, no es posible usar un procedimiento almacenado (SP) de SQL Server (relacional) dentro de SSAS. Los SP de SSAS son de naturaleza distinta a pesar de que el nombre es similar. Revisa este link para mayor información http://msdn.microsoft.com/en-us/library/ms176113(v=sql.90).aspx.

Por otro lado, mi recomendación sería que hagas todo lo posible para evitar crear el SP en SSAS. La idea sería que hagas todo el proceso que sea posible a nivel de la base de datos relacional (tal vez usando Integration Services) y no a nivel de SSAS.

Saludos,

Alan