En esta entrada continuamos en la misma línea que en mi artículo anterior, con el que iniciamos esta serie de scripts PowerShell para resolver tareas frecuentes en los despliegues de soluciones de BI.

Extraer el script MDX de un cubo puede resultarnos útil para revisar el código de medidas y miembros calculados, scopes, traducciones, etc.. con motivo de realizar pruebas sobre métricas o simplemente, mover el código completo de un entorno a otro sin necesidad de reprocesar el cubo de destino. Para este último caso podéis pensar ‘eso se hace en un plis con Visual Studio’ y tenéis toda la razón, sin embargo, recordad que el uno de los objetivos de esta serie de artículos es lograr la máxima automatización posible para evitar realizar tareas manuales y repetitivas. Aun así, seguro habrá formas alternativas de lograr la mismo, aqui nos centraremos en cómo hacerlo con PowerShell

Empezaremos por el código básico necesario para generar un script XMLA Alter con la definición del MDXScript de una base de datos y un cubo en concreto, para lo cual podemos utilizar el ensamblado Microsoft.AnalysisServices

PowerShell y SQL BI: Extraer MDXScript de un cubo

Advertencia. El código provisto en esta página no debe ejecutarse en un entorno de producción, no tiene ninguna garantía de que os vaya a funcionar como esperáis.

#Declaramos y establecemos variables
$InstanceName="localhost\sql2016"
$DatabaseName="AdventureWorksDW2012Multidimensional-EE"
$CubeNAme="Adventure Works"

#Cargamos el ensamblado Microsoft.AnalysisServices.Dll
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices") | Out-Null
#Instanciamos un objeto Server (SSAS) y conectamos con la instancia $InstanceName
$server = New-Object Microsoft.AnalysisServices.Server
$server.connect($InstanceName)

#Objetos para almacenamiento del script XMLA
$stringbuilder = new-Object System.Text.StringBuilder
$stringwriter = new-Object System.IO.StringWriter($stringbuilder)
$xmlOut = New-Object System.Xml.XmlTextWriter($stringwriter)
$xmlOut.Formatting = [System.Xml.Formatting]::Indented

#Instanciamos el objeto scripter para generar el XMLA
$ScriptObject = New-Object Microsoft.AnalysisServices.Scripter

#Definimos sobre qué objeto queremos generar un script 
$MSASObject=[Microsoft.AnalysisServices.MajorObject[]] @($($Server.Databases[$DatabaseName].Cubes[$CubeName].MdxScripts))

#Llamamos al método para obtener el XMLA Alter del MDXScript
$ScriptObject.ScriptAlter($MSASObject,$xmlOut,$false)

#Salida por pantalla del script XMLA
$stringbuilder.ToString()

 

Con un resultado similar al siguiente:

image

Ya tenemos el script XMLA contenido en una variable de tipo StringBuilder. A partir de aqui, podríamos utilizar el XMLA para realizar el alter en otro cubo o en el mismo. Obtener únicamente el código MDX es bastante sencillo si convertimos el XMLA en un documento XML

[xml]$xmla = [xml]$stringbuilder.ToString()
$xmla.alter.ObjectDefinition.MdxScript.Commands.Command.Text

Eventualmente podríamos utilizar el propio objeto XML para modificar el texto y, por ejemplo, añadir una nueva medida al cubo. Modificando el script PowerShell inicial para añadir las siguientes líneas:

$xmla.alter.ObjectDefinition.MdxScript.Commands.Command.text="$($xmla.alter.ObjectDefinition.MdxScript.Commands.Command.text)`n`nCREATE MEMBER CURRENTCUBE.[Measures].[PowerShell test] as `n`t""Medida añadida con PowerShell"";`n`n "

image

Hemos generado el nuevo XMLA Alter con un MDXscript modificado en la variable $xmla . Si necesitásemos aplicar este cambio al cubo y ver esa nueva medida desplegada, podríamos ejecutar este XMLA utilizando AdoMD o XmlaClient (tema para el siguiente artículo de la serie)

Serie de artículos PowerShell y SQL BI:

0 Shares:
Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

You May Also Like
Leer más

¿Qué es Business Intelligence? datos únicos integrados (02)

En esta entrega buscamos profundizar en las definiciones de Business Intelligence, haciendo hincapié en la importancia de tener una versión única de la verdad, es decir, un solo almacén de datos consolidados capaz de responder a las preguntas de negocio. Por otro lado se busca establecer una diferencia entre el tipo de preguntas de negocio que podrá responder un sistema ERP contra las que podrá responder un sistema de BI.
Leer más

Power BI embedded: Tus informes se vuelven omnipresentes

Crear reportes es esencial, pero, de nada sirve si no puedes compartirlos. Además de ver formas básicas de embeber un reporte de Power BI, esta sesión se centrará en cómo mostrar reportes dentro de sus propias aplicaciones web/móviles para compartir información con gente que está dentro y fuera de su organización (sin necesidad de cuenta de Power BI). Se trata brevemente Power BI Premium y Azure Power BI Embedded, así como otros temas relacionados con el licenciamiento.