Cómo combinar cubos de IBM Cognos en un Crosstab de Report Studio

Los informes de IBM Cognos Report Studio tienen listas o tablas de referencias cruzadas (crosstabs) para mostrar los datos. El elemento que más se suele utilizar son las crosstabs, sobretodo cuando el origen de datos son cubos, y tanto las listas como los crosstabs se asocian siempre a una consulta para obtener los datos que muestran.

La consulta a su vez normalmente proviene de un único origen de datos, que puede ser una consulta SQL, o un cubo.

 

Union de dos queries en Cognos Report Studio

Si se trabaja con un modelo con varios cubos, lo habitual es que estos cubos compartan dimensiones entre ellos y, aunque lo más sencillo es que cada crosstab muestre información de un sólo cubo, puede surgir la necesidad de mostrar en el mismo crosstab datos de dos cubos que están ‘conectados’ gracias a una dimensión compartida.

Por ejemplo, si tenemos un cubo de ventas y otro de inventario, no es nada descabellado querer mostrar en la misma lista o en la misma tabla de referencias cruzadas las unidades vendidas y las disponibles en el almacén para cada mes del año.

La dimensión compartida sería el tiempo, a nivel mensual. 

Como a cada crosstab o lista sólo se puede asociar una consulta, vamos a tener que hacer una unión de consultas para poder ver valores de los dos cubos en el mismo crosstab. De esta manera al crosstab se le asigna la query de la unión, en la que tendremos los datos de ambos cubos que nos interesen.

Es importante tener en cuenta que para hacer la union, en las querys originales los elementos que se quieran sacar en la union han de tener el mismo nombre, o la misma etiqueta, sino no salen.

 

Cómo crear una consulta de unión y mostrar en un crosstab datos de dos cubos 

En este artículo de IBM DeveloperWorks explican cómo crear la query de unión y mostrar datos de diferentes cubos en el mismo crosstab, en este caso combinando datos de una consulta de un cubo de mes actual y otro cubo de mes anterior.

Crosstab de Cognos Report Studio con datos de dos cubos

La única pega de este artículo es que el alcance que se le da te puede llevar a engaño. Al inicio se indica que esta técnica sirve para cubos de Cognos, o Powercubes, y otros cubos y orígenes multidimensionales que se pueden utilizar con Cognos Report Studio, como Microsoft Analysis Services, o con DMR (Dimensionally Modeled Relational).
Esta es la frase con la que hay que tener cuidado:

This technique also applies to other dimensional sources such as Microsoft Analysis Services, IBM InfoSphere Warehouse Cubing Services, and dimensionally modeled relational (DMR).

El problema es que esta técnica funciona perfectamente con cubos, pero con DMR no se pueden seleccionar miembros de las jerarquías directamente como componentes de las subqueries, sólo se pueden seleccionar medidas y atributos de los miembros.

 

Por ejemplo, siguiendo las indicaciones del documento, si quisiéramos seleccionar en una jerarquía de países el miembro [Country] para nuestra subquery obtendríamos este error:

‘RQP-DEF-0537, SubQuery 'QueryName' used in a set operation cannot use members or member functions’

Lo único que funcionaría es trabajar con atributos de los miembros, como [Country].[Description], cosa que limitaría mucho la flexibilidad del report, ya que no serviría de mucho estar trabajando con estructuras dimensionales si no pudiéramos utilizar los miembros directamente en los data items.

En este documento de soporte de IBM se explica el origen del error y posibles maneras de evitarlo, aunque todas las soluciones tienen sus limitaciones, una pena porque DMR es muy potente, y no poder utilizar en Cognos Report Studio toda la flexibilidad y propiedades multidimensionales de DMR sobre un crosstab que combine miembros de dos cubos con dimensiones compartidas es una limitación importante a tener en cuenta.

Quiero aclarar que estamos hablando del Report Studio de Cognos 8, y no sé si en Cognos 10 ya se puede combinar más de un cubo en el mismo crosstab. Si alguien lo sabe, le agradezco si comparte la información.

Hola Carlos. ¿Has mirado con la opción que proporciona la sentencia #substitute?, creo que a través de esta opción se podria realizar algo. A ver si tengo tiempo la semana que viene y te lo miro. Saludos

En respuesta a por Luis Moreno (no verificado)

Hola Luis

Creo que te refieres a este método que proponen en Cognos Know How:

http://cognosknowhow.blogspot.com.es/2012/10/how-to-handle-single-report-based-on.html

Yo cuando lo encontré vi el cielo abierto, pero probé a utilizarlo con modelos de DMR y no conseguí que me funcionara. Al validar las expresiones después de montar el union obtenía el error RQP-DEF-0537 que comento en el post.

Al encontrar la explicación de IBM sobre el origen de este error deduje que pasaba lo mismo que con la solución de DeveloperWorks, que sólo es aplicable a cubos 'reales' como Powercubes o los de AS, pero que no funciona con DMR.

También cabe la posibilidad de que hiciera algo mal y el error fuera por otra cosa, así que si puedes probar esta u otra solución con #substitute sería genial porque saldríamos de dudas sobre un tema importante. Tener en el modelo dimensiones compartidas y no poder utilizarlas para combinar datos de varios cubos en un sólo crosstab te deja un poco cojo a la hora de crear reports un poco complejos, sobretodo si son KPI's o reports para Dashboards, que suelen necesitar indicadores de varios cubos.

Ya nos contaras!