Accéder au contenu principal Passer au contenu complémentaire

Correspondance entre intervalles et données discrètes

Le préfixe intervalmatch d'une instruction LOAD ou SELECT permet de lier des valeurs numériques discrètes à un ou plusieurs intervalles numériques. Il s'agit d'une fonction très puissante qui peut s'utiliser, par exemple, dans les environnements de production.

Exemple d'Intervalmatch

Considérez les deux tables ci-dessous. La première table affiche le début et la fin de la production de différentes commandes. La seconde table affiche des événements discrets. Comment est-il possible d'associer les événements discrets aux commandes, de manière à savoir, par exemple, quelles commandes ont subi des perturbations et quelles commandes ont été traitées par telle ou telle équipe ?

Table OrderLog
StartEndOrder
01:0003:35A
02:3007:58B
03:0410:27C
07:2311:43D
Table EventLog
TimeEventComment
00:000Start of shift 1
01:181Line stop
02:232Line restart 50%
04:153Line speed 100%
08:004Start of shift 2
11:435End of production

Commencez par charger les deux tables selon la procédure habituelle, puis liez le champ Time aux intervalles définis par les champs Start et End :

SELECT * from OrderLog;

SELECT * from EventLog;

Intervalmatch (Time) SELECT Start,End from OrderLog;

Vous pouvez à présent créer une table dans Qlik Sense, comme celle qui suit :

Table avec un champ Time lié aux intervalles définis par les valeurs Start et End
TimeEventCommentOrderStartEnd
0:000Start of shift 1---
1:181Line stopA1:003:35
2:232Line restart 50%A1:003:35
4:153Line speed 100%B2:307:58
4:153Line speed 100% C3:0410:....
8:004Start of shift 2C3:0410:....
8:004Start of shift 2D7:2311:....
11:435End of productionE7:2311:.....

Nous voyons à présent facilement que la commande A a principalement été affectée par l'arrêt de la ligne, mais que la vitesse réduite de la ligne a également affecté les commandes B et C. Seules les commandes C et D ont été partiellement traitées par l'équipe Shift 2.

Notez les points suivants concernant l'utilisation de intervalmatch :

  • Avant l'instruction intervalmatch, le champ contenant les points de données discrets (Time dans l'exemple ci-dessus) doit déjà avoir été lu dans Qlik Sense. L'instruction intervalmatch ne lit pas ce champ à partir de la table de la base de données.
  • La table lue dans l'instruction intervalmatch LOAD ou SELECT doit toujours contenir exactement deux champs (Start et End dans l'exemple ci-dessus). Afin d'établir un lien vers d'autres champs, vous devez lire les champs d'intervalle en même temps que les champs supplémentaires dans une instruction LOAD ou SELECT distincte (la première instruction SELECT dans l'exemple ci-dessus).
  • Les intervalles sont toujours fermés. Autrement dit, les points de fin sont inclus dans l'intervalle. Avec des limites non numériques, l'intervalle est ignoré (indéfini), tandis qu'avec des limites NULL, il est étendu de manière indéfinie (il devient illimité).
  • Les intervalles peuvent se superposer et les valeurs discrètes sont alors liées à tous les intervalles correspondants.

Résolution des problèmes de dimensions changeant progressivement à l'aide de la syntaxe intervalmatch étendue

La syntaxe intervalmatch étendue peut servir à traiter le problème bien connu des dimensions changeant progressivement dans les données sources.

Échantillon de script :

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;

L'instruction nullinterpret n'est requise que lorsque le programme lit des données à partir d'un fichier de table, puisque les valeurs manquantes sont définies comme des chaînes vides plutôt que comme des valeurs NULL.

Le chargement des données à partir de IntervalTable donnerait la table suivante :

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

L'instruction nullasvalue permet de mapper des valeurs NULL vers des champs répertoriés.

Créez les champs d'attribut Key, FirstDate, LastDate à l'aide de previous et de order by ; la table IntervalTable est alors abandonnée et remplacée par cette table de clés.

Le chargement des données à partir de Transact donnerait la table suivante :

Table avec des données chargées depuis Transact
KeyNameDateSales
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

L'instruction intervalmatch précédée de inner join remplace la clé ci-dessus par une clé synthétique qui établit une connexion à la table Transact, donnant ainsi la table suivante :

Table avec l'instruction intervalmatch précédée de inner join
KeyTeamNameFirstDateLastDateDateSales
000110NorthwestSpengler Aaron-2011-01-202009-08-18100
000110NorthwestSpengler Aaron-2011-01-202009-12-25200
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

Cette page vous a-t-elle aidé ?

Si vous rencontrez des problèmes sur cette page ou dans son contenu – une faute de frappe, une étape manquante ou une erreur technique – faites-le-nous savoir.