Settimana dell'anno in PQ

Non è propriamente un programma di BI, ma nelle sue versioni più recenti anche Excel può fare grandi cose!

Moderatore: Utilizzo_prof_Excel

Rispondi

AntonioP
Messaggi: 79 | Topic creati
Iscritto il: gio 30 lug 2020, 13:18
Ringraziato: 10 volte
Contatta:

Settimana dell'anno in PQ

Messaggio da AntonioP »

Ciao,
di seguito l'istruzione M che calcola la settimana dell'anno:
= Table.AddColumn(#"Inserito mese", "Settimana dell'anno_CONS", each Date.WeekOfYear([DATA_CONSEGNA]), Int64.Type)

Mi è stato sollevato un problema: alcuni calendari considerano i giorni 1-2-3 gennaio come settimana 53 del 2020, mentre la funzione sopra la considera come settimana 1 del 2021.

Posso fare in modo la settimana 1 in PQ sia dal 4 al 10 gennaio, mentre 1-2-3 legarli alla settimana 53/2020?

Grazie


Avatar utente

Andrea90
Messaggi: 2240 | Topic creati
Iscritto il: dom 28 giu 2020, 19:41
Luogo: Bologna
Ringraziato: 672 volte
Contatta:

Settimana dell'anno in PQ

Messaggio da Andrea90 »

Ciao AntonioP,

Devi cercare online su come implementare la ISO WEEK 8601 in PowerQuery.

Ci sono tantissimi esempi di codice già pronti che potrai adattare alla tua query.

Esempio da inserire in una query vuota, il sito é datacornering.com:

//datacornering.com

Codice: Seleziona tutto

let
    Source = List.Dates(#date(2021,1,1), 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"
A presto,

Andrea
Se hai gradito l'aiuto che hai ricevuto considera di contribuire alle spese per il mantenimento del forum facendo una libera DONAZIONE --> Link

Ricordarsi di segnare come "RISOLTE" le discussioni per le quali si è ricevuto un feedback positivo. Per vedere come fare --> Link
Avatar utente

Enrico Galli
Messaggi: 890 | Topic creati
Iscritto il: dom 28 giu 2020, 19:03
Luogo: San Giovanni in Persiceto (BO)
Ringraziato: 325 volte
Contatta:

Settimana dell'anno in PQ

Messaggio da Enrico Galli »

Ciao AntonioP , se ti può interessare, la nuova versione del mio add-in , Excel Swiss Knife, include uno strumento per generare un calendario in Power Query, con un set di colonne personalizzabili tra cui la settimana ISO :)
Vedi qui: viewtopic.php?p=1482#p1482
Enrico Galli
Link utili: I nostri tutorial | Come inserire: Immagini - Codice - Risolto
Se il forum ti è stato utile, considera di supportarlo con una libera donazione

Autore del topic
AntonioP
Messaggi: 79 | Topic creati
Iscritto il: gio 30 lug 2020, 13:18
Ringraziato: 10 volte
Contatta:

Settimana dell'anno in PQ

Messaggio da AntonioP »

@Andrea90 ignoravo l'esistenza del calendario ISO. Grazie
Enrico Galli è giunto il momento di provare Excel Swiss Knife.....

GRAZIE MILLE
Rispondi