Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bonjour,
Je vous soumets une problématique que je n'arrive pas à optimiser.
D'un côté, j'ai une table VALO avec :
Article DateTarif Prix
ART-1 01/01/18 99
ART-1 01/03/18 102
D'un autre côté, j'ai une table STOCK avec :
Article DateStock Qté
ART-1 31/01/18 12
ART-1 28/02/18 9
ART-1 31/03/18 7
J'aimerai calculé ma valorisation à date, c'est à dire obtenir cela :
Article DateValo Qté Valo
ART-1 04/02/18 12 1188 (12x99)
ART-1 28/02/18 9 891 (9x99)
ART-1 30/04/18 7 714 (7x102)
Avez-vous une solution à me proposer ?
Bonjour bckaps69
Ci-joint le QVW attaché,
ca marche pour le jeu de données que tu a mis sur le Thread,
Essaye et di moi
Bonjour,
tout est clair jusqu’à la date DateValo.. cette date corresponds a quoi exactement ?
C'est une date aléatoire
Bonjour
Tu trouveras une solution a ton problème avec la fonction intervalmatch
Bonjour Bruno,
en fait je crois que c'est un peu plus compliqué que ca.. pour moi la solution serait eventuellement de combiner la fonction intervalmatch avec la technique "canonical date" et quelque conditions dans le script.
si tu a une solution plus simple et testée, n'hésite pas a la partager avec nous
Hi rwunderlich hope you're doing well, maybe you can take a look here ?
Maybe I need to translate to save your time:
here OP have two tables, 1 price table (with DatePrice) and 1 Quantity table (DateStock), with an Article Id linking these two tables
he wants to calculate the valuation (Qty*price) using a single Date field (be able to select every day, 365 day per year)
where:
1. on each date selected, the price should be equal to the price which correponds to a DatePrice that is equal or lower than the Date selected
AND
2. on each date selected, the Qty should be equal to the Qty which correponds to a DateStock that is equal or lower than the Date selected
I was thinking about a combination of Intervalmatch and Canonical Date technique..
Bonjour,
Si je comprends bien tu veux faire une valorisation de stock en FIFO,
Si la qté augmente : il faut prendre le prix à date (donc date immédiatement inférieure ou égale dans VALO)
Si la qté diminue : il faut décrémenter au prix le plus ancien, et pas forcément à la date inférieure :
au 04/02 tu en rentre 12 à 99 = 12*99
au 28/02 tu en sors 3 : il te reste 9 valorisés à 99
au 30/04 tu en sors 2 : reste 7 valorisés à 99 (et non pas 102)
Il faut commencer par valoriser les entrées (le stock augmente) à la date de valo<=
(par interval match) donc :
04/02 +12 12*99
ensuite on place les sorties
ici :
28/02 - 3
30/04 -2
reste donc 7 à 99 unité = 7*99
sur un cas plus compliqué :
+5 à 99 le 01/01
+7 à 102 le 02/01
- 6 le 03/01
si tu es en fifo tu décrémente d'abord les 5 à 99 +1 à 102, restent 6 à 102
su tu es en lifo tu décrémente d'abord 6 à 102, restent 5 à 99 + 1 à 102
if faut dans ce cas faire une boucle sur une table des E/S
cdt
Bonjour bckaps69
Ci-joint le QVW attaché,
ca marche pour le jeu de données que tu a mis sur le Thread,
Essaye et di moi
Bonjour Youssef
En effet çà parait plus compliqué qu'initialement et hélas non je n'ai pas de solution : trop novice pour ce cas
Bruno
Bonjour,
Principe de base de Qlik : limiter au maximum les calculs complexes dans les formules et faire jouer l’associativité à plein afin de maximiser les performances. Une solution très simple consiste à appliquer le principe de l’associativité dans ce cas précis.
Au regard des données de l’exemple, la base tarifaire est mensuelle, mais les mouvements de stocks sont eux aléatoire et quotidiens sur une période donnée. Pour qu’on puisse associer un tarif à une date de stock donnée, il faut juste un élément de rapprochement et de comparaison.
Ici, j’ai pris le mois couplé à l’année et à l’article. Bien entendu, dans la vraie vie ce sera certainement plus complexe, mais cela donne une base de départ pour la compréhension.
Donc, pour s’en sortir, il faut qu’on crée un pont entre le tarif et le stock sur une base article/mois/année . Pour ce faire, on crée un champ « Code tarif » qui est la concaténation des champs mois/année/code article dans les 2 tables. L’association entre le bon prix et le bon article pour une période donnée va se faire automatiquement, par associativité.
Ensuite, pour éviter les problèmes de modélisation liés à la redondance des champs identiques dans les tables (pour éviter les tables de clés synthétiques, on ne doit garder qu’un seul champ faisant le pont entre 2 tables), on élimine tous les champs non nécessaires dans l’une ou l’autre des tables. J’ai ici conservé le champ article dans la table des stocks mais en toute logique, il faudrait le conserver dans la table de référence, c’est-à-dire le tarif. Ca ne change pas grand-chose sur un petit modèle. Sur un modèle avec des dizaines de millions de lignes de mouvement, ça peut induire sur la performance.
Le résultat est en pièce jointe (Qlikview 12.2).
Cdt
Christophe Jouve
Principal Solution Architect
De : bruno bertels
Envoyé : lundi 14 mai 2018 18:21
À : Christophe Jouve <Christophe.Jouve@qlik.com>
Objet : Re: - Calcul en fonction d'un tarif qui évolue dans le temps