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

Primeros pasos: Creación de bases de datos en Apache Hive en HDInsight (en la nube) y paths (rutas – HDFS o WASB)

Anteriormente hemos conectado con la herramienta cliente (CLI) a HDInsight Developer Preview; en esta ocasión vamos a hacerlo directamente en la distribución disponible de HDInsight en Azure. Para crear un cluster de HDInsight en Windows Azure debes seguir los pasos descritos en este enlace. Esta publicación asume que has creado correctamente tu cluster HDInsight en Windows Azure.