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, comme l'illustre l'exemple ci-dessous.

 

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 sorte que l'on sache, par exemple, quelles commandes ont subi des perturbations et quelles commandes ont été traitées par telle ou telle équipe ?

Table OrderLog
Début End Ordre
01:00 03:35 A
02:30 07:58 B
03:04 10:27 C
07:23 11:43 D

 

Table EventLog
Heure Événement Commentaire
00:00 0 Début d'équipe 1
01:18 1 Arrêt de ligne
02:23 2 Redémarrage de ligne 50 %
04:15 3 Vitesse de ligne 100 %
08:00 4 Début d'équipe 2
11:43 5 Fin de production

Chargez tout d'abord 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 QlikView, comme celle qui suit :

A table in QlikView combining the above tables.

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.

Prenez note des 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 QlikView. 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 avec 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, c'est-à-dire que 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 source.

Échantillon de script :

SET NullInterpret='';

 

IntervalTable:

LOAD Key, ValidFrom, Team from IntervalTable.xls;

NullAsValue FirstDate,LastDate;

 

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 Transact.xls;

 

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 :

Exemple de table 1
Clé FirstDate Équipe
000110 2011-01-21 Sud-ouest
000110 - Nord-ouest
000120 - Nord-ouest
000120 2013-03-05 Sud-ouest
000120 2013-03-05 Nord-ouest
000120 2013-01-06 Sud-ouest

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

Créez les champs d'attribut Key, FirstDate, LastDate à l'aide de previous et 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 :

Exemple de table 2
Clé Nom Date Ventes
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

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

Exemple de table 3
Clé Équipe Nom FirstDate LastDate Date Ventes
000110 Nord-ouest Spengler Aaron - 2011-01-20 2009-08-18 100
000110 Nord-ouest Spengler Aaron - 2011-01-20 2009-12-25 200
000110 Sud-ouest Spengler Aaron 2011-01-21 - 2011-02-03 300
000110 Sud-ouest Spengler Aaron 2011-01-21 - 2011-05-05 400
000120 Nord-ouest Ballard John - 2013-01-05 2011-06-04 500
000120 Sud-ouest Ballard John 2013-01-06 2013-03-04 2013-01-20 600
000120 Sud-ouest Ballard John 2013-03-05 - 2013-03-10 700
000120 Sud-ouest Ballard John 2013-03-05 - 2013-03-13 800
000120 Sud-ouest Ballard John 2013-03-05 - 2013-09-21 900

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 – dites-nous comment nous améliorer !

Rejoignez le Programme de modernisation analytique

Remove banner from view

Modernisez votre système sans compromettre vos précieuses applications QlikView grâce au Programme de modernisation analytique. Cliquez ici pour plus d'informations ou contactez : ampquestions@qlik.com