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:
- Crear un SQL Agent Job que corra el XMLA en un Schedule predefinido por ti http://sqlblogcasts.com/blogs/davidwimbush/archive/2009/11/25/how-to-process-a-cube-in-a-sql-agent-job.aspx
- Desde tu ETL llamar un VBScript que se conecte a SSAS y corra el XMLA
- Crear una aplicación o buscar si ya hay una que ejecute XMLA desde el command line como esta: http://blogs.msdn.com/b/olivier_pieri/archive/2005/11/23/496185.aspx”
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:
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