Cuando diseñamos un informe analítico de PerformancePoint a través del interfaz de diseño, es decir, seleccionando las medidas y las dimensiones desde el panel de detalles, todos las dimensiones implicadas quedan expuestas para realizar conexiones entre elementos en un Dashboard:
Cuando construimos Dashboards podemos vincular elementos entre sí (Filtros –> [scorecards,informes] ; Scorecard –> [scorecards, informes]) , concretamente a alguna de las dimensiones que contenga:
Como se puede apreciar en la imagen, también se incluye la dimensión Measures (medidas).
En este artículos vamos a crear un filtro para que el usuario pueda seleccionar determinadas medidas para un informe. Además el nombre a presentar de las medidas podría ser distinto al que tienen en el cubo.
Además, como bien sabéis, un filtro puede actuar sobre varios elementos visuales de un dashboard pero cuando se aplica el cambio de medida sobre un elemento concreto no se reproduce para el resto de elementos.
Para los ejemplos vamos a utilizar la base de datos OLAP AdventureWorksDW2012 y una instancia de SQL Server Analysis Services 2012 RTM (descargar versión RTM). También utilizaremos SharePoint 2010 (descargar versión de evaluación) . Si vas a utilizar un entorno similar, es necesario aplicar el Service Pack 1 de SharePoint 2010 para poder realizar su configuración: http://msdn.microsoft.com/en-us/library/hh231665(v=sql.110).aspx.
Escenario
Los requisitos de la solución expresan la necesidad de poder seleccionar determinadas medidas para mostrar en un informe analítico de PerformancePoint Services a través de un filtro (no el menú contextual de los elementos visuales)
Hay varias formas de resolverlo, todas las que conozco son utilizando una píldora de MDX… nada complicado así que vamos allá.
Solución
La solución que aquí planteo es la que prefiero utilizar por la flexibilidad que proporciona además de que puede utilizarse para otros menesteres. La mayor parte de la implementación de esta solución se realiza en el diseño del cubo. Paso por paso:
1. Crear consulta con nombre en el DSV
La clave es crear en el DSV una consulta con nombre que hará de soporte para una dimensión ‘ficticia’ en la que podemos obtener el nombre único de las medidas. También se puede utilizar una tabla del DW que soporte los datos para evitar tocar el proyecto cada vez que necesitemos una modificación o ampliación de los registros de esta tabla.
Esta nueva tabla en el DW o consulta con nombre en el DSV debe almacenar, al menos, los siguientes datos:
ID | Medida | UniqueName |
1 | Tota de ventas | [Measures].[Sales Amount] |
La consulta en el DSV quedaría similar a la siguiente:
SELECT 1 AS ID, 'Total de ventas' AS Medida, '[Measures].[Sales Amount]' AS UniqueName UNION ALL SELECT 2 AS ID, 'Total ventas Internet' AS Medida, '[Measures].[Internet Sales Amount]' AS UniqueName UNION ALL SELECT 3 AS ID, 'Total ventas 3er Canal' AS Medida, '[Measures].[Reseller Sales Amount]' AS UniqueName UNION ALL SELECT 4 AS ID, '% Beneficio bruto Internet' AS Medida, '[Measures].[Internet Gross Profit Margin]' AS UniqueName UNION ALL SELECT 5 AS ID, '% Ventas Internet/total' AS Medida, '[Measures].[% Ventas por internet s/total]' AS UniqueName UNION ALL SELECT 6 AS ID, '% Ventas 3er canal/total' AS Medida, '[Measures].[% Ventas 3er canal s/total]' AS UniqueName
El valor cada medida no puede estar formado por cálculos entre medidas, debe representar una ya existente. Tampoco podemos operar con dos medidas
2. Añadir una dimensión a la BD
El siguiente paso será construir una dimensión con los datos de la consulta que añadimos al DSV. Dejamos como atributo visible ‘Medida’ y ‘UniqueName’ como no visible. La columna ID puede ser el atributo clave de ‘Medida’:
La dimensión debe mostrar el atributo Medida y poder obtener el atributo ‘UniqueName’ como propiedad:
Para esta nueva dimensión ‘Medidas’ debemos establecer un uso de dimensión en el cubo, sin asociarla a ningún grupo de medidas:
Después de añadir la dimensión correctamente al cubo es el momento de procesarlo (Process Full) para obtener los cambios en el servidor de Analysis Services
3. Generar un filtro en PerformancePoint Services
Desde el Dashboard Designer creamos un filtro, de tipo selección de miembros, utilizando la dimensión medidas… seleccionamos aquellas que nos interesan para el dashboard que vamos a construir
4. Conectar el filtro ‘Medidas’ con los elementos del dashboard
Creamos o editamos un dashboard para añadir el filtro en la cabecera, o dónde mejor este presentado, y conectamos la propiedad ‘Member Unique Name‘ a los distintos informes, conectándolo a la dimensión Measures
Seguro que más de uno ya habrá pensado que el Unique Name de nuestra dimensión ficticia no va a proporcionar un nombre de medida válido, esta claro. En su lugar, vamos a utilizar el token <<UniqueName>> que PPS habilita para acceder a las propiedades de los miembros seleccionados en el filtro que, si no nos hemos equivocado escribiendo el MDX, nos proporcionará la información necesaria para pasarla como filtro de medidas. Para esto, pulsamos sobre el botón Connection Formula y escribimos la siguiente:
Strtomember(<<UniqueName>>.Properties("UniqueName"))
Nota: es importante respectar las mayúsculas en el token <<UniqueName>> , de otra forma no funcionará.
Desplegamos y listo:
Conclusión
El handicap de esta solución es que la dimensión ‘Medidas’ debe permanecer visible, por lo que el usuario podrá acceder al atributo medida y puede conducirle a intentar utilizarlas.
Sin embargo, esta aproximación nos permite modificar la consulta MDX de los informes de PerformancePoint Services y seguir cambiando la medida a mostrar. Hemos alcanzado el objetivo planteado cumpliendo todos los requisitos, dotando de mayor flexibilidad a nuestros dashboards.
Si estáis interesados, puedo publicar el espacio de trabajo de Dashboard Designer y el proyecto AdventureWorksDW2012Multidimensional-EE con estos cambios implementados