Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bonjour.
Dans mon script, j'utilise la fonction NetWorkDays afin de calculer un délai de jours ouvrés.
Étrangement, quand la date de début est égale à la date de fin, le délai calculé et parfois de 0 et parfois de 1. J'aimerai qu'il soit à 0 dans ces cas là. Avez-cous une idée de la raison de cette erreur ?
Voici mon script:
LOAD
*,
Date(Date#(DATECREATION, 'YYYYMMDD'), 'DD/MM/YYYY') as [Date de création],
Date(Date#(DATETRT, 'YYYYMMDD'), 'DD/MM/YYYY') as [Date de traitement], // Date à laquelle le traitement a eu lieu.
NetWorkDays(DATECREATION, DATETRT) as [Délai ouvré]; // Délai en jours ouvrés
Cordialement.
Ceci dit, ta solution devrait fonctionner aussi.
As-tu essayé avec un MakeDate ? Chez moi ça marche
=NetWorkDays(MakeDate(Mid(DATECREATION,1,4),Mid(DATECREATION,5,2),Mid(DATECREATION,7,2)),MakeDate(Mid(DATETRT,1,4),Mid(DATETRT,5,2),Mid(DATETRT,7,2)))
Kevin
Dans ton document qlikview, il y a les mêmes erreurs que moi ^^
Je ne peux appeler [Date de création] et [Date de traitement] à ce niveau mais
NetWorkDays(Date(Date#(DATECREATION, 'YYYYMMDD'), 'YYYY-MM-DD'), Date(Date#(DATETRT, 'YYYYMMDD'), 'YYYY-MM-DD')) |
provoque les mêmes erreurs
C'est étrange...
La solution peut alors être d'utiliser un IF(DATECREATION = DATETRT, 0, Networkdays(....))
Kevin
Je n'aime pas bien cette solution .
C'est quand même surprenant que le comportement diffère sur les mêmes couples de date.
J'ai aussi un autre bug. Entre le 28/02/2017 et le 01/03/2017, La fonction NetWorkDays renvoie 2 jours.
Après vérification, entre me 01/03/2017 et le 02/03/2017, ça me calcule aussi 2 jours ouvrés ainsi que pour nombre d'autres dates. Je ne comprends rien à cette fonction apparemment.
Penches-toi d'abord sur le format de tes champs. Ils doivent être au format date.
Laurent,
Merci pour ta réponse mais je ne la comprends pas bien. Je ne vois pas ce qui cloche dans mon script. Pour le moment, ce qui semble se rapprocher le plus de la réalité est:
if (DATETRT = DATECREATION, 0, if(DATETRT - DATECREATION = 1, 1, NetWorkDays(Date(Date#(DATECREATION, 'YYYYMMDD'), 'DD/MM/YYYY'), Date(Date#(DATETRT, 'YYYYMMDD'), 'DD/MM/YYYY'))-1)) | as [Délai ouvré]; |
Est ce que ça peut venir de ça:
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';
Donc finalement:
Ce n'est pas très propre et je dirai même très étrange.
Quelqu'un a une autre solution? Une idée ?
Cordialement,
Peux-tu essayer avec la formule suivante ? :
=NetWorkDays(date(floor(date(Date#(DATECREATION,'YYYYMMDD'),'YYYY-MM-DD'))),date(floor(date(date#(DATETRT,'YYYYMMDD'),'YYYY-MM-DD'))))
sinon je ne vois pas désolé.
Kevin