Bonjour à tous,
Je suis face à un problème depuis 2 jours et je n'arrive pas à comprendre ce qu'il se passe. Jusqu'à présent je travaillais principalement en SQL (avec jointures, sous requêtes et tout le tralala) pour calculer les données dont j'ai besoin. Mais vis à vis à des temps de requête, je voulais essayer de travailler plus dans le langage script QV...
Voici ce que j'ai : J'ai une table des commandes (CDE) avec, entre autre, une semaine de livraison prévu. J'ai une autre table des bons de livraison (BL), avec le numéro de commande concerné et la semaine de livraison réelle. Les semaines sont identifiées par un identifiant unique (TPS_ID...) et font respectivement référence à une table des semaines de livraison prévues et des semaines de livraison réelles.
Voici ce que je veux : Je veux pouvoir compter le nombre de semaines ouvrées (champ de la table semaine) entre la semaine prévue et la réelle. Pour cela je voudrais lier une commande à toutes les semaines entre le prévu et le réel.
J'ai suivi les informations de ce post et j'arrive au code suivant :
J'ai un peu galéré pour arriver à ce résultat mais ça, ça marche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 //Chargement de la table des semaines SEMAINE_RETARD: LOAD TPS_ID AS TPS_ID_RETARD, TPS_ANNEE AS TPS_ANNEE_RETARD, TPS_SEMAINE AS TPS_SEMAINE_RETARD, TPS_ANNEE * 100 + TPS_SEMAINE AS TPS_ANNEESEMAINE_RETARD, TPS_OUVREE AS TPS_OUVREE_RETARD Resident D_TEMPS; //Chargement d'une table temporaire avec le TPS_ID mini et maxi pour chaque commande TmpIntervalCde: NoConcatenate LOAD CDE_NUMERO, Max(TPS_ID_LIVRAISON_BL) AS TPS_ID_MAX Resident BL Group By CDE_NUMERO; Inner Join LOAD CDE_NUMERO, TPS_ID_LIVRAISON_CDE AS TPS_ID_MIN Resident CDE; //IntervalMatch pour faire le lien entre TPS_ID_RETARD et TPS_ID_MIN, TPS_ID_MAX TmpLien: IntervalMatch(TPS_ID_RETARD) LOAD TPS_ID_MIN, TPS_ID_MAX Resident TmpIntervalCde Where TPS_ID_MIN <= TPS_ID_MAX; //précision car si la commande est livrée en avance, elle n'est liée à aucune semaine
Là où ça se complique c'est quand je veux simplifier mon schéma. J'ai rajouté le code suivant pour n'avoir qu'une table qui sert de lien entre mes semaines et mes commandes :
Mais là, surprise, Qlikview n'applique pas la jointure et je me retrouve avec des OUT OF MEMORY à tous les coup !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 TmpLienCdeTpsId: NoConcatenate LOAD TPS_ID_RETARD, TPS_ID_MIN, TPS_ID_MAX Resident TmpLien; Join LOAD TPS_ID_MIN, TPS_ID_MAX, CDE_NUMERO Resident TmpIntervalCde; DROP Tables TmpIntervalCde, TmpLien;
Merci de votre aide.
Partager