Перейти к основному содержимому

IntervalMatch

Префикс IntervalMatch используется для создания таблиц сравнения дискретных числовых значений с одним или несколькими числовыми интервалами, а также сравнения значений с одним или несколькими дополнительными ключами.

Syntax:  

IntervalMatch (matchfield)(loadstatement | selectstatement )

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

 

Префикс IntervalMatch устанавливается перед оператором LOAD или SELECT, который загружает интервалы. До оператора с префиксом IntervalMatch поле, которое содержит дискретные точки диаграммы (Time в приведенном ниже примере) и дополнительные ключи, уже должно быть загружено в QlikView. Данный префикс не считывает это поле из таблицы базы данных сам по себе. Он преобразует загруженную таблицу интервалов и ключей в таблицу, содержащую дополнительный столбец дискретных числовых точек диаграммы. Здесь также разворачиваются различные записи, что позволяет включать в новую таблицу одну запись на возможную комбинацию дискретных точек диаграммы, интервалов и значений ключевых полей.

Интервалы могут накладываться друг на друга, а дискретные значения будут связаны со всеми соответствующими интервалами.

Расширенный префикс IntervalMatch используется для создания таблиц связывания дискретных числовых значений с одним или несколькими числовыми интервалами, а также связывания значений с одним или несколькими дополнительными ключами. Это очень мощная и гибкая функция, которую можно использовать для связывания транзакций с изменяющимися в динамике по времени измерениями: медленно изменяющимися измерениями.

Во избежание игнорирования неопределенных границ интервалов может потребоваться разрешить сопоставление значений NULL с другими полями, которые образуют нижнюю или верхнюю границы интервала. Это выполняется с помощью оператора NullAsValue или явного теста, который заменяет значения NULL числовыми значениями, расположенными на достаточном расстоянии перед или после дискретных числовых точек диаграммы.

Arguments:  

аргументы IntervalMatch
Аргумент Описание
matchfield Поле, содержащее дискретные числовые значения, которые нужно связать с интервалами.
keyfield Поля, содержащие дополнительные атрибуты, сопоставляемые при преобразовании.
loadstatement or selectstatement Должна быть получена таблица, где первое поле содержит нижнюю границу каждого интервала, второе поле содержит верхнюю границу каждого интервала, а в случае использования сопоставления ключей третье и все последующие поля содержат ключевые поля, присутствующие в операторе IntervalMatch. Интервалы всегда закрытые, т. е. конечные точки включены в интервал. Нечисловые границы приводят к тому, что интервал игнорируется (неопределенный).

Example 1:  

Рассмотрим две таблицы. В первой таблице дано время начала и конца выполнения различных заказов. Во второй таблице находится список дискретных событий. С помощью префикса IntervalMatch возможно логически связать две таблицы для того, чтобы узнать, например, на какие заказы повлияли нарушения в работе, а также какие заказы были обработаны в какие смены.

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;

Результат:

Теперь таблица OrderLog содержит дополнительный столбец: Time. Число записей также увеличивается.

Example 1
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: (с помощью префикса keyfield)

Пример аналогичен приведенному выше, только в качестве ключевого поля добавляется ProductionLine .

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;

Результат:

Теперь простую таблицу можно создать следующим образом:

Example 2
ProductionLineTime EventCommentOrderStart End
P1

00:00

0Start of shift 1-- -
P201:000Start of shift 1---
P101:18 1Line stopA01:00 03:35
P102:23 2Line restart 50%A01:00 03:35
P104:15 3Line speed 100%B02:30 07:58
P104:15 3Line speed 100%C03:04 10:27
P108:00 4Start of shift 2C03:04 10:27
P209:00 4Start of shift 2D07:23 11:43
P111:43 5End of production-- -
P211:43 5End of productionD07:23 11:43