IMPORTAZIONE FILE .XML (FATTURA ELETTRONICA) CON POWER QUERY IN EXCEL L’argomento è risolto
Moderatore: Utilizzo_prof_Excel
-
- 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
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:
Caso 2)
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…
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:
Questo invece è quello che vorrei ottenere:
Spero di essere riuscito a spiegarmi…
Allego i due file .xml di prova che sto provando ad importare
Grazie tante per il supporto.
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:
Caso 2)
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…
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:
Questo invece è quello che vorrei ottenere:
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
-
- 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
Ciao, hai provato a non importare la colonna ‘riferimentonumerodilinea’? Contiene info che ti servono?
-
- 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
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:
...
Un saluto,
Emmanuele
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"
Emmanuele
-
Autore del topic - 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
Funziona perfettamente!!!! Grazie tante.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:
...Un saluto,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"
Emmanuele
-
Autore del topic - 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
Codice: Seleziona tutto
Buongiorno perdonate se continuo la discussione qui, credo però che la domanda sia comunque attinente all'argomento della discussione che avevo già iniziato.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:
...Un saluto,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"
Emmanuele
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:
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"
Grazie a tutti
-
Autore del topic - 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
In parte ho risolto con la funzione List.Distinct e la funzione Text.Combine.
Aggiungendo al codice precedente quest'altro pezzo di codice:
mi restituisce il risultato desiderato:
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 , 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...
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]),", "))
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 , 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...
-
Autore del topic - 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
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 "")
-
- 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
Potrebbe esserti utile questo mio video:
al minuto 11:57 spiego come generare una lista dei duplicati nella cella.
al minuto 11:57 spiego come generare una lista dei duplicati nella cella.
-
Autore del topic - 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
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
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