IMPORTAZIONE FILE .XML (FATTURA ELETTRONICA) CON POWER QUERY IN EXCEL 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

Orizon87
Messaggi: 8 | Topic creati
Iscritto il: mar 27 ott 2020, 19:39
Ringraziato: 1 volta

IMPORTAZIONE FILE .XML (FATTURA ELETTRONICA) CON POWER QUERY IN EXCEL

Messaggio da Orizon87 »

Buonasera,
sto provando ad impostare un database con Power Query per le “Fatture Elettroniche”.
In particolare la mia esigenza è quella di ricercare all’interno del file .xml una serie di informazioni riguardanti i DDT (documenti di trasporto) indicati in fattura.
Ho impostato una prima bozza del DataBase tuttavia ho riscontrato i fornitori si comportano diversamente con riferimento all'indicazione dei DDT in fattura:
1) alcuni indicano in fattura elettronica uno stesso DDT riferito a più articoli
2) altri invece inseriscono più volte lo stesso DDT per ogni singolo articolo.
Cerco di spiegarmi meglio indicando lo screen delle due diverse strutture del file .xml

Caso 1:

Immagine

Caso 2)

Immagine

La sostanza nel formato grafico della fattura elettronica non cambia tuttavia nella struttura del file .xml è differente è questo non mi crea non poche difficoltà ad importare correttamente i file.
In particolare nell’importazione la colonna “RiferimentoNumeroLinea” nel caso 2) mi riconosce automaticamente il valore interno al file .xml invece nel caso 1) mi riconosce la tabella al cui interno ci sono i riferimenti ai singoli valori…


Immagine

Secondo voi c’è modo di dare un’istruzione che consente di importare entrambe le tipologie di file e ottenere tutte le informazioni contenute nel file .xml?

Di seguito screen del risultato che ottengo ora:

Immagine

Questo invece è quello che vorrei ottenere:

Immagine

Spero di essere riuscito a spiegarmi…
Allego i due file .xml di prova che sto provando ad importare

Grazie tante per il supporto.
Allegati
TD01_20201027_212702 Rev. 1.xml
(4.72 KiB) Scaricato 70 volte
TD01_20201027_212702 Rev 0.xml
(5.04 KiB) Scaricato 26 volte



AntonioP
Messaggi: 79 | Topic creati
Iscritto il: gio 30 lug 2020, 13:18
Ringraziato: 10 volte
Contatta:

IMPORTAZIONE FILE .XML (FATTURA ELETTRONICA) CON POWER QUERY IN EXCEL

Messaggio da AntonioP »

Ciao, hai provato a non importare la colonna ‘riferimentonumerodilinea’? Contiene info che ti servono?
Avatar utente

Utilizzo_prof_Excel
Messaggi: 27 | Topic creati
Iscritto il: gio 16 lug 2020, 10:55
Luogo: Torino
Ringraziato: 16 volte
Contatta:

IMPORTAZIONE FILE .XML (FATTURA ELETTRONICA) CON POWER QUERY IN EXCEL

Messaggio da Utilizzo_prof_Excel »

Ciao, ho provato di seguito il codice degli ultimi passaggi dopo avere aperto il campo Dati ddt
Negli ultimi due passaggi ho inserito una condizione if che espande solo le tabelle.
A me funziona:

...

Codice: Seleziona tutto

    #"Tabella DatiDDT espansa" = Table.ExpandTableColumn(#"Tabella DatiGeneraliDocumento espansa", "DatiDDT", {"NumeroDDT", "DataDDT", "RiferimentoNumeroLinea"}, {"NumeroDDT", "DataDDT", "RiferimentoNumeroLinea"}),
    #"Lista" = Table.TransformColumns(#"Tabella DatiDDT espansa",{{"RiferimentoNumeroLinea", each if _ is table then Table.ToList(_) else {_}}}),
    #"Espansa" = Table.ExpandListColumn(#"Lista", "RiferimentoNumeroLinea")
in
    #"Espansa"
Un saluto,
Emmanuele
Avatar utente

Autore del topic
Orizon87
Messaggi: 8 | Topic creati
Iscritto il: mar 27 ott 2020, 19:39
Ringraziato: 1 volta

IMPORTAZIONE FILE .XML (FATTURA ELETTRONICA) CON POWER QUERY IN EXCEL

Messaggio da Orizon87 »

Utilizzo_prof_Excel ha scritto: mar 27 ott 2020, 22:39 Ciao, ho provato di seguito il codice degli ultimi passaggi dopo avere aperto il campo Dati ddt
Negli ultimi due passaggi ho inserito una condizione if che espande solo le tabelle.
A me funziona:

...

Codice: Seleziona tutto

    #"Tabella DatiDDT espansa" = Table.ExpandTableColumn(#"Tabella DatiGeneraliDocumento espansa", "DatiDDT", {"NumeroDDT", "DataDDT", "RiferimentoNumeroLinea"}, {"NumeroDDT", "DataDDT", "RiferimentoNumeroLinea"}),
    #"Lista" = Table.TransformColumns(#"Tabella DatiDDT espansa",{{"RiferimentoNumeroLinea", each if _ is table then Table.ToList(_) else {_}}}),
    #"Espansa" = Table.ExpandListColumn(#"Lista", "RiferimentoNumeroLinea")
in
    #"Espansa"
Un saluto,
Emmanuele
Funziona perfettamente!!!! Grazie tante. :clap: :clap: :clap:
Avatar utente

Autore del topic
Orizon87
Messaggi: 8 | Topic creati
Iscritto il: mar 27 ott 2020, 19:39
Ringraziato: 1 volta

IMPORTAZIONE FILE .XML (FATTURA ELETTRONICA) CON POWER QUERY IN EXCEL

Messaggio da Orizon87 »

Utilizzo_prof_Excel ha scritto: mar 27 ott 2020, 22:39 Ciao, ho provato di seguito il codice degli ultimi passaggi dopo avere aperto il campo Dati ddt
Negli ultimi due passaggi ho inserito una condizione if che espande solo le tabelle.
A me funziona:

...

Codice: Seleziona tutto

    #"Tabella DatiDDT espansa" = Table.ExpandTableColumn(#"Tabella DatiGeneraliDocumento espansa", "DatiDDT", {"NumeroDDT", "DataDDT", "RiferimentoNumeroLinea"}, {"NumeroDDT", "DataDDT", "RiferimentoNumeroLinea"}),
    #"Lista" = Table.TransformColumns(#"Tabella DatiDDT espansa",{{"RiferimentoNumeroLinea", each if _ is table then Table.ToList(_) else {_}}}),
    #"Espansa" = Table.ExpandListColumn(#"Lista", "RiferimentoNumeroLinea")
in
    #"Espansa"
Un saluto,
Emmanuele
Buongiorno perdonate se continuo la discussione qui, credo però che la domanda sia comunque attinente all'argomento della discussione che avevo già iniziato.
In sostanza notavo che nell'importazione della fattura elettronica anche per il campo CODICE ARTICOLO alcuni Fornitori

1) inseriscono un solo Cod. Articolo riferito allo stesso prodotto (e in questi casi non ho particolari problemi)

2) altri invece con riferimento allo stesso prodotto inseriscono più Codici articoli e il risultato dell'importazione è il seguente:

Immagine

In sostanza va quindi a duplicare le righe relative allo stesso prodotto indicando i diversi cod. articolo in righe diverse.
C'è un modo per concatenare i diversi codici articoli riferiti allo stesso prodotto all'interno di una sola cella magari separati solo da una spazio?

Qui il codice completo:

Codice: Seleziona tutto

let
    Origine = Folder.Files("C:\Users\PC Lavoro\Desktop\XML FE"),
    #"File nascosti filtrati1" = Table.SelectRows(Origine, each [Attributes]?[Hidden]? <> true),
    #"Richiama funzione personalizzata1" = Table.AddColumn(#"File nascosti filtrati1", "Trasforma file", each #"Trasforma file"([Content])),
    #"Rinominate colonne1" = Table.RenameColumns(#"Richiama funzione personalizzata1", {"Name", "Source.Name"}),
    #"Rimosse altre colonne1" = Table.SelectColumns(#"Rinominate colonne1", {"Source.Name", "Trasforma file"}),
    #"Espansa colonna table1" = Table.ExpandTableColumn(#"Rimosse altre colonne1", "Trasforma file", Table.ColumnNames(#"Trasforma file"(#"File di esempio"))),
    #"Modificato tipo" = Table.TransformColumnTypes(#"Espansa colonna table1",{{"Source.Name", type text}, {"Namespace:", type any}, {"Attribute:versione", type text}}),
    #"Rimosse colonne" = Table.RemoveColumns(#"Modificato tipo",{"Attribute:versione"}),
    #"Tabella Namespace: espansa" = Table.ExpandTableColumn(#"Rimosse colonne", "Namespace:", {"FatturaElettronicaHeader", "FatturaElettronicaBody"}, {"Namespace:.FatturaElettronicaHeader", "Namespace:.FatturaElettronicaBody"}),
    #"Tabella Namespace:.FatturaElettronicaHeader espansa" = Table.ExpandTableColumn(#"Tabella Namespace: espansa", "Namespace:.FatturaElettronicaHeader", {"CedentePrestatore"}, {"Namespace:.FatturaElettronicaHeader.CedentePrestatore"}),
    #"Tabella Namespace:.FatturaElettronicaHeader.CedentePrestatore espansa" = Table.ExpandTableColumn(#"Tabella Namespace:.FatturaElettronicaHeader espansa", "Namespace:.FatturaElettronicaHeader.CedentePrestatore", {"DatiAnagrafici"}, {"Namespace:.FatturaElettronicaHeader.CedentePrestatore.DatiAnagrafici"}),
    #"Tabella Namespace:.FatturaElettronicaHeader.CedentePrestatore.DatiAnagrafici espansa" = Table.ExpandTableColumn(#"Tabella Namespace:.FatturaElettronicaHeader.CedentePrestatore espansa", "Namespace:.FatturaElettronicaHeader.CedentePrestatore.DatiAnagrafici", {"IdFiscaleIVA", "CodiceFiscale", "Anagrafica"}, {"IdFiscaleIVA", "CodiceFiscale", "Anagrafica"}),
    #"Tabella IdFiscaleIVA espansa" = Table.ExpandTableColumn(#"Tabella Namespace:.FatturaElettronicaHeader.CedentePrestatore.DatiAnagrafici espansa", "IdFiscaleIVA", {"IdCodice"}, {"IdCodice"}),
    #"Tabella Anagrafica espansa" = Table.ExpandTableColumn(#"Tabella IdFiscaleIVA espansa", "Anagrafica", {"Denominazione"}, {"Denominazione"}),
    #"Tabella Namespace:.FatturaElettronicaBody espansa" = Table.ExpandTableColumn(#"Tabella Anagrafica espansa", "Namespace:.FatturaElettronicaBody", {"DatiGenerali", "DatiBeniServizi"}, {"DatiGenerali", "DatiBeniServizi"}),
    #"Tabella DatiGenerali espansa" = Table.ExpandTableColumn(#"Tabella Namespace:.FatturaElettronicaBody espansa", "DatiGenerali", {"DatiGeneraliDocumento"}, {"DatiGeneraliDocumento"}),
    #"Tabella DatiGeneraliDocumento espansa" = Table.ExpandTableColumn(#"Tabella DatiGenerali espansa", "DatiGeneraliDocumento", {"Data", "Numero"}, {"Data", "Numero"}),
    #"Tabella DatiBeniServizi espansa" = Table.ExpandTableColumn(#"Tabella DatiGeneraliDocumento espansa", "DatiBeniServizi", {"DettaglioLinee"}, {"DettaglioLinee"}),
    #"Rinominate colonne" = Table.RenameColumns(#"Tabella DatiBeniServizi espansa",{{"Data", "Data FT"}, {"Numero", "Numero FT"}}),
    #"Tabella DettaglioLinee espansa" = Table.ExpandTableColumn(#"Rinominate colonne", "DettaglioLinee", {"Descrizione", "PrezzoTotale", "CodiceArticolo"}, {"Descrizione", "PrezzoTotale", "CodiceArticolo"}),
    #"Modificato tipo con impostazioni locali" = Table.TransformColumnTypes(#"Tabella DettaglioLinee espansa", {{"PrezzoTotale", type number}}, "en-ZM"),
    #"Tabella CodiceArticolo espansa" = Table.ExpandTableColumn(#"Modificato tipo con impostazioni locali", "CodiceArticolo", {"CodiceValore"}, {"CodiceArticolo.CodiceValore"})
in
    #"Tabella CodiceArticolo espansa"
In generale mi chiedevo se esiste una funzione di Power Query che consente di esplodere il contenuto di una tabella tutto all'interno della stessa cella.

Grazie a tutti
Avatar utente

Autore del topic
Orizon87
Messaggi: 8 | Topic creati
Iscritto il: mar 27 ott 2020, 19:39
Ringraziato: 1 volta

IMPORTAZIONE FILE .XML (FATTURA ELETTRONICA) CON POWER QUERY IN EXCEL

Messaggio da Orizon87 »

In parte ho risolto con la funzione List.Distinct e la funzione Text.Combine.
Aggiungendo al codice precedente quest'altro pezzo di codice:

Codice: Seleziona tutto

#"Aggiunta colonna personalizzata" = Table.AddColumn(#"Tabella DettaglioLinee espansa", "CodiceArticoloRev", each Text.Combine(List.Distinct([CodiceArticolo][CodiceValore]),", "))
mi restituisce il risultato desiderato:

Immagine

Dico in parte perchè se nella colonna CodiceArticolo non ci sono valori mi restituisce come risultato "Error".
Una funzione simile alla formuala "Se.Errore " di Excel su Power Query quale potrebbe essere.
Scusate per le domande banali :oops: , ma sto iniziando davvero da poco a prendere confidenza con le Power Query che mi hanno aperto un mondo e che grazie a questo forum sto cercando di capire pian piano...
Avatar utente

Autore del topic
Orizon87
Messaggi: 8 | Topic creati
Iscritto il: mar 27 ott 2020, 19:39
Ringraziato: 1 volta

IMPORTAZIONE FILE .XML (FATTURA ELETTRONICA) CON POWER QUERY IN EXCEL

Messaggio da Orizon87 »

Penso di aver risolto anche il secondo passaggio con la funzione Try ... Otherwise

Codice: Seleziona tutto

= Table.AddColumn(#"Tabella DettaglioLinee espansa", "Personalizzato", each try Text.Combine(List.Distinct([CodiceArticolo][CodiceValore])," ,") otherwise "")
:) :) :)
Avatar utente

Utilizzo_prof_Excel
Messaggi: 27 | Topic creati
Iscritto il: gio 16 lug 2020, 10:55
Luogo: Torino
Ringraziato: 16 volte
Contatta:

IMPORTAZIONE FILE .XML (FATTURA ELETTRONICA) CON POWER QUERY IN EXCEL

Messaggio da Utilizzo_prof_Excel »

Potrebbe esserti utile questo mio video:

al minuto 11:57 spiego come generare una lista dei duplicati nella cella.
Avatar utente

Autore del topic
Orizon87
Messaggi: 8 | Topic creati
Iscritto il: mar 27 ott 2020, 19:39
Ringraziato: 1 volta

IMPORTAZIONE FILE .XML (FATTURA ELETTRONICA) CON POWER QUERY IN EXCEL

Messaggio da Orizon87 »

Grazie tante per la segnalazione.
Non sapevo fossi tu, avevo già visto diversi tuoi video su youtube per iniziare a capirci qualcosa di Power Query!
Davvero complimenti per la semplicità con la quale spieghi concetti non proprio semplici da assimilare.

Grazie
Rispondi