Da [Table] a valori concatenati 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
Avatar utente

ggratis
Messaggi: 16 | Topic creati
Iscritto il: mar 14 lug 2020, 21:39
Luogo: Lecce-Pisa
Ringraziato: 5 volte

Da [Table] a valori concatenati

Messaggio da ggratis »

Buona domenica al gruppo...
Un colonna del risultato di una query contiene valori null e Table, se la espando mi duplica i record (cosa che non voglio fare!), come è possibile concatenare i valori delle Table (procedendo per righe e relative colonne ) e riportarli nella stessa cella? Es.: r11, r12, r21, r22.
Le Table hanno due colonne la prima con tipo text e la seconda number ed un numero variabile di righe.
Mi scuso per il file ma al momento non ne ho uno senza dati sensibili che riproduca la casistica.
😉👋


Avatar utente

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

Da [Table] a valori concatenati

Messaggio da Andrea90 »

Ciao ggratis,

Senza file faccio fatica a comprendere totalmente quello che dovrebbe essere l’output desiderato.

Così a prima vista ti suggerirei l’utilizzo di Text.Combine

https://docs.microsoft.com/en-us/powerq ... xt-combine

A presto,
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:

Da [Table] a valori concatenati

Messaggio da Enrico Galli »

Ciao. Se ho ben capito, occorre fare una trasformazione su quelle tabelle, ovvero un unpivoting di tutte le colonne. Dopodiché avrai una sola colonna, e potrai concatenarne i valori usando Text.Combine come ha detto Andrea
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

Autore del topic
ggratis
Messaggi: 16 | Topic creati
Iscritto il: mar 14 lug 2020, 21:39
Luogo: Lecce-Pisa
Ringraziato: 5 volte

Da [Table] a valori concatenati

Messaggio da ggratis »

Intanto un ringraziamento per la vostra attenzione,
ho allegato il file di esempio, nella colonna ScontoMaggiorazione, vorrei ottenere il risultato come illustrato.
Ho provato a capire come applicare Text.Combine Table.Combine ma devo entrare ancora nel meccanismo ;)
Leggerò con attenzione i vostri suggerimenti
ancora grazie :wave:
gg
Allegati
DaTabellaAValoreConcatenato.rar
(33.82 KiB) Scaricato 13 volte
Avatar utente

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

Da [Table] a valori concatenati

Messaggio da Andrea90 »

Ciao ggratis,

Ti giro il file excel con una modifica che mostra il passaggio step by step.

Ho semplicemente aggiunto una udf fatta così:

Codice: Seleziona tutto

(TempTable as table) as table=>
let
    CalcTest = Table.AddColumn(TempTable, "TempMerge", each Text.Combine({[Tipo], [Percentuale]}, " "), type text)
in
    CalcTest
e poi ho aggiunto i due step per le colonne calcolate, così da poter tenere separati tutti i passaggi e rendere la logica di utilizzo più semplice da comprendere. Poi con eventuali ottimizzazioni si può pensare di rendere il codice più snello.

Codice: Seleziona tutto

    #"Funzione personalizzata richiamata" = Table.AddColumn(#"Rimosse colonne1", "CalcMergeField", each try CalcMergeField([ScontoMaggiorazione]) otherwise null),
    #"Aggiunta colonna personalizzata" = Table.AddColumn(#"Funzione personalizzata richiamata", "FinalResul", each try Text.Combine([CalcMergeField][TempMerge]," ") otherwise null)
A presto,

Andrea
Allegati
DaTabellaAValore.xlsx
(27.58 KiB) Scaricato 11 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
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:

Da [Table] a valori concatenati

Messaggio da Enrico Galli »

Ecco invece la mia soluzione, più "pedestre", da sostituire in toto alla tua query:

Codice: Seleziona tutto

let
    Origine = Table.SelectColumns(Table.RenameColumns(Table.AddColumn(Table.SelectRows(Folder.Files("C:\Users\enric\OneDrive\MondoBI\quesiti\Nuova cartella (2)"), each (Text.Contains([Name], ".xml") or Text.Contains([Name], ".XML"))and not Text.EndsWith([Name], "_MT_001.xml")), "Trasforma file", each fxTrasformaFile([Content])), {"Name", "NomeFile"}), {"NomeFile", "Trasforma file"}),
    EspandiTabellaFile = Table.ExpandTableColumn(Origine, "Trasforma file", Table.ColumnNames(fxTrasformaFile(#"File di esempio"))),
    EspandiIntestazioneCorpo = Table.ExpandTableColumn(EspandiTabellaFile, "Namespace:", {"FatturaElettronicaHeader", "FatturaElettronicaBody"}, {"FatturaElettronicaIntestastazione", "FatturaElettronicaCorpo"}),
    IntestastazioneCedenteAnagrafica = Table.ExpandTableColumn(Table.ExpandTableColumn(Table.ExpandTableColumn(Table.ExpandTableColumn(EspandiIntestazioneCorpo, "FatturaElettronicaIntestastazione", {"CedentePrestatore"}, {"CedentePrestatore"}), "CedentePrestatore", {"DatiAnagrafici"}, {"DatiAnagrafici"}), "DatiAnagrafici", {"Anagrafica"}, {"Anagrafica"}), "Anagrafica", {"Denominazione", "Nome", "Cognome"}, {"Denominazione", "Nome", "Cognome"}),
    MergeDenominazioneCognomeNome = Table.CombineColumns(IntestastazioneCedenteAnagrafica,{"Denominazione", "Cognome", "Nome"},Combiner.CombineTextByDelimiter(" ", QuoteStyle.None),"Ditta"),
    EspandiCorpo = Table.TransformColumns(Table.ExpandTableColumn(MergeDenominazioneCognomeNome, "FatturaElettronicaCorpo", {"DatiGenerali", "DatiBeniServizi"}, {"DatiGenerali", "DatiBeniServizi"}),{{"Ditta", each Text.TrimStart(_," "),type text}}),
    EspandiDatiGeneraliDocumento = Table.ReorderColumns(Table.TransformColumnTypes(Table.ExpandTableColumn(Table.ExpandTableColumn(EspandiCorpo, "DatiGenerali", {"DatiGeneraliDocumento"}, {"DatiGeneraliDocumento"}), "DatiGeneraliDocumento", {"TipoDocumento", "Data", "Numero"}, {"TipoDocumento", "DataFattura", "NumeroFattura"}),{{"TipoDocumento", type text}, {"DataFattura", type date}, {"NumeroFattura", type text}}),{"NomeFile", "TipoDocumento", "DataFattura", "Ditta", "NumeroFattura"}),
    EspandiBeniServizi = Table.ExpandTableColumn(EspandiDatiGeneraliDocumento, "DatiBeniServizi", {"DettaglioLinee", "DatiRiepilogo"}, {"DettaglioLinee", "DatiRiepilogo"}),
    EspandiDettaglioLinee = Table.ExpandTableColumn(EspandiBeniServizi, "DettaglioLinee", {"NumeroLinea", "Descrizione", "Quantita", "UnitaMisura", "PrezzoUnitario", "ScontoMaggiorazione", "PrezzoTotale", "AliquotaIVA"}, {"NumeroLinea", "Descrizione", "Quantita", "UnitaMisura", "PrezzoUnitario", "ScontoMaggiorazione", "PrezzoTotale", "AliquotaIVA"}),
    SostituzionePuntoVirgola = Table.ReplaceValue(EspandiDettaglioLinee,".",",",Replacer.ReplaceText,{"NumeroLinea", "Quantita", "PrezzoUnitario", "PrezzoTotale", "AliquotaIVA"}),
    ModificatoTipo = Table.TransformColumnTypes(SostituzionePuntoVirgola,{{"NumeroLinea", type number}, {"Quantita", type number}, {"PrezzoUnitario", type number}, {"PrezzoTotale", type number}, {"AliquotaIVA", type number}, {"UnitaMisura", type text}}),
    #"Rimosse colonne1" = Table.RemoveColumns(ModificatoTipo,{"DatiRiepilogo", "Attribute:versione"}),
    #"Aggiunta colonna personalizzata" = Table.AddColumn(#"Rimosse colonne1", "unpivot", each Table.UnpivotOtherColumns([ScontoMaggiorazione], {}, "tipo", "valore")[valore]),
    #"Valori estratti" = Table.TransformColumns(#"Aggiunta colonna personalizzata", {"unpivot", each Text.Combine(List.Transform(_, Text.From), " "), type text}),
    #"Errori sostituiti" = Table.ReplaceErrorValues(#"Valori estratti", {{"unpivot", ""}}),
    #"Rimosse colonne" = Table.RemoveColumns(#"Errori sostituiti",{"ScontoMaggiorazione"}),
    #"Rinominate colonne" = Table.RenameColumns(#"Rimosse colonne",{{"unpivot", "ScontoMaggiorazione"}})
in
    #"Rinominate 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

Autore del topic
ggratis
Messaggi: 16 | Topic creati
Iscritto il: mar 14 lug 2020, 21:39
Luogo: Lecce-Pisa
Ringraziato: 5 volte

Da [Table] a valori concatenati

Messaggio da ggratis »

...elementare vero?! ...come tutte le cose che si sanno fare!

Complimenti ad entrambi e grazie per le esaustive risposte
Andrea90 ha scritto: dom 21 feb 2021, 14:25 Poi con eventuali ottimizzazioni si può pensare di rendere il codice più snello.
... è questo che fa la differenza! Per la curiosità di leggere le ottimizzazioni, mi dispiace quasi indicare la discussione come risolta.
Enrico Galli ha scritto: dom 21 feb 2021, 17:35 più "pedestre"
Beh, avrei voluto scriverla anch'io la settimana scorsa ;)

:clap: :wave:
Rispondi