Ultimo valore di un campo delemitato da / L’argomento è risolto

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

Moderatore: Utilizzo_prof_Excel


H725
Messaggi: 23 | Topic creati
Iscritto il: gio 4 mag 2023, 21:14

Ultimo valore di un campo delemitato da /

Messaggio da H725 »

Un saluto al Forum.
Avrei bisogno di un aiuto per esportare da vari campi, solo l'ultimo valore di una stringa delimitato da /
esempio:
clarabella/topolino/paperino/minni
paperoga/clarabella
pluto/clarabella/paperoga/pippo

solo la stringa rossa, ulteriore difficoltà è che ogni record può avere uno o più /.
Allego file di esempio, grazie per l'aiuto
Allegati
Esempio MondoBi.xlsx
(13.94 KiB) Scaricato 11 volte


Avatar utente

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

Ultimo valore di un campo delemitato da /

Messaggio da Andrea90 »

H725,

Prima di aprire nuove discussioni dovresti chiudere quelle precedenti per le quali hai ricevuto un riscontro positivo (mettendo "Risolto").

Se non sai come fare leggi qui: viewtopic.php?t=127

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

Autore del topic
H725
Messaggi: 23 | Topic creati
Iscritto il: gio 4 mag 2023, 21:14

Ultimo valore di un campo delemitato da /

Messaggio da H725 »

Sorry, non avevo capito. Ho messo RISOLTO alla discussione precedente
Avatar utente

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

Ultimo valore di un campo delemitato da /

Messaggio da Andrea90 »

H725,

Puoi usare la logica di trasformazione applicata nella tua precedente discussione.

Per ottenere da una stringa di testo l'ultima porzione in base ad un delimitatore puoi utilizzare una sintassi simile:

Codice: Seleziona tutto

Text.AfterDelimiter([Value], "/", {0, RelativePosition.FromEnd})
Text.AfterDelimiter() lo puoi ottenere direttamente dall'interfaccia di Power Query Editor. L'unica cosa è che devi aprire il menu "Avanzate" nella finestra che apparirà e selezionare l'opzione "From the end of the input" (io uso la versione inglese).

Il pulsante lo trovi all'interno della sezione "Trasforma" ... trovi il menu "Estrai"... e da lì ci sarà l'opzione "Testo prima di delimitatore". Una volta cliccato il pulsante si avvierà la finestra che ti dicevo dal quale dovrai selezionare l'opzione avanzata ed inserire "/" come delimitatore.

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

Autore del topic
H725
Messaggi: 23 | Topic creati
Iscritto il: gio 4 mag 2023, 21:14

Ultimo valore di un campo delemitato da /

Messaggio da H725 »

Ho trovato questa soluzione:

Codice: Seleziona tutto

// Tabella1
let
    Origine = Excel.CurrentWorkbook(){[Name="Tabella1"]}[Content],
    #"Stringhe Divise" = Table.TransformColumns(Origine, {{"Column2", each Text.Split(_, "/")}, {"Column3", each Text.Split(_, "/")}, {"Column4", each Text.Split(_, "/")}, {"Column5", each Text.Split(_, "/")}, {"Column6", each Text.Split(_, "/")}, {"Column7", each Text.Split(_, "/")}}),
    #"Ultima Parte Estratta" = Table.TransformColumns(#"Stringhe Divise", {{"Column2", each List.Last(_)}, {"Column3", each List.Last(_)}, {"Column4", each List.Last(_)}, {"Column5", each List.Last(_)}, {"Column6", each List.Last(_)}, {"Column7", each List.Last(_)}}),
    #"Modificato tipo" = Table.TransformColumnTypes(#"Ultima Parte Estratta",{{"Column1", Int64.Type}, {"Column2", type text}, {"Column3", type text}, {"Column4", type text}, {"Column5", type text}, {"Column6", type text}, {"Column7", type text}})
in
    #"Modificato tipo"
Avatar utente

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

Ultimo valore di un campo delemitato da /

Messaggio da Andrea90 »

H725,

La soluzione che hai applicato non è dinamica nel momento in cui avrai un numero di colonne diverso da quello da te indicato.
Meglio ricorrere ad un operazione di unpivot, eseguire la trasformazione, e poi riportare il tutto in colonna. Che è poi la soluzione applicata la volta precedente.

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

Autore del topic
H725
Messaggi: 23 | Topic creati
Iscritto il: gio 4 mag 2023, 21:14

Ultimo valore di un campo delemitato da /

Messaggio da H725 »

Hai ragione, molto meglio la tua soluzione:

Codice: Seleziona tutto

// Tabella2
let
    Origine = Excel.CurrentWorkbook(){[Name="Tabella1"]}[Content],
    #"Testo estratto dopo il delimitatore" = Table.TransformColumns(Origine, {{"Column2", each Text.AfterDelimiter(_, "/", {0, RelativePosition.FromEnd}), type text}, {"Column3", each Text.AfterDelimiter(_, "/", {0, RelativePosition.FromEnd}), type text}, {"Column4", each Text.AfterDelimiter(_, "/", {0, RelativePosition.FromEnd}), type text}, {"Column5", each Text.AfterDelimiter(_, "/", {0, RelativePosition.FromEnd}), type text}, {"Column6", each Text.AfterDelimiter(_, "/", {0, RelativePosition.FromEnd}), type text}, {"Column7", each Text.AfterDelimiter(_, "/", {0, RelativePosition.FromEnd}), type text}})
in
    #"Testo estratto dopo il delimitatore"
Avatar utente

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

Ultimo valore di un campo delemitato da /

Messaggio da Andrea90 »

H725,

Diciamo che il problema delle colonne fisse rimane. Hai cambiato solo la formula per estrarre il testo.

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

Autore del topic
H725
Messaggi: 23 | Topic creati
Iscritto il: gio 4 mag 2023, 21:14

Ultimo valore di un campo delemitato da /

Messaggio da H725 »

Per quello creerò una Lista di nomi delle Colonne:

Codice: Seleziona tutto

ColNames = List.RemoveFirstN(Table.ColumnNames(#"Passaggio Precedente"), 2)
che userò nel passaggio successivo, grazie
Avatar utente

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

Ultimo valore di un campo delemitato da /

Messaggio da Andrea90 »

H725,

Meglio cosi:

Codice: Seleziona tutto

let
    Source = Excel.CurrentWorkbook(){[Name="Tabella1"]}[Content],
    #"Added Index" = Table.AddIndexColumn(Source, "Index", 0, 1, Int64.Type),
    #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Added Index", {"Column1", "Index"}, "Attribute", "Value"),
    #"Extracted Text After Delimiter" = Table.TransformColumns(#"Unpivoted Other Columns", {{"Value", each Text.AfterDelimiter(_, "/", {0, RelativePosition.FromEnd}), type text}}),
    #"Pivoted Column" = Table.Pivot(#"Extracted Text After Delimiter", List.Distinct(#"Extracted Text After Delimiter"[Attribute]), "Attribute", "Value"),
    #"Removed Columns" = Table.RemoveColumns(#"Pivoted Column",{"Index"})
in
    #"Removed Columns"
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
Rispondi