Skip to main content
Announcements
Live today at 11 AM ET. Get your questions about Qlik Connect answered, or just listen in. SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Problème fonction NetWorkDays

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.

23 Replies
kevinchevrier
Partner - Creator III
Partner - Creator III

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

Not applicable
Author

Dans ton document qlikview, il y a les mêmes erreurs que moi ^^

Not applicable
Author

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

kevinchevrier
Partner - Creator III
Partner - Creator III

C'est étrange...

La solution peut alors être d'utiliser un IF(DATECREATION = DATETRT, 0, Networkdays(....))

Kevin

Not applicable
Author

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.

Not applicable
Author

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.

lcloatre
Partner - Creator III
Partner - Creator III

Penches-toi d'abord sur le format de tes champs. Ils doivent être au format date.

Not applicable
Author

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';

Not applicable
Author

Donc finalement:

  • Je gère le cas où Jour de création = Jour de traitement
  • Je gère le cas où Jour de traitement = Jour de création +1
  • J'enlève 1 au résultat de la fonction NetWorkDays pour les autres cas.

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,

kevinchevrier
Partner - Creator III
Partner - Creator III

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