QlikWorld 2020 Global Conference. Únase a nosotros para descubrir cómo aprovechar al máximo sus datos. Actúe rápido. Regístrese ahora y ahorre dinero.

Emparejar intervalos con datos discretos

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

Ejemplo de intervalmatch

Observe las dos 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 OrderLog
Inicio Fin Orden
01:00 03:35 A
02:30 07:58 B
03:04 10:27 C
07:23 11:43 D
Tabla EventLog
Time Evento Comentario
00:00 0 Inicio de shift 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 shift 2
11:43 5 Fin de la producción

Primero, cargue las dos tablas como de costumbre y después vincule 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 Qlik Sense, como se muestra a continuación:

Tabla con el campo Time vinculado a los intervalos definidos por Inicio y Fin
Time Evento Comentario Orden Comienzo End
0:00 0 Inicio de shift 1 - - -
1:18 1 Fin de línea A 1:00 3:35
2:23 2 Reinicio de línea 50% A 1:00 3:35
4:15 3 Velocidad de línea 100% B 2:30 7:58
4:15 3 Velocidad de línea 100% C 3:04 10:....
8:00 4 Inicio de shift 2 C 3:04 10:....
8:00 4 Inicio de shift 2 D 7:23 11:....
11:43 5 Fin de la producción E 7:23 11:.....

Ahora podemos ver fácilmente que el pedido A se vio afectado principalmente por la parada de línea, pero que la velocidad reducida de la línea de producción también afectó a los pedidos B y C. Solo los pedidos C y D fueron gestionados en parte por Shift 2.

Tenga en cuenta los puntos siguientes cuando use intervalmatch:

  • Antes de la sentencia intervalmatch, el campo que contiene los puntos de datos discretos (Time en el ejemplo superior) ya debe haberse leído en Qlik Sense. 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 siempre debe contener exactamente dos campos (Start y End en el ejemplo anterior). Para definir un enlace a otros campos, debe leer los campos de intervalo junto con campos adicionales en una sentencia aparte LOAD o SELECT (la primera sentencia SELECT en el ejemplo anterior).
  • Los intervalos están siempre cerrados. Es decir, los puntos finales se incluyen en el intervalo. Los límites no numéricos hacen que se descarte el intervalo (no definido) mientras que los límites NULL amplían el intervalo indefinidamente (ilimitado).
  • 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 'lib://dataqv/intervalmatch.xlsx' (ooxml, embedded labels, table is IntervalTable);

 

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 'lib://dataqv/intervalmatch.xlsx' (ooxml, embedded labels, table is Transact);

 

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 inexistentes se definen como cadenas vacías, en lugar de valores NULL.

Cargar los datos desde IntervalTable dará como resultado la siguiente tabla:

Table with data loaded from IntervalTable
Key FirstDate Team
000110 2011-01-21 Southwest
000110 - Northwest
000120 - Northwest
000120 2013-03-05 Southwest
000120 2013-03-05 Northwest
000120 2013-03-05 Southwest

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.

Cargar los datos desde Transact dará como resultado la siguiente tabla:

Tabla con datos cargados desde Transact
Clave Nombre Fecha Ventas
000110 Spengler Aaron 2009-08-18 100
000110 Spengler Aaron 2009-12-25 200
000110 Spengler Aaron 2011-02-03 300
000110 Spengler Aaron 2011-05-05 400
000120 Ballard John 2011-06-04 500
000120 Ballard John 2013-01-20 600
000120 Ballard John 2013-03-10 700
000120 Ballard John 2013-03-13 800
000120 Ballard John 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 tabla siguiente:

Tabla con la sentencia intervalmatch precedida por inner join
Clave Equipo Nombre FirstDate LastDate Date Ventas
000110 Northwest Spengler Aaron - 2011-01-20 2009-08-18 100
000110 Northwest Spengler Aaron - 2011-01-20 2009-12-25 200
000110 Southwest Spengler Aaron 2011-01-21   2011-02-03 300
000110 Southwest Spengler Aaron 2011-01-21   2011-05-05 400
000120 Northwest Ballard John   2013-01-05 2011-06-04 500
000120 Southwest Ballard John 2013-01-06 2013-03-04 2013-01-20 600
000120 Southwest Ballard John 2013-03-05   2013-03-10 700
000120 Southwest Ballard John 2013-03-05   2013-03-13 800
000120 Southwest Ballard John 2013-03-05   2013-09-21 900