Inserire la classe di ritardo

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

Moderatore: Utilizzo_prof_Excel

Rispondi
Avatar utente

alex77
Messaggi: 160 | Topic creati
Iscritto il: sab 24 ott 2020, 23:04
Luogo: Treviso
Ringraziato: 11 volte

Inserire la classe di ritardo

Messaggio da alex77 »

Buongiorno,
scusate oggi ho varie domande...
Ho 2 tabelle. La prima, semplificando, è composta da:
ordine
articolo
data consegna prevista
bolla consegna
data consegna effettiva
Ritardo (differenza tra le 2 date)

Ho poi una tabella con le classi di ritardo:
-5 anticipo elevato
-2 anticipo
0 puntuale
+2 ritardo
+5 ritardo grave

Vorrei aggiungere alla prima tabella la classe di ritardo, applicando quindi una logica condizionale, del tipo: se ritardo <-5 allora anticipo elevato, altrimenti se minore -2 anticipo ecc ecc.
Io ho provato creando una colonna nella prima tabella con dentro tutta la seconda, l'ho espansa (sdoppiando quindi le righe della prima tabella per tutte le classi) aggiunto altra colonna che testa se il ritardo è minore del valore della classe in quella riga (la colonna restituisce "S" o "N"), poi filtro gli S e raggruppo per il minimo. A parte dover creare un'ultima classe "esagerata" (tipo 10.000 giorni) per gestire il caso "altrimenti", mi chiedevo se c'è un sistema più "snello" per arrivare al risultato di cui ho bisogno.

Grazie


Avatar utente

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

Inserire la classe di ritardo

Messaggio da Andrea90 »

Ciao alex77,

Perché non creare direttamente nella prima tabella una colonna calcolata che sulla base dei giorni di ritardo ti riporti la relativa classe della seconda tabella?

Quante classi di ritardo devi gestire? Solo quelle 5?

Consiglio, come sempre, di girare una demo su cui poter dare la possibilità di proporre una soluzione.

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

Autore del topic
alex77
Messaggi: 160 | Topic creati
Iscritto il: sab 24 ott 2020, 23:04
Luogo: Treviso
Ringraziato: 11 volte

Inserire la classe di ritardo

Messaggio da alex77 »

Ciao Andrea90
l'idea era di avere una tabella con i giorni delle varie classi per avere la possibilità di modificarli (ti chiederai: perchè? In questa prima fase per fare delle prove prima di decidere "definitivamente" le classi) non dovendo quindi andare a correggere la formula nella colonna condizionale di powerquery.
Magari è una cosa balzana, prendila come idea di un principiante.
Ti allego un excel con le due tabelle, caricate in power query (spero fosse quello che chiedevi).

Grazie nuovamente per l'aiuto.

A.
Allegati
esempio.xlsx
(72.07 KiB) Scaricato 12 volte
Avatar utente

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

Inserire la classe di ritardo

Messaggio da Andrea90 »

Ciao alex77,

Se fossi in te gestirei la cosa con una colonna condizionale, tanto cambiare gli estremi, una volta che è stata impostata correttamente è questione di pochi secondi.

Se proprio vuoi un qualcosa di "temporaneo", la soluzione che ti propongo è la seguente:

Codice: Seleziona tutto

let
    Origine = Excel.CurrentWorkbook(){[Name="Dati"]}[Content],
    #"Query accodata" = Table.Combine({Origine, Temp}),
    #"Modificato tipo" = Table.TransformColumnTypes(#"Query accodata",{{"DataEmi", type datetime}, {"DocNum", type text}, {"ArtCod", type any}, {"DataPrevCons", type datetime}, {"Qta", Int64.Type}, {"QtaEvasa", Int64.Type}, {"CliCod", Int64.Type}, {"BollaDocNum", type text}, {"BollaDataEmi", type datetime}, {"GgRitardo", Int64.Type}}),
    #"Merge di query eseguito" = Table.NestedJoin(#"Modificato tipo", {"GgRitardo"}, ClassiRitardo, {"GgClasse"}, "ClassiRitardo", JoinKind.LeftOuter),
    #"Tabella ClassiRitardo espansa" = Table.ExpandTableColumn(#"Merge di query eseguito", "ClassiRitardo", {"DescrClasse"}, {"DescrClasse"}),
    #"Ordinate righe" = Table.Sort(#"Tabella ClassiRitardo espansa",{{"GgRitardo", Order.Ascending}}),
    #"Ricopiato in alto" = Table.FillUp(#"Ordinate righe",{"DescrClasse"}),
    #"Filtrate righe" = Table.SelectRows(#"Ricopiato in alto", each ([DocNum] <> null)),
    #"Sostituito valore" = Table.ReplaceValue(#"Filtrate righe",null,"Lim Sup",Replacer.ReplaceValue,{"DescrClasse"})
in
    #"Sostituito valore"
Necessiti di una tabella temporanea che contenga i limiti da te indicati, la trovi nel foglio "Classi Ritardo". Puoi anche gestire dei valori "estremi" come quelli che ho chiamato Lim Inf e Lim Sup.

Prova a vedere se è quello che cercavi.

A presto,

Andrea
Allegati
Esempio_2.xlsx
(136.68 KiB) Scaricato 13 volte
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
Rispondi