Como mostrar valores nulos en Microstrategy

Probablemente en más de una ocasión habéis querido mostrar en Microstrategy elementos de un atributo cuya muestra, debido a los diferentes cruces,  era de cero. Como sabéis, Microstrategy por defecto no puede mostrar dichos valores del atributo porque no están contenidos en la query resultante, así que vamos a ver una forma de solucionarlo…

Partimos de una situación similar a esta, donde tenemos una cuadricula bastante sencilla con cuatro atributos y un indicador. El indicador Registros tiene la siguiente formula

Count(codunico) {~+}  [Count distinct]

y tenemos una encuesta cuyas respuestas a la pregunta cuatro deberían ser las siguientes: Pésima – Mejorable – Normal – Correcta – Muy correcta. 

normal1

Como veis, al filtrar por el elemento Madrid del atributo CAB_12, los resultados mostrados por Microstrategy ocultan las dos primeras respuestas ya que su muestra es cero. Examinando la sentencia SQL generada, podemos ver que es muy sencilla, con un simple COUNT DISTINCT CODUNICO, JOINS con las tablas de LOOKUP y un GROUP BY por cada uno de los atributos de la cuadricula

query_sql_normal

 

Como podéis ver, con esta query es imposible que, en la generación del informe, Microstrategy pueda representar los dos elementos que faltan ya que directamente los ha eliminado a la hora de hacer el GROUP BY. 

Para poder representar los cinco elementos vamos a seguir los siguientes pasos

  1. Dentro de la cuadrícula, vamos a Datos / Opciones de datos del informe. Después, entramos en Tipo de join de atributo y marcamos la tercera opción

    Outer join para tablas de lookup de atributos de plantilla en el paso final, sin filtro.

    joinchange

  2. Si aceptamos y salimos, deberíamos ver el resto de elementos del atributo pero con un valor NULL.
    outer1
  3. Para poner sustituir ese NULL por ceros, volvemos a Datos / Opciones de datos del informe pero ahora entramos en Mostrar / Valores nulos, desmarcamos Utilizar valor por defecto y escribimos un 0 en la casilla inmediatamente inferior.

    outer2

  4. Aceptamos y salimos. Finalmente, veremos la cuadricula de la manera que pretendíamos.

    outer3

  5. Analicemos la query resultante
    query_sql_outer
    En esta ocasión, la sentencia que lanza Microstrategy se divide en tres
    1. La primera query (ZZ0L00) simplemente ejecuta el COUNT DISTINCT CODUNICO y un GROUP BY por los atributos de la cuadricula.
    2. En la segunda query (ZZ00L01) está la clave, extrae los diferentes valores que obtiene de la tabla principal sin filtro alguno, de tal manera que pueda obtener el máximo numero posible de elementos.
    3. La tercera query cruza el resultado de ZZ00L01, a través de un LEFT OUTER JOIN , con ZZ0L00, de tal manera que se siempre se quedará con los elementos listados que coincidan en ambas y otorgará un NULL  a los elementos de ZZ0L01 que no coincidan.

Hay que mencionar que el hecho de marcar el tercer tipo de join y obligar a la cuadricula a hacer LEFT OUTER JOIN puede que no nos sirva para todas las cuadriculas, especialmente cuando estas son complejas.

Y vosotros, ¿conocéis alguna otra manera de hacerlo?

Espero que os sirva de ayuda 😉

Sergio Martín
Más de seis años de experiencia gestionando equipos y proyectos de Business Intelligence para diferentes sectores, apasionado de todos los procesos técnicos relacionados con la gestión de la información, el tratamiento de datos y la automatización de procesos

** Microstrategy 9.4 | Pentaho 5 (ETL) | Oracle 11g **

1 comment

  1. Me ha venido genial, muchas gracias, aunque el tipo de join que tenía que hacer yo era el segundo tipo, outer join con las tablas de lookup de las llaves de tablas de hechos en el paso final. Me estaba volviendo loca para sacar las filas con algunos indicadores a 0, porque para algunos sí tenía valor calculado pero para otros por el filtro no, así que esa fila entera no me la mostraba el informe. ¡¡Gracias de nuevo!!

Deja un comentario

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