Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione di dati
Premesso che devo ancora "digerire" la cosa del List.Generate :-)
Ho effettuato l'adattamento per come normalmente viene inteso "primo giorno lavorativo successivo" nel caso di un termine.
La formula originaria di Rick de Groot aggiunge sempre un giorno alla data passata come primo argomento della funzione e poi verifica se la data è un "festivo" (inteso come sabato, domenica o una delle date di un elenco festività).
Questo richiederebbe, nel caso, di prendere sempre una data "precedente" al termine che sia in scadenza ad una determinata data.
Quindi la prima modifica è stata quella di non incrementare di 1 giorno la data passata come argomento della funzione.
Ho fatto anche in modo che si possa indicare se il sabato sia effettivamente un "festivo". Non i tutte le casistiche il sabato è considerato non lavorativo.
Ho anche fatto in modo che l'argomento a cui passare le date delle festività risulti essere solo di tipo "list" e non una tabella e la relativa colonna.
Credo che in questo modo vi sia più "flessibilità" (si può richiamare una tabella e relativa colonna o direttamente una eventuale lista.
Questa è la funzione adattata. La query che la contiene potrebbe essere nominata come "Primo_Giorno_Lavorativo_Successivo"
(Data as date, bSabatoFestivo as logical, optional ListaFestività as list) =>
Date.AddDays(Data, 0
+ List.Count(
List.Generate(
() => [x = Date.AddDays(Data, 0),
y = ListaFestività] ,
each Date.DayOfWeek([x], Day.Monday) >= (if bSabatoFestivo = true then 5 else 6) or List.Contains([y], [x]) ,
each [x = Date.AddDays([x], 1), y = [y] ]
)
)
)
Per Giovanni
Nel tuo lavoro in pratica tu parti da una data a cui aggiungi un giorno. A quella data dovresti applicare la formula. Ad es., per rimanere al topic dove aggiungevi un giorno alla "DATA PAYIN", potrebbe essere utilizzata così:
=Table.TransformColumns(#"Rinominate colonne", {{"DATA PAYIN", each Primo_Giorno_Lavorativo_Successivo(Date.AddDays(_,1), true, {}), type date}})
Ho inserito "true" per l'argomento bSabatoFestivo.
Ho utilizzato una lista vuota "{}" per le festività e quindi non vi saranno spostamenti di data se non per i sabati e domeniche.
Nel caso dovresti creare una tabella, eventualmente tra trasformare il lista, con eventuali date di festività per l'anno o gli anni a cui fanno riferimento le date (tenendo presente che se ci sono date di fine anno potresti dover inserire le festività di inizio anno. Metti che capiti il 31/12 che sia una domenica devi indicare come festività 1/1 dell'anno successivo altrimenti la formula, passa al lunedì che però è 1/1 che è festivo).
Spero ti possa essere utile.
ciao