Come calcolare il numero della settimana ISO in Power Query

Modifichiamo la numerazione dei giorni della settimana in base alle regole ISO8601

Tutto inizia con il calcolo dei giorni settimanali. Per impostazione predefinita, la funzione Date.DayOfWeek di Power Query restituisce un numero compreso tra 0 e 6 a partire da domenica. Per restituire il numero del giorno della settimana in base alle regole ISO8601, è necessario aggiungere il valore facoltativo del primo giorno della settimana e modificare la numerazione da 1 a 7. Per questa dimostrazione è stato generato anche un elenco di date.

 

Power Query

 

=Date.DayOfWeek([Date], Day.Monday)+1

 

Dopo questo piccolo aggiustamento, è possibile calcolare il numero della settimana ISO in Power Query con tutte le condizioni necessarie.

Utilizzando i numeri ISO del giorno della settimana (che vanno da 1 per lunedì a 7 per domenica), sottrarre il giorno della settimana dalla data ordinale, quindi aggiungere 10. Dividere il risultato per 7: il quoziente è uguale al numero della settimana. Se il numero della settimana così ottenuto è uguale a 0, significa che la data appartiene all’anno precedente (basato sulla settimana). Se si ottiene un numero di settimana 53, è necessario verificare che la data non sia effettivamente nella settimana 1 dell’anno successivo.

 

=if
Number.RoundDown((Date.DayOfYear([Date])-(Date.DayOfWeek([Date], Day.Monday)+1)+10)/7)=0
then
Number.RoundDown((Date.DayOfYear(#date(Date.Year([Date])-1,12,31))-(Date.DayOfWeek(#date(Date.Year([Date])-1,12,31), Day.Monday)+1)+10)/7)
else if
(Number.RoundDown((Date.DayOfYear([Date])-(Date.DayOfWeek([Date], Day.Monday)+1)+10)/7)=53
and (Date.DayOfWeek(#date(Date.Year([Date]),12,31), Day.Monday)+1<4))
then
1
else
Number.RoundDown((Date.DayOfYear([Date])-(Date.DayOfWeek([Date], Day.Monday)+1)+10)/7)

 

Ecco il codice M da inserire in Blank Query per provare in autonomia:

 

//datacornering.com
let
Source = List.Dates(DateTime.Date(DateTime.LocalNow()), 365, #duration(1, 0, 0, 0)),
#”Converted to Table” = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#”Renamed Columns” = Table.RenameColumns(#”Converted to Table”,{{“Column1”, “Date”}}),
#”Changed Type” = Table.TransformColumnTypes(#”Renamed Columns”,{{“Date”, type date}}),
#”Weekday Number” = Table.AddColumn(#”Changed Type”, “Weekday Number”, each Date.DayOfWeek([Date], Day.Monday)+1),
#”ISO Week Number” = Table.AddColumn(#”Weekday Number”, “ISO Week Number”, each if
Number.RoundDown((Date.DayOfYear([Date])-(Date.DayOfWeek([Date], Day.Monday)+1)+10)/7)=0
then
Number.RoundDown((Date.DayOfYear(#date(Date.Year([Date])-1,12,31))-(Date.DayOfWeek(#date(Date.Year([Date])-1,12,31), Day.Monday)+1)+10)/7)
else if
(Number.RoundDown((Date.DayOfYear([Date])-(Date.DayOfWeek([Date], Day.Monday)+1)+10)/7)=53
and (Date.DayOfWeek(#date(Date.Year([Date]),12,31), Day.Monday)+1<4))
then
1
else
Number.RoundDown((Date.DayOfYear([Date])-(Date.DayOfWeek([Date], Day.Monday)+1)+10)/7))
in
#”ISO Week Number”

 

Le informazioni presenti in questo post, sono prese dall’articolo: http://datacornering.com/how-to-calculate-iso-week-number-in-power-query/

Contattaci

La tua crescita parte da qui
Per maggiori informazioni

Contattaci

    Iscriviti alla newsletter

      Tematiche d'interesse