Pagina 1 di 2

Ultimo valore di un campo delemitato da /

Inviato: sab 6 mag 2023, 11:36
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

Ultimo valore di un campo delemitato da /

Inviato: sab 6 mag 2023, 11:37
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

Ultimo valore di un campo delemitato da /

Inviato: sab 6 mag 2023, 11:54
da H725
Sorry, non avevo capito. Ho messo RISOLTO alla discussione precedente

Ultimo valore di un campo delemitato da /

Inviato: sab 6 mag 2023, 11:56
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

Ultimo valore di un campo delemitato da /

Inviato: sab 6 mag 2023, 12:02
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"

Ultimo valore di un campo delemitato da /

Inviato: sab 6 mag 2023, 12:06
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

Ultimo valore di un campo delemitato da /

Inviato: sab 6 mag 2023, 12:08
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"

Ultimo valore di un campo delemitato da /

Inviato: sab 6 mag 2023, 12:11
da Andrea90
H725,

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

Andrea

Ultimo valore di un campo delemitato da /

Inviato: sab 6 mag 2023, 12:18
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

Ultimo valore di un campo delemitato da /

Inviato: sab 6 mag 2023, 12:23
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