¿No tienes la confianza necesaria para arriesgarte a modificar los códigos XML de un cubo?, ¿Piensas que vas a generar algún fallo que afecte al correcto funcionamiento?

¡No temas más!(Aunque siempre llevando cuidado) Hoy vamos a exponer dos situaciones que pueden llegar a ser muy comunes y que requieren de modificaciones en el código XML para llevarlas a cabo.

Ordenación de las acciones de detalle (Drillthrough)

La primera de ellas es la ordenación de las acciones de detalle de un cubo.  Cuando creamos una nueva acción de detalle en el cubo, para el caso de una Acción de Drillthrough, el orden en el que añadimos las dimensiones a Drillthrough será en principio el que se quedará predeterminado y que sin llevar a cabo una modificación en el código xml no es posible alterar.

Por ello, puedes llegar a no modificar el código por miedo a modificar algo que produzca un fallo.

Hoy, veremos cómo realizar ese cambio de orden modificando el código XML y con un riesgo mínimo de error.

Usaremos como ejemplo el  cubo de AdventureWorks y en Actions nos dirigiremos a Finance Details.

¿Te atreves a tocar el código XML de tu proyecto de SSAS?

 

 

 

 

 

Podemos observar que dentro del apartado de Drillthrough Columns tenemos una serie de Medidas y Dimensiones añadidas las cuales, imaginemos que las fuimos añadiendo al mismo tiempo que las íbamos creando y sin un orden determinado.  El caso es que ahora necesitamos que tengan un orden entre ellas y para ello deberemos, o borrarlas y volverlas a crear o modificar el código XML.

 

¿Te atreves a tocar el código XML de tu proyecto de SSAS?

 

 

 

 

 

Cuando procesamos el cubo,creamos un informe simple con la métrica que está en el Drillthrough.

¿Te atreves a tocar el código XML de tu proyecto de SSAS?

Click derecho, more actions y seleccionamos Drillthrough

¿Te atreves a tocar el código XML de tu proyecto de SSAS?

Se nos modificará el informe completamente y se nos mostrarán las diferentes dimensiones en el mismo orden al que aparecen en el cubo.

¿Te atreves a tocar el código XML de tu proyecto de SSAS?

Ahora bien, imaginemos la situación en la que necesitamos que estén ordenados de la siguiente forma respecto a cómo aparecen anteriormente (Ascendente-Descendente):

  • Measures(Amount)
  • Date
  • Scenario
  • Organization
  • Account
  • Department
  • Destination Currency.

Para realizar la modificación nos dirigiremos a la ventana lateral, en el Solution Explorer y haremos click derecho encima del Cubo de AdventureWorks.

¿Te atreves a tocar el código XML de tu proyecto de SSAS?

View Code y se nos abrirá una nueva pestaña con el código XML del Cubo.

Dependiendo siempre de la cantidad de datos que contenga, el código será mayor o menor pero habitualmente nos encontraremos con un código bastante extenso en el cual debemos de llevar cuidado de no tocar nada que esté fuera de nuestro entendimiento. Por ello para localizar de una forma más fácil la línea en la que empieza la parte del código que nos interesa, usaremos la herramienta de búsqueda. Ctrl+F y aparecerá:

¿Te atreves a tocar el código XML de tu proyecto de SSAS?

El paso siguiente será introducir el nombre del DrillThrough que buscamos y localizarlo.

Una vez localizada, podemos observar el código, en el cual ahora mismo obviaremos muchas de las partes:

<Action xsi:type="DrillThroughAction" dwd:design-time-name="2c74e7cb-c3a1-4cb4-862e-781d34020893">

      <ID>Drillthrough Action 2</ID>

      <Name>Finance Details</Name>

      <Caption>Drillthrough...</Caption>

      <Translations>

       … 

      </Translations>

      <TargetType>Cells</TargetType>

      <Target>MeasureGroupMeasures("Financial Reporting")</Target>

      <Type>DrillThrough</Type>

      <Default>true</Default>

--PARTE DONDE SE DECLARA LAS MEDIDAS, EN ESTE CASO AMOUNT

      <Columns>

        <Column xsi:type="MeasureBinding" dwd:design-time-name="5adb0f99-3c24-4a1a-81ef-9e4876765c58">

          <MeasureID>Amount</MeasureID>

        </Column>

--PARTE DONDE SE DECLARA DIM DATE CON SUS RESPECTIVAS COLUMNAS(FiscalYear,Date,Calendar Year)

        <Column xsi:type="CubeAttributeBinding" dwd:design-time-name="f4ea9b0f-acae-4887-9270-7b0e4e54467f">

          <CubeID>Adventure Works</CubeID>

          <CubeDimensionID>Order Date Key - Dim Time</CubeDimensionID>

          <AttributeID>Fiscal Year</AttributeID>

          <Type>All</Type>

        </Column>

        <Column xsi:type="CubeAttributeBinding" dwd:design-time-name="c0d98c89-5852-4e64-a70a-ac0ac2276165">

          <CubeID>Adventure Works</CubeID>

          <CubeDimensionID>Order Date Key - Dim Time</CubeDimensionID>

          <AttributeID>TimeKey</AttributeID>

          <Type>All</Type>

        </Column>

        <Column xsi:type="CubeAttributeBinding" dwd:design-time-name="cdef5db1-5bbb-4c16-916e-cc0354b1e06e">

          <CubeID>Adventure Works</CubeID>

          <CubeDimensionID>Order Date Key - Dim Time</CubeDimensionID>

          <AttributeID>CalendarYear</AttributeID>

          <Type>All</Type>

        </Column>

--PARTE DONDE SE DECLARA LA DIM ORGANIZATION

        <Column xsi:type="CubeAttributeBinding" dwd:design-time-name="c0b524fa-529d-4c2a-a879-2ee4bdf36a8b">

          <CubeID>Adventure Works</CubeID>

          <CubeDimensionID>Dim Organization</CubeDimensionID>

          <AttributeID>Parent Organization Key</AttributeID>

          <Type>All</Type>

        </Column>



--PARTE DONDE SE DECLARA LA DIM ACCOUNT

        <Column xsi:type="CubeAttributeBinding" dwd:design-time-name="2e7fb3e6-f09c-4fa5-a3f6-7ca6a4b40b74">

          <CubeID>Adventure Works</CubeID>

          <CubeDimensionID>Dim Account</CubeDimensionID>

          <AttributeID>Parent Account Key</AttributeID>

          <Type>All</Type>

        </Column>

--PARTE DONDE SE DECLARA LA DIM SCENARIO

        <Column xsi:type="CubeAttributeBinding" dwd:design-time-name="7008e054-0621-4c6e-8c4e-31f334effb89">

          <CubeID>Adventure Works</CubeID>

          <CubeDimensionID>Dim Scenario</CubeDimensionID>

          <AttributeID>Scenario Name</AttributeID>

          <Type>All</Type>

        </Column>

--PARTE DONDE SE DECLARA LA DIM DEPARMENTS

        <Column xsi:type="CubeAttributeBinding" dwd:design-time-name="fa9361b8-315b-45e6-a627-ee54d7981a8c">

          <CubeID>Adventure Works</CubeID>

          <CubeDimensionID>Dim Department Group</CubeDimensionID>

          <AttributeID>Parent Department Group Key</AttributeID>

          <Type>All</Type>

        </Column>

--PARTE DONDE SE DECLARA LA DIM DESTINATION CURRENCY

        <Column xsi:type="CubeAttributeBinding" dwd:design-time-name="f4f845ef-1fbf-4040-bfdc-1946a84dd14f">

          <CubeID>Adventure Works</CubeID>

          <CubeDimensionID>Destination Currency</CubeDimensionID>

          <AttributeID>Currency Alternate Key</AttributeID>

          <Type>All</Type>

        </Column>

      </Columns>

    </Action>

Por lo que ahora lo que haremos será modificar el orden de los elementos y adaptarlos a nuestro requerimiento. Este quedará de la siguiente manera:

<Action xsi:type="DrillThroughAction" dwd:design-time-name="2c74e7cb-c3a1-4cb4-862e-781d34020893">
      <ID>Drillthrough Action 2</ID>
      <Name>Finance Details</Name>
      <Caption>Drillthrough...</Caption>
      <Translations>
       … 
      </Translations>
      <TargetType>Cells</TargetType>
      <Target>MeasureGroupMeasures("Financial Reporting")</Target>
      <Type>DrillThrough</Type>
      <Default>true</Default>
--PARTE DONDE SE DECLARA LAS MEDIDAS, EN ESTE CASO AMOUNT
      <Columns>
        <Column xsi:type="MeasureBinding" dwd:design-time-name="5adb0f99-3c24-4a1a-81ef-9e4876765c58">
          <MeasureID>Amount</MeasureID>
        </Column>
--PARTE DONDE SE DECLARA DIM DATE CON SUS RESPECTIVAS COLUMNAS(FiscalYear,Date,Calendar Year)
        <Column xsi:type="CubeAttributeBinding" dwd:design-time-name="f4ea9b0f-acae-4887-9270-7b0e4e54467f">
          <CubeID>Adventure Works</CubeID>
          <CubeDimensionID>Order Date Key - Dim Time</CubeDimensionID>
          <AttributeID>Fiscal Year</AttributeID>
          <Type>All</Type>
        </Column>
        <Column xsi:type="CubeAttributeBinding" dwd:design-time-name="c0d98c89-5852-4e64-a70a-ac0ac2276165">
          <CubeID>Adventure Works</CubeID>
          <CubeDimensionID>Order Date Key - Dim Time</CubeDimensionID>
          <AttributeID>TimeKey</AttributeID>
          <Type>All</Type>
        </Column>
        <Column xsi:type="CubeAttributeBinding" dwd:design-time-name="cdef5db1-5bbb-4c16-916e-cc0354b1e06e">
          <CubeID>Adventure Works</CubeID>
          <CubeDimensionID>Order Date Key - Dim Time</CubeDimensionID>
          <AttributeID>CalendarYear</AttributeID>
          <Type>All</Type>
        </Column>
--PARTE DONDE SE DECLARA LA DIM SCENARIO
        <Column xsi:type="CubeAttributeBinding" dwd:design-time-name="7008e054-0621-4c6e-8c4e-31f334effb89">
          <CubeID>Adventure Works</CubeID>
          <CubeDimensionID>Dim Scenario</CubeDimensionID>
          <AttributeID>Scenario Name</AttributeID>
          <Type>All</Type>
        </Column>

--PARTE DONDE SE DECLARA LA DIM ORGANIZATION
        <Column xsi:type="CubeAttributeBinding" dwd:design-time-name="c0b524fa-529d-4c2a-a879-2ee4bdf36a8b">
          <CubeID>Adventure Works</CubeID>
          <CubeDimensionID>Dim Organization</CubeDimensionID>
          <AttributeID>Parent Organization Key</AttributeID>
          <Type>All</Type>
        </Column>

--PARTE DONDE SE DECLARA LA DIM ACCOUNT
        <Column xsi:type="CubeAttributeBinding" dwd:design-time-name="2e7fb3e6-f09c-4fa5-a3f6-7ca6a4b40b74">
          <CubeID>Adventure Works</CubeID>
          <CubeDimensionID>Dim Account</CubeDimensionID>
          <AttributeID>Parent Account Key</AttributeID>
          <Type>All</Type>
        </Column>
--PARTE DONDE SE DECLARA LA DIM DEPARMENTS
        <Column xsi:type="CubeAttributeBinding" dwd:design-time-name="fa9361b8-315b-45e6-a627-ee54d7981a8c">
          <CubeID>Adventure Works</CubeID>
          <CubeDimensionID>Dim Department Group</CubeDimensionID>
          <AttributeID>Parent Department Group Key</AttributeID>
          <Type>All</Type>
        </Column>
--PARTE DONDE SE DECLARA LA DIM DESTINATION CURRENCY
        <Column xsi:type="CubeAttributeBinding" dwd:design-time-name="f4f845ef-1fbf-4040-bfdc-1946a84dd14f">
          <CubeID>Adventure Works</CubeID>
          <CubeDimensionID>Destination Currency</CubeDimensionID>
          <AttributeID>Currency Alternate Key</AttributeID>
          <Type>All</Type>
        </Column>
      </Columns>
    </Action>

Tras esto, guardaremos y volveremos a la vista del cubo en la pestaña de acciones.

En esta vista veremos que ya tenemos el orden deseado:

¿Te atreves a tocar el código XML de tu proyecto de SSAS?

El siguiente paso será procesar el cubo y comprobar que a la hora de generar un informe el orden es el mismo.

¿Te atreves a tocar el código XML de tu proyecto de SSAS?

En efecto, vemos como se ha modificado el orden de las columnas tal y como deseábamos.

Perdida de la Tabla de dimensión en el visor de diagrama.

Otro caso que se nos puede llegar a presentar se da cuando abrimos una dimensión y en la zona donde aparece el diagrama de la estructura de la dimensión (Data Source View) vemos que no aparece una de las estructuras  de la relación existente en el Data Source View.

¿Te atreves a tocar el código XML de tu proyecto de SSAS?

Volviendo al Data Source View de la solución podemos observar que esa relación realmente existe y que el problema está en el área de trabajo de la dimensión en cuestión.

Este problema es causado por un error del XML, cuando da valores a las propiedades que va a tener el objeto del Data Source View que ha desaparecido.

Para corregirlo debemos analizar que ha podido modificarse e incluso apoyarnos en otro caso en el que se visualice correctamente para poder comparar los valores de los parámetros de dimensionado del objeto que contiene los datos del diagrama.

Para ello abriremos procederemos a ver el código XML de la dimensión afectada:

  • Dimension Afectada-> Click Derecho-> View Code

¿Te atreves a tocar el código XML de tu proyecto de SSAS?

Localizamos entre el código la parte donde se crea la visualización del objeto que sabemos que no se visualiza correctamente.

¿Te atreves a tocar el código XML de tu proyecto de SSAS?

Debemos localizar el parámetro del visor que puede estar fallando u ocasionando que no se vea la dimensión

Dentro del XML podemos observar como uno de los parámetros, en este caso  Width tiene como valor 1 que destaca que es un valor anómalo ya que es un valor muy pequeño para contener una lista de campos. Debido a eso, no se le daba un ancho lo suficientemente grande al objeto como para ser visualizado.

<ddscontrol controlprogid="DdsShapes.DdsObjectManagedBridge.3" tooltip="Customer" left="3279" top="14" logicalid="4" controlid="1" masterid="0" hint1="0" hint2="0" width="1" height="12637" noresize="0" nomove="0" nodefaultattachpoints="0" autodrag="1" usedefaultiddshape="1" selectable="1" showselectionhandles="1" allownudging="1" isannotation="0" dontautolayout="0" groupcollapsed="0" tabstop="1" visible="1" snaptogrid="0">

Esto puede ser causado por un fallo en las dimensiones del objeto que contiene el diagrama, además, si analizando los parámetros del tamaño y viendo que son lógicos, también puede deberse a que el parámetro visible esté deshabilitado, es decir que tenga valor 0.

Resumiendo, este tipo de situación, dentro de mi experiencia como usuario me ha aparecido  cuando se ven afectados los siguientes parámetros:

  • Visible
  • Height
  • Width

Una vez se modifiquen esos parámetros, guardamos el XML modificado y volviendo a la dimensión podremos observar que ahora podemos visualizar correctamente la estructura en el Data Source View.

¿Te atreves a tocar el código XML de tu proyecto de SSAS?

En resumen, tras exponer estos casos puntuales sobre la utilidad de XML, destacar que a la hora de manipular el código XML de nuestro proyecto, siempre debemos hacerlo con cautela y estando bien seguros de que estamos en la parte que queremos modificar. Por otro lado, vemos que con una manipulación correcta podemos solucionar ciertos “problemas” que pueden surgir y que sin el uso de lo anteriormente expuesto, sería una tarea más compleja.

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

Arquitecturas lambda en Azure

Las necesidades de análisis en los diferentes escenarios de negocio se vuelven cada vez más complejas. Dato histórico, dato en tiempo real, dato desde diferentes fuentes, dato predictivo, todo a la vez y en el mismo punto centralizado. ¿Nos hemos vuelto locos? ¿Es imposible? ¿No seremos capaces? Nada de eso, con Azure y una buena planificación conseguiremos una arquitectura con la última tecnología y que, sobre todo, cubre nuestras necesidades de análisis por complejas que sean