Saltar al contenido principal Saltar al contenido complementario

Emparejar intervalos con datos discretos

El prefijo intervalmatch delante de una sentencia LOAD o SELECT sirve para enlazar valores numéricos con uno o más intervalos numéricos. Es una utilidad muy potente que se puede utilizar, por ejemplo, en entornos de producción, como se muestra en el ejemplo inferior.

Ejemplo:  

Observe las tablas inferiores. La primera tabla muestra el inicio y el final de la producción de diferentes pedidos. La segunda tabla contiene algunos eventos discretos. ¿Cómo podemos asociar los eventos discretos con los pedidos para saber por ejemplo qué cambio afecta a qué pedidos y qué pedidos se procesaron a causa de qué cambios?

Tabla Registro de pedidos
Inicio Fin Pedido
01:00 03:35 A
02:30 07:58 B
03:04 10:27 C
07:23 11:43 D

 

Tabla Registro de eventos
Hora Evento Comentario
00:00 0 Inicio de Turno 1
01:18 1 Fin de línea
02:23 2 Reinicio de línea 50%
04:15 3 Velocidad de línea 100%
08:00 4 Inicio de Turno 2
11:43 5 Fin de la producción

Primero hay que cargar las dos tablas como de costumbre, y después vincular el campo Time a los intervalos definidos por los campos Start y End:

SELECT * from OrderLog;

SELECT * from EventLog;

Intervalmatch (Time) SELECT Start,End from OrderLog;

Ahora puede crear una tabla en QlikView como se muestra a continuación:

A table in QlikView combining the above tables.

Ahora podemos ver fácilmente que la interrupción del servicio de autobuses afectó principalmente al pedido A, pero que la reducción en la velocidad de la línea de autobuses afectó también a los pedidos B y C. Solo los pedidos C y D fueron manejados en parte por Shift 2.

Tenga en cuenta los puntos siguientes cuando utilice intervalmatch:

  • Antes de la sentencia intervalmatch debe haberse leído en QlikView el campo que contiene los puntos de datos discretos (el campo Time en el ejemplo anterior). ¡La sentencia intervalmatch no lee este campo desde la tabla de la base de datos!
  • La tabla leída en la sentencia intervalmatch LOAD o SELECT debe contener siempre exactamente dos campos (Start y End en el ejemplo anterior). Con el fin de establecer un vínculo a otros campos, deben leerse los campos de intervalo junto con los campos adicionales en una sentencia LOAD o SELECT aparte (la primera sentencia SELECT en el ejemplo anterior).
  • Los intervalos están siempre cerrados, es decir, los puntos finales están incluidos en el intervalo. Los límites no numéricos provocan que se descarte el intervalo (indefinido) mientras que los límites NULL amplían el intervalo indefinidamente (sin límite).
  • Los intervalos pueden solaparse y los valores discretos se enlazarán con todos los intervalos coincidentes.

Utilizar la sintaxis ampliada de intervalmatch para resolver problemas de cambios de dimensión progresivos

La sintaxis ampliada de intervalmatch puede emplearse para gestionar el conocido problema del cambio de dimensión progresivo en las fuentes de datos.

Script a modo de ejemplo:

SET NullInterpret='';

 

IntervalTable:

LOAD Key, ValidFrom, Team from IntervalTable.xls;

NullAsValue FirstDate,LastDate;

 

Key:

LOAD

Key,

ValidFrom as FirstDate,

date(if(Key=previous(Key),

previous(ValidFrom) - 1)) as LastDate,

Team

RESIDENT IntervalTable order by Key, ValidFrom desc;

 

drop table IntervalTable;

 

Transact:

LOAD Key, Name, Date, Sales from Transact.xls;

 

INNER JOIN intervalmatch (Date,Key) LOAD FirstDate, LastDate, Key RESIDENT Key;

La sentencia nullinterpret solo es necesaria cuando se leen datos desde un archivo de tabla, ya que los valores perdidos se definen como cadenas vacías, en lugar de valores NULL.

Si cargamos los datos desde una tabla IntervalTable dará como resultado la siguiente tabla:

Ejemplo tabla 1
Clave Primera fecha Equipo
000110 2011-01-21 Suroeste
000110 - Noroeste
000120 - Noroeste
000120 2013-03-05 Suroeste
000120 2013-03-05 Noroeste
000120 2013-01-06 Suroeste

La sentencia nullasvalue permite que los valores NULL se enlacen con los valores de la lista.

Crear Key, FirstDate, LastDate, (campos de atributo) empleando previous y order by y por lo tanto IntervalTable se elimina siendo reemplazado por esta tabla clave.

Si cargamos los datos desde una tabla Transact dará como resultado la siguiente tabla:

Ejemplo tabla 2
Clave Nombre Fecha Ventas
000110 Rodríguez Javier 2009-08-18 100
000110 Rodríguez Javier 2009-12-25 200
000110 Rodríguez Javier 2011-02-03 300
000110 Rodríguez Javier 2011-05-05 400
000120 Díaz Juan 2011-06-04 500
000120 Díaz Juan 2013-01-20 600
000120 Díaz Juan 2013-03-10 700
000120 Díaz Juan 2013-03-13 800
000120 Díaz Juan 2013-09-21 900

La sentencia intervalmatch precedida por inner join remplaza la clave de arriba por una clave sintética que conecta con la tabla Transact, dando como resultado la siguiente tabla:

Ejemplo tabla 3
Clave Equipo Nombre Primera fecha Última fecha Fecha Ventas
000110 Noroeste Rodríguez Javier - 2011-01-20 2009-08-18 100
000110 Noroeste Rodríguez Javier - 2011-01-20 2009-12-25 200
000110 Suroeste Rodríguez Javier 2011-01-21 - 2011-02-03 300
000110 Suroeste Rodríguez Javier 2011-01-21 - 2011-05-05 400
000120 Noroeste Díaz Juan - 2013-01-05 2011-06-04 500
000120 Suroeste Díaz Juan 2013-01-06 2013-03-04 2013-01-20 600
000120 Suroeste Díaz Juan 2013-03-05 - 2013-03-10 700
000120 Suroeste Díaz Juan 2013-03-05 - 2013-03-13 800
000120 Suroeste Díaz Juan 2013-03-05 - 2013-09-21 900

¿Esta página le ha sido útil?

No dude en indicarnos en qué podemos mejorar si encuentra algún problema en esta página o su contenido, como, por ejemplo, errores tipográficos, pasos que falta o errores técnicos.

Únase al Programa de modernización de la analítica

Remove banner from view

Modernícese sin comprometer sus valiosas aplicaciones de QlikView con el Programa de modernización de la analítica. Haga clic aquí para obtener más información o contactar con nosotros: ampquestions@qlik.com