QlikView: Count o Count distinct

Cuando se desea realizar un conteo en QlikView, se debería usar la función de agregación Count(). Pero como saber en qué casos usar la sintaxis Count o la sintaxis Count distinct.

Aunque son sintaxis similares, retornan resultados completamente diferentes, por lo que es común caer en el uso incorrecto de las mismas.

Empecemos por explicar que es lo que ambas hacen:
  • Count(<expresión>), cuenta el número de registros en el campo o campos involucrados en la expresión. 
  • Count(distinct<expresión>), cuenta el número de valores diferentes en el campo o campos involucrados en la expresión.

Solo los valores distintos a Null son incluidos. En los casos en que la expresión involucre a más de un campo, se creara una tabla temporal a partir de la unión de todos los campos incluidos, y el conteo se realizara sobre la tabla temporal.

Esto significa que cuando la expresión solo contenga un solo campo, el resultado de la función Count() es equivalente al número de filas en la tabla de datos, mientras que el resultado de la función Count(distinct ...) es equivalente al número de filas en la tabla de símbolos.

Un Ejemplo: Se tiene una tabla de transacciones y se necesita saber el número de órdenes que tiene la empresa X. La función Count (IdOrden) retornara el número de filas en la tabla, que por lo normal es mayor que el número de órdenes que en realidad se hicieron, dado que una orden ocupa más de una fila. Es por esto que el poder contar el número de "IdOrden" únicas es lo que dará solución a la interrogante, y Count(distinct IdOrden) es lo que te permitirá hacerlo.

Recuerda, Count(IdOrden) no cuenta las ordenes que tiene la empresa X.


Otro error común es utilizar un "campo clave" como parámetro para la función Count(). Si se utiliza la cláusula distinct no habrá problemas. Dado que el número de valores distintos está bien definido para los "campo clave". Pero de no utilizar la cláusula distinct, este número no está bien definido: En que tabla QlikView debería realizar el conteo? Recordemos que como es un "campo clave" existen al menos dos tablas donde este aparece.

Count(Campo_Clave) va a retornar un número, pero es muy probable que no sea el que estás buscando. A veces se hará el conteo sobre la tabla "incorrecta". Por lo tanto es recomendable no utilizar un "campo clave" como parámetro para la función Count() a menos que utilices la cláusula distinct.

Otra forma de realizar el conteo deseado utilizando como parámetro un "campo clave" en la función Count() sin la cláusula distinct, es crear una copia del "campo clave" en la tabla donde quieres contar los registros y utilizar este nuevo campo en la función count.

Comentarios