IntervalMatch

El prefijo ampliado IntervalMatch se utiliza para crear una tabla que hace correspondencias de valores numéricos discretos a uno o más intervalos numéricos, y al mismo tiempo enlaza los valores de una o más claves adicionales.

Syntax:  

IntervalMatch (matchfield)(loadstatement | selectstatement )

IntervalMatch (matchfield,keyfield1 [ , keyfield2, ... keyfield5 ] ) (loadstatement | selectstatement )

 

El prefijo IntervalMatch debe colocarse antes de una sentencia LOAD o SELECT que carga los intervalos. El campo que contiene los puntos de datos discretos (Hora en el ejemplo de más abajo) y las claves adicionales deben haberse cargado ya en QlikView antes de la sentencia con el prefijo IntervalMatch. El prefijo no lee por sí mismo este campo desde la tabla de la base de datos. El prefijo transforma la tabla cargada de intervalos y claves en una tabla que contiene una columna adicional: los puntos de datos numéricos discretos. También amplía el número de registros de forma que la nueva tabla contiene un registro por combinación posible de puntos de datos discretos, intervalo y valor del campo(s) clave.

Los intervalos pueden solaparse y los valores discretos se enlazarán con todos los intervalos coincidentes.

El prefijo ampliado IntervalMatch se utiliza para crear una tabla que hace correspondencias de valores numéricos discretos a uno o más intervalos numéricos, y al mismo tiempo enlaza los valores de una o más claves adicionales. Ésta es una funcionalidad muy potente y flexible, que puede utilizarse para enlazar transacciones con dimensiones que cambien en el tiempo: dimensiones de cambio lento.

Para evitar que los límites de intervalo indefinidos se descarten, es necesario permitir a los valores NULL hacer corresponder los campos que constituyen los límites superior o inferior del intervalo. Esto se hace mediante la sentencia NullAsValue o mediante un test explícito que reemplaza los valores NULL por un valor numérico antes o después de cualquiera de los puntos de datos numéricos discretos.

Arguments:  

Argumento Descripción
matchfield Es el campo que contiene los valores numéricos discretos que se van a enlazar con los intervalos.
keyfield Son campos que contienen los atributos adicionales que se van a comparar en la transformación.
loadstatement or selectstatement Debe dar como resultado una tabla, en la que el primer campo contenga el límite inferior de cada intervalo, el segundo campo contiene el límite superior de cada intervalo, y en caso de usar comparación de claves, el tercer campo y subsiguientes contienen el/los campos clave presentes en la sentencia IntervalMatch. Los intervalos están siempre cerrados, es decir, los puntos finales están incluidos en el intervalo. En caso de tener límites no numéricos, no se considera el intervalo (se descarta como indefinido).

Example 1:  

En las dos tablas a continuación, la primera indica las horas de inicio y finalización de distintos pedidos. La segunda indica un número de eventos. Mediante el prefijo IntervalMatch podemos conectar lógicamente las dos tablas para averiguar por ej. qué pedidos han resultado afectados por alteraciones y qué pedidos han sido procesados en qué turnos.

EventLog:
LOAD * Inline [
Time, Event, Comment
00:00, 0, Start of shift 1
01:18, 1, Line stop
02:23, 2, Line restart 50%
04:15, 3, Line speed 100%
08:00, 4, Start of shift 2
11:43, 5, End of production
];

OrderLog:
LOAD * INLINE [
Start, End, Order
01:00, 03:35, A
02:30, 07:58, B
03:04, 10:27, C
07:23, 11:43, D
];

//Link the field Time to the time intervals defined by the fields Start and End.
Inner Join IntervalMatch ( Time )
LOAD Start, End
Resident OrderLog;

Resultado:

La tabla OrderLog contiene ahora una columna adicional: Time. El número de registros también se ha ampliado.

Time Start End Order

00:00

- - -
01:18 01:00 03:35 A
02:23 01:00 03:35 A
04:15 02:30 07:58 B
04:15 03:04 10:27 C
08:00 03:04 10:27 C
08:00 07:23 11:43 D
11:43 07:23

11:43

D

Example 2: (mediante keyfield)

El mismo ejemplo que el anterior, añadiendo ProductionLine como campo clave.

EventLog:
LOAD * Inline [
Time, Event, Comment, ProductionLine
00:00, 0, Start of shift 1, P1
01:00, 0, Start of shift 1, P2
01:18, 1, Line stop, P1
02:23, 2, Line restart 50%, P1
04:15, 3, Line speed 100%, P1
08:00, 4, Start of shift 2, P1
09:00, 4, Start of shift 2, P2
11:43, 5, End of production, P1
11:43, 5, End of production, P2
];
 
OrderLog:
LOAD * INLINE [
Start, End, Order, ProductionLine
01:00, 03:35, A, P1
02:30, 07:58, B, P1
03:04, 10:27, C, P1
07:23, 11:43, D, P2
];
 
//Link the field Time to the time intervals defined by the fields Start and End and match the values
// to the key ProductionLine.
Inner Join
IntervalMatch ( Time, ProductionLine )
LOAD Start, End, ProductionLine
Resident OrderLog;

Resultado:

Ahora se podría crear un cuadro de tabla como el siguiente:

ProductionLine Time Event Comment Order Start End
P1

00:00

0 Start of shift 1 - - -
P2 01:00 0 Start of shift 1 - - -
P1 01:18 1 Line stop A 01:00 03:35
P1 02:23 2 Line restart 50% A 01:00 03:35
P1 04:15 3 Line speed 100% B 02:30 07:58
P1 04:15 3 Line speed 100% C 03:04 10:27
P1 08:00 4 Start of shift 2 C 03:04 10:27
P2 09:00 4 Start of shift 2 D 07:23 11:43
P1 11:43 5 End of production - - -
P2 11:43 5 End of production D 07:23 11:43