Saltar al contenido principal Saltar al contenido complementario

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 utilidad muy potente que se puede utilizar, por ejemplo, en entornos de producción.

Ejemplo de intervalmatch

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 OrderLog
InicioFinPedido
01:0003:35A
02:3007:58B
03:0410:27C
07:2311:43D
Table EventLog
HoraEventoComentario
00:000Inicio de turno 1
01:181Fin de línea
02:232Reinicio de línea 50%
04:153Velocidad de línea 100%
08:004Inicio de turno 2
11:435Fin 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 Qlik Sense como se muestra a continuación:

Tabla con el campo Time vinculado a los intervalos definidos por Inicio y Fin
HoraEventoComentarioOrdenInicioFin
0:000Inicio de turno 1---
1:181Fin de líneaA1:003:35
2:232Reinicio de línea 50%A1:003:35
4:153Velocidad de línea 100%B2:307:58
4:153Velocidad de línea 100% C3:0410:....
8:004Inicio de turno 2C3:0410:....
8:004Inicio de turno 2D7:2311:....
11:435Fin de la producciónE7:2311:.....

Ahora podemos ver fácilmente que principalmente el pedido A se vio afectado por la interrupción de la línea, pero que la reducción de la velocidad de la línea 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, el campo que contiene los puntos de datos discretos (Time en el ejemplo anterior) debe haberse leído ya 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 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 se incluyen 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 '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.

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

Table with data loaded from IntervalTable
KeyFirstDateTeam
0001102011-01-21Southwest
000110-Northwest
000120-Northwest
0001202013-03-05Southwest
0001202013-03-05Northwest
0001202013-03-05Southwest

La sentencia nullasvalue permite que los valores NULL se asignen a los campos de la lista.

Cree los campos de atributo Key, FirstDate y LastDate utilizando previous y order by, y por lo tanto se elimina IntervalTable, siendo reemplazada por esta tabla de claves.

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

Tabla con datos cargados desde Transact
ClaveNombreFechaVentas
000110Spengler Aaron2009-08-18100
000110Spengler Aaron2009-12-25200
000110Spengler Aaron2011-02-03300
000110Spengler Aaron2011-05-05400
000120Ballard John2011-06-04500
000120Ballard John2013-01-20600
000120Ballard John2013-03-10700
000120Ballard John2013-03-13800
000120Ballard John2013-09-21900

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:

Tabla con la sentencia intervalmatch precedida por inner join
ClaveEquipoNombreFirstDateLastDateDateSales
000110NorthwestSpengler Aaron-2011-01-202009-08-18100
000110NorthwestSpengler Aaron-20/01/201125/12/2009200
000110SouthwestSpengler Aaron2011-01-21 2011-02-03300
000110SouthwestSpengler Aaron2011-01-21 2011-05-05400
000120NorthwestBallard John 2013-01-052011-06-04500
000120SouthwestBallard John2013-01-062013-03-042013-01-20600
000120SouthwestBallard John2013-03-05 2013-03-10700
000120SouthwestBallard John2013-03-05 2013-03-13800
000120SouthwestBallard John2013-03-05 2013-09-21900

¿Esta página le ha sido útil?

Si encuentra algún problema con esta página o su contenido (errores tipográficos, pasos que faltan o errores técnicos), no dude en ponerse en contacto con nosotros.