Concatenazione campi con indice numerico 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

Rispondi

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

Concatenazione campi con indice numerico

Messaggio da H725 »

Un saluto a tutto il forum
Ho un file csv che importo in un foglio Excel. Questo file si compone di vari campi che variano da 2 a 12.
Nel primo campo c'è un ID univoco e gli altri campi sono formati da testo.
Devo combinare i vari campi con un determinato testo in ogni campo (esempio [numero=1], ) ma il numero deve aumentare per ogni campo

Column1 Column2 Column3 Column4 Column5 Column6 Column7 Column8 Column9
79940 testo1 testo2 testo3 testo4
60370 testo1 testo2 testo3 testo4 testo5
38540 testo1 testo2
76460 testo1 testo2
25130 testo1 testo2 testo3
81750 testo1 testo2 testo3 testo4 testo5
88380 testo1 testo2 testo3 testo4 testo5 testo6
83470 testo1 testo2 testo3
34800 testo1 testo2 testo3
45700 testo1 testo2 testo3 testo4
77900 testo1 testo2

----
Column1 Column2
79940 testo1[numero=1],testo2[numero=2],testo3[numero=3],testo4[numero=4]
60370 testo1[numero=1],testo2[numero=2],testo3[numero=3],testo4[numero=4],testo5[numero=5]
38540 testo1[numero=1],testo2[numero=2]
76460 testo1[numero=1],testo2[numero=2]
25130 testo1[numero=1],testo2[numero=2],testo3[numero=3]
81750 testo1[numero=1],testo2[numero=2],testo3[numero=3],testo4[numero=4],testo5[numero=5]
88380 testo1[numero=1],testo2[numero=2],testo3[numero=3],testo4[numero=4],testo5[numero=5],testo6[numero=6]
83470 testo1[numero=1],testo2[numero=2],testo3[numero=3]
34800 testo1[numero=1],testo2[numero=2],testo3[numero=3]
45700 testo1[numero=1],testo2[numero=2],testo3[numero=3],testo4[numero=4]
77900 testo1[numero=1],testo2[numero=2]

Ringrazio chiunque mi possa aiutare


Avatar utente

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

Concatenazione campi con indice numerico

Messaggio da Andrea90 »

H725,

Allega un file di esempio concreto.

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

Concatenazione campi con indice numerico

Messaggio da H725 »

Ecco un esempio con 2 foglio:
origine e risultato voluto
Allegati
Esempio MondoBi.xlsx
(13.13 KiB) Scaricato 9 volte
Avatar utente

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

Concatenazione campi con indice numerico

Messaggio da Andrea90 »

H725,

Qualcosa di simile:

Codice: Seleziona tutto

let
    Source = Excel.CurrentWorkbook(){[Name="Tabella1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", Int64.Type}, {"Column2", type text}, {"Column3", type text}, {"Column4", type text}, {"Column5", type text}, {"Column6", type text}, {"Column7", type text}, {"Column8", type any}, {"Column9", type any}}),
    #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1, Int64.Type),
    #"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Added Index", {"Column1", "Index"}, "Attribute", "Value"),
    #"Grouped Rows" = Table.Group(#"Unpivoted Columns", {"Column1"}, {{"TempTab", each Table.AddIndexColumn(_, "Index_Row", 1, 1), type table [Column1=nullable number, Index=number, Attribute=text, Value=text]}}),
    #"Removed Other Columns" = Table.SelectColumns(#"Grouped Rows",{"TempTab"}),
    #"Expanded TempTab" = Table.ExpandTableColumn(#"Removed Other Columns", "TempTab", {"Column1", "Index", "Attribute", "Value", "Index_Row"}, {"Column1", "Index", "Attribute", "Value", "Index_Row"}),
    #"Added Prefix" = Table.TransformColumns(#"Expanded TempTab", {{"Index_Row", each "[numero=" & Text.From(_, "it-IT"), type text}}),
    #"Added Suffix" = Table.TransformColumns(#"Added Prefix", {{"Index_Row", each _ & "]", type text}}),
    #"Merged Columns" = Table.CombineColumns(#"Added Suffix",{"Value", "Index_Row"},Combiner.CombineTextByDelimiter("", QuoteStyle.None),"Merged"),
    #"Pivoted Column" = Table.Pivot(#"Merged Columns", List.Distinct(#"Merged Columns"[Attribute]), "Attribute", "Merged"),
    #"Merged Columns1" = Table.CombineColumns(#"Pivoted Column",{"Column2", "Column3", "Column4", "Column5", "Column6", "Column7"},Combiner.CombineTextByDelimiter(",", QuoteStyle.None),"Result"),
    #"Added Custom" = Table.AddColumn(#"Merged Columns1", "Custom", each Text.Trim([Result], {",", " "})),
    #"Removed Other Columns1" = Table.SelectColumns(#"Added Custom",{"Column1", "Custom"}),
    #"Renamed Columns" = Table.RenameColumns(#"Removed Other Columns1",{{"Column1", "Idx"}, {"Custom", "Text"}}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Renamed Columns",{{"Text", type text}})
in
    #"Changed Type1"
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

Concatenazione campi con indice numerico

Messaggio da H725 »

Soluzione quasi perfetta, ma alla riga 3 e 13 vengono indicate n. colonne ma il file che viene importato, capita di avere da 2 a 12 colonne e il comando deve essere continuamente variato per ogni file. C'è la possibilità di renderlo dinamico?
Avatar utente

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

Concatenazione campi con indice numerico

Messaggio da Andrea90 »

H725,

Il codice che ti ho fornito riporta esattamente il risultato da te desiderato, indicato nel foglio "Risultato".
H725 ha scritto: ven 5 mag 2023, 9:28 ma il file che viene importato, capita di avere da 2 a 12 colonne e il comando deve essere continuamente variato per ogni file.
Non ho capito, riformula la frase o fai un esempio pratico.

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:

Concatenazione campi con indice numerico

Messaggio da Enrico Galli »

Mi inserisco: credo intenda dire che nei passaggi a riga 3 (modificato tipo, che forse si può eliminare) e 13 (combina colonne), viene indicato un numero particolare di colonne (i nomi sono hard-coded). Ma il file di origine può variare nel numero di colonne
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
Avatar utente

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

Concatenazione campi con indice numerico

Messaggio da Andrea90 »

Grazie Enrico Galli,

se la questione sollevata dall'utente è quella allora penso che per renderla dinamica possa bastare qualcosa come:

Codice: Seleziona tutto

let
    Source = Excel.CurrentWorkbook(){[Name="Tabella1"]}[Content],
    #"Added Index" = Table.AddIndexColumn(Source, "Index", 0, 1, Int64.Type),
    #"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Added Index", {"Column1", "Index"}, "Attribute", "Value"),
    #"Grouped Rows" = Table.Group(#"Unpivoted Columns", {"Column1"}, {{"TempTab", each Table.AddIndexColumn(_, "Index_Row", 1, 1), type table [Column1=nullable number, Index=number, Attribute=text, Value=text]}}),
    #"Removed Other Columns" = Table.SelectColumns(#"Grouped Rows",{"TempTab"}),
    #"Expanded TempTab" = Table.ExpandTableColumn(#"Removed Other Columns", "TempTab", {"Column1", "Index", "Attribute", "Value", "Index_Row"}, {"Column1", "Index", "Attribute", "Value", "Index_Row"}),
    #"Added Prefix" = Table.TransformColumns(#"Expanded TempTab", {{"Index_Row", each "[numero=" & Text.From(_, "it-IT"), type text}}),
    #"Added Suffix" = Table.TransformColumns(#"Added Prefix", {{"Index_Row", each _ & "]", type text}}),
    #"Merged Columns" = Table.CombineColumns(#"Added Suffix",{"Value", "Index_Row"},Combiner.CombineTextByDelimiter("", QuoteStyle.None),"Merged"),
    #"Pivoted Column" = Table.Pivot(#"Merged Columns", List.Distinct(#"Merged Columns"[Attribute]), "Attribute", "Merged"),
    ColNames = List.RemoveFirstN(Table.ColumnNames(#"Pivoted Column"), 2),
    #"Merged Columns1" = Table.CombineColumns(#"Pivoted Column",ColNames,Combiner.CombineTextByDelimiter(",", QuoteStyle.None),"Result"),
    #"Added Custom" = Table.AddColumn(#"Merged Columns1", "Custom", each Text.Trim([Result], {",", " "})),
    #"Removed Other Columns1" = Table.SelectColumns(#"Added Custom",{"Column1", "Custom"}),
    #"Renamed Columns" = Table.RenameColumns(#"Removed Other Columns1",{{"Column1", "Idx"}, {"Custom", "Text"}}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Renamed Columns",{{"Text", type text}})
in
    #"Changed Type1"
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

Concatenazione campi con indice numerico

Messaggio da H725 »

Esattamente, grazie a Andrea e a Enrico che è intervenuto.
Rispondi