Pagina 1 di 1

Differenza con riga precedente

Inviato: mar 5 ott 2021, 17:46
da emme1010
Buonasera a tutti,
vorrei il vs. aiuto per questo problema che non riesco a risolvere.
Ho una tabella in allegato, dovrei inserire una colonna calcolata che per lo stesso VIN calcoli la differenza in gg rispetto alla data precedente.
Ho già inserito colonna esempio "diff gg con precedente".

Grazie

Differenza con riga precedente

Inviato: mar 5 ott 2021, 18:11
da Andrea90
Ciao emme1010,

Una delle possibili logiche è quella di lavorare prima in PowerQuery per crearti una colonna indice che consideri il raggruppamento per VIN (la nuova colonna l'ho chiamata "Index"):

Codice: Seleziona tutto

let
    Origine = Excel.CurrentWorkbook(){[Name="Tabella1"]}[Content],
    #"Modificato tipo" = Table.TransformColumnTypes(Origine,{{"No.", type text}, {"VIN", type text}, {"Posting Date", type date}, {"diff gg con precedente", Int64.Type}}),
    #"Ordinate righe" = Table.Sort(#"Modificato tipo",{{"VIN", Order.Ascending}, {"Posting Date", Order.Ascending}}),
    #"Raggruppate righe" = Table.Group(#"Ordinate righe", {"VIN"}, {{"TempTable", each Table.AddIndexColumn(_, "Index", 1, 1), type table [#"No."=nullable text, VIN=nullable text, Posting Date=nullable date, diff gg con precedente=nullable number]}}),
    #"Rimosse altre colonne" = Table.SelectColumns(#"Raggruppate righe",{"TempTable"}),
    #"Tabella TempTable espansa" = Table.ExpandTableColumn(#"Rimosse altre colonne", "TempTable", {"No.", "VIN", "Posting Date", "diff gg con precedente", "Index"}, {"No.", "VIN", "Posting Date", "diff gg con precedente", "Index"}),
    #"Modificato tipo1" = Table.TransformColumnTypes(#"Tabella TempTable espansa",{{"Index", Int64.Type}})
in
    #"Modificato tipo1"
Fatto questo la colonna calcolata diventa:

Codice: Seleziona tutto

=
VAR CurIdx = [Index]-1
VAR CurVIN = [VIN]
VAR TempTable = FILTER( ALL(Tabella1); Tabella1[VIN] = CurVIN && Tabella1[Index] = CurIdx)
VAR PrecDate = CALCULATE( MAX( [Posting Date] ); TempTable )
VAR Result= IF( NOT ISBLANK(PrecDate); [Posting Date] - PrecDate)
RETURN Result
Andrea

Differenza con riga precedente

Inviato: mer 6 ott 2021, 11:52
da emme1010
Grazie,
avevo pensato una soluzione simile.
Ma mi mancava il "pezzo" in power query per l'indicizzazione.
Fantastico!

Differenza con riga precedente

Inviato: ven 8 ott 2021, 15:52
da emme1010
Buonasera Andrea,
ho seguito le tue "istruzioni".
premesso che la tab ha circa 100000 righe.
non capisco perchè il sort è errato, questo il risultato per VIN di esempio ( query solo WDD117*)

ODL VIN Posting Date Indexdifferenza
COF184423 WDD1179081N468494 09/10/2018 1
COF184422 WDD1179081N468494 28/11/2018 2 50
COF2190656 WDD1179081N468494 08/04/2019 3 131
COF193044 WDD1179081N468494 16/07/2019 4 99
COF2193025 WDD1179081N468494 16/10/2019 5 92
COF2193026 WDD1179081N468494 23/10/2019 6 7
COF2202859 WDD1179081N468494 06/11/2020 7 380
COF2210069 WDD1179081N468494 21/01/2021 8 76
COF3210027 WDD1179081N468494 01/03/2021 9 39

ed è corretto

se invece eleboro tutta la tab, il risultato è errato:

ODL VIN Posting Date Indexdifferenza
COF184423 WDD1179081N468494 09/10/2018 1
COF184422 WDD1179081N468494 28/11/2018 2 50
COF193044 WDD1179081N468494 16/07/2019 3 230
COF2193025 WDD1179081N468494 16/10/2019 4 92
COF2193026 WDD1179081N468494 23/10/2019 5 7
COF2202859 WDD1179081N468494 06/11/2020 6 380
COF2210069 WDD1179081N468494 21/01/2021 7 76
COF3210027 WDD1179081N468494 01/03/2021 8 39
COF2190656 WDD1179081N468494 08/04/2019 9 -693

sembrerebbe che il sort per l'intera tab avesse qualche problema.

non so cosa pensare.

Differenza con riga precedente

Inviato: ven 8 ott 2021, 16:13
da Andrea90
Ciao emme1010,

Senza vedere il file si fa fatica a dire cosa può essere capitato.

Un altra logica potrebbe anche essere quella di effettuare un rank con il DAX utilizzando il campo data (alla fine ottieni una sorta di effetto indice da associare ad una colonna calcolata).

A presto,
Andrea