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 ?
Je pense que c'est cela que tu veux :
SET ThousandSep=' ';
SET DecimalSep=',';
SET MoneyThousandSep=' ';
SET MoneyDecimalSep=',';
SET MoneyFormat='# ##0,00 €;-# ##0,00 €';
SET TimeFormat='hh:mm:ss';
SET DateFormat='DD/MM/YYYY';
SET TimestampFormat='DD/MM/YYYY hh:mm:ss[.fff]';
SET FirstWeekDay=0;
SET BrokenWeeks=0;
SET ReferenceDay=4;
SET FirstMonthOfYear=1;
SET CollationLocale='fr-FR';
SET MonthNames='janv.;févr.;mars;avr.;mai;juin;juil.;août;sept.;oct.;nov.;déc.';
SET LongMonthNames='janvier;février;mars;avril;mai;juin;juillet;août;septembre;octobre;novembre;décembre';
SET DayNames='lun.;mar.;mer.;jeu.;ven.;sam.;dim.';
SET LongDayNames='lundi;mardi;mercredi;jeudi;vendredi;samedi;dimanche';
//////////////////////////////////////
// Données de base
//////////////////////////////////////
VALO:
Load *
Inline [
Article, DateTarif, Prix
ART-1, 01/03/18,102
ART-1, 01/01/18, 99
];
STOCK:
Load *
Inline [
Article, DateStock, Qté
ART-1, 31/03/18, 7
ART-1, 28/02/18, 9
ART-1, 31/01/18, 12
];
//////////////////////////////////////
// Création d'un calendrier
//////////////////////////////////////
LET vMinDate = Num(Makedate(2018,1,1));
LET vMaxDate = Num(Makedate(2018,5,31));
ChampDate:
LOAD date($(vMinDate)+IterNo()-1) as MaDate
AUTOGENERATE (1)
WHILE $(vMinDate)+IterNo()-1<= $(vMaxDate);
Calendrier:
LOAD
MaDate as Date,
Year(MaDate) as Année,
'T ' & Num(Ceil(Month(MaDate)/3),'(ROM)0') as Trimestre,
Month(MaDate) as Mois,
MonthEnd(MaDate)as DateFinMois,
Week(MaDate) as Semaine,
Weekday(MaDate) as JourSemaine,
Day(MaDate) as Jour
RESIDENT ChampDate;
DROP TABLE ChampDate;
SET vMinDate = ;
SET vMaxDate = ;
//////////////////////////////////////
// Création des date de début et de fin
//////////////////////////////////////
Left Join(VALO)
Load
Article, //Clé jointure
DateTarif, //Clé jointure
DateTarif as DateTarifDebut,
If(Previous(Article) = Article, Previous(DateTarif)-1, DayStart(Now())) as DateTarifFin
Resident VALO
Order by DateTarif desc;
Left Join(STOCK)
Load Distinct
Article, //Clé jointure
DateStock, //Clé jointure
DateStock as DateStockDebut,
If(Previous(Article) = Article, Previous(DateStock)-1, DayStart(Now())) as DateStockFin
Resident STOCK
order by DateStock desc;
//////////////////////////////////////
// Association des quantité et prix par article et date
//////////////////////////////////////
Left Join (VALO)
IntervalMatch(Date)
Load DateTarifDebut, DateTarifFin Resident VALO;
Left Join (STOCK)
IntervalMatch(Date)
Load DateStockDebut, DateStockFin Resident STOCK;
Drop Field DateTarifDebut;
Drop Field DateTarifFin;
Drop Field DateStockDebut;
Drop Field DateStockFin;
Join(VALO)
Load *
Resident STOCK;
Drop table STOCK;
Rename table VALO to VALO_STOCK;
Bonjour à tous,
Merci pour vos réponses et pour votre aide. J'ai réussi à obtenir ce que je souhaitais.
Dans le même genre d'idée, je vous soumets une autre problématique.
J'ai d'un côté une table de conversion comptable avec les champs suivants :
Domaine | Famille | Sous-famille | Compte |
---|---|---|---|
A | 01 | 01 | 601000 |
A | 02 | 01 | 602000 |
A | 02 | 02 | 602200 |
A | 03 | 603000 | |
A | 03 | 04 | 603400 |
Et de l'autre côté une table article :
Article | Domaine | Famille | Sous-famille |
---|---|---|---|
ART-01 | A | 01 | 01 |
ART-02 | A | 02 | 01 |
ART-03 | A | 03 | |
ART-04 | A | 03 | 01 |
ART-05 | A | 03 | 04 |
J'aimerai pouvoir rapprocher ces deux tables pour affecter le compte comptable à chaque article. Pas de problème particulier pour les articles 1, 2, et 5. En revanche, j'aimerai obtenir pour l'article 4 le compte 603000 (en l'absence de sous-famille, je remonte sur la famille uniquement.
Merci d'avance pour vos pistes.
Bonjour Julien
moi personnellement je suis toujours curieux et je veux toujours aller au bout d'un probleme, j'aimerai beaucoup que tu partage avec nous ce qui a marché pour toi, ce que tu a rajouté. de marquer ce thread comme résolu (en marquant ta propre réponse comme correcte si aucune des solutions proposés n'a vraiment marché a 100%).
Aussi, pour que tout le monde puisse se retrouver en faisant les recherches, je t'invite (si tu veux bien) a créer un thread dédié a chaque problématique.
Bonjour,
Une méthode simple et rapide consiste à rapprocher les deux tables par jointure ouverte (full join), et à remplacer les valeurs de comptes vides par une valeur récupérée dans un mapping.
D’autres méthodes sont possibles - certainement plus élégantes, celle-ci est un exemple.
Tout se fait au moment du chargement des données.
Commentaires dans le script de chargement.
Cdt
Christophe Jouve
De : Julien Roblès
Envoyé : mardi 15 mai 2018 14:16
À : Christophe Jouve <Christophe.Jouve@qlik.com>
Objet : Re: - Calcul en fonction d'un tarif qui évolue dans le temps