Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
colombari-g
Contributor III
Contributor III

Nettoyage et regroupement de durée

Bonjour,

Je travaille sur une application de traçabilité de palettes.

Dans la base de données, j'ai pour chaque palette une liste de durées qu'il faut nettoyer et regrouper.

Je n'arrive pas à trouver la bonne façon de faire ça avec Qlikview.

Par exemple, j'ai le cas suivant. Je veux passer des données brutes aux données nettoyées en utilisant les règles

interval match.jpg

De plus, je vais avoir besoin de trier les données nettoyées suivant le champ ordre du tableau de règles.

J'ai essayé plusieurs techniques : Macros, procédure sub dans le script, Interval match mais aucune solution ne donne satisfaction. La plus proche est la macro mais j'ai des comportements étranges (mélange de variables)

function FormateDureeJour(pDuree)

  if pDuree =("N/A") then

  FormateDureeJour = "Donnée Absente|0"

  elseif pDuree < 0 then

  FormateDureeJour = "Erreur|1"

  elseif pDuree >=1 and pDuree <15 then

  FormateDureeJour = "de 1 à 15|2"

  elseif pDuree >=16 and pDuree <25 then

  FormateDureeJour = "de 16 à 25|3"

  elseif pDuree >=26 and pDuree <40 then

  FormateDureeJour = "de 26 à 40|4"

  else FormateDureeJour = "sup à 40|5"

  end if

end function 

Merci pour votre aide.

Gilles

1 Solution

Accepted Solutions
hic
Former Employee
Former Employee

Intervalmatch est la meilleure solution. Utilisez le script ci-dessous, et créez un tableau croisé dynamique comme dans l'image.

HIC

tmpRègles:

Load * Inline

[Min, Max, Texte

0,0,N/A

-9999,-1, Erreur

1,15,de 1 à 15

16,25, de 16 à 25

26,39,de 26 à 39

40,99999, plus de 40];

tmpDonnées:

Crosstable (Durée, Valeur,1) Load * Inline

[Palette, Durée 1, Durée 2, Durée 3

A, 15, 12, 55

B, -60, 27,

C, 0, 15, 20];

Left Join (tmpDonnées) IntervalMatch (Valeur) Load Min, Max Resident tmpRègles;

Left Join (tmpDonnées) Load * Resident tmpRègles;

Drop Table tmpRègles;

Données:

Noconcatenate Load Durée,Max,Min,Palette,Valeur,

  If(Len(Texte)>0,Texte,'Manquant') as Texte

  Resident tmpDonnées;

Drop Table tmpDonnées;

Image1.png

View solution in original post

2 Replies
hic
Former Employee
Former Employee

Intervalmatch est la meilleure solution. Utilisez le script ci-dessous, et créez un tableau croisé dynamique comme dans l'image.

HIC

tmpRègles:

Load * Inline

[Min, Max, Texte

0,0,N/A

-9999,-1, Erreur

1,15,de 1 à 15

16,25, de 16 à 25

26,39,de 26 à 39

40,99999, plus de 40];

tmpDonnées:

Crosstable (Durée, Valeur,1) Load * Inline

[Palette, Durée 1, Durée 2, Durée 3

A, 15, 12, 55

B, -60, 27,

C, 0, 15, 20];

Left Join (tmpDonnées) IntervalMatch (Valeur) Load Min, Max Resident tmpRègles;

Left Join (tmpDonnées) Load * Resident tmpRègles;

Drop Table tmpRègles;

Données:

Noconcatenate Load Durée,Max,Min,Palette,Valeur,

  If(Len(Texte)>0,Texte,'Manquant') as Texte

  Resident tmpDonnées;

Drop Table tmpDonnées;

Image1.png

colombari-g
Contributor III
Contributor III
Author

Merci beaucoup Henric,

C'est parfait.