Comunque intanto prova a vedere questo file di esempio: Confronto Codici.xlsx
Nel Foglio1 vedrai due celle dove inserire, nella prima, il percorso di salvataggio dei file (nota che il percorso deve concludersi con "") e nella seconda il nome del file (Es. File date 21.10.24.xlsx).
Ho poi inserito due tabelle che sono frutto di query per avere i codici nuovi, presenti nel giorno corrente e assenti nel giorno precedente) e per avere i codici vecchi (presenti nel giorno precedente ma assenti nel giorno corrente).
Per aggiornare le tabelle basta fare "Aggiorna Tutto".
Per arrivare a quel risultato ho quattro query, di cui due in memoria per prendere i dati di origine (Tabella1 e Tabella2), e due query per avere le due tabelle di "recap" (NEW e OLD).
Inoltre è presente una query, sempre in memoria, per ottenere le stringhe di testo del percorso e nome e utilizzata nellle query Tabella1 e Tabella2
Metto il codice M delle varie query:
Tabella1
let
Origine = Excel.Workbook(File.Contents(GetNamedRange("PercorsoFile") & GetNamedRange("NomeFile")), null, true),
Tabella1_Table = Origine{[Item="Tabella1",Kind="Table"]}[Data],
FiltrateRighe = Table.SelectRows(Tabella1_Table, each [#"Cod."] <> null and [#"Cod."] <> ""),
RimosseAltreColonne = Table.SelectColumns(FiltrateRighe,{"Cod.", "Cod. fornitore", "Prodotti", "Data WMS di arrivo", "Operatore", "Fornitore"}),
Formati = Table.TransformColumnTypes(RimosseAltreColonne,{{"Cod.", type text}, {"Cod. fornitore", type text}, {"Prodotti", type text}, {"Operatore", type text}, {"Fornitore", type text}, {"Data WMS di arrivo", type date}})
in
Formati
Tabella2
let
Origine = Excel.Workbook(File.Contents(GetNamedRange("PercorsoFile") & GetNamedRange("NomeFile")), null, true),
Tabella1_Table = Origine{[Item="Tabella2",Kind="Table"]}[Data],
FiltrateRighe = Table.SelectRows(Tabella1_Table, each [#"Cod."] <> null and [#"Cod."] <> ""),
RimosseAltreColonne = Table.SelectColumns(FiltrateRighe,{"Cod.", "Cod. fornitore", "Prodotti", "Data WMS di arrivo", "Operatore", "Fornitore"}),
Formati = Table.TransformColumnTypes(RimosseAltreColonne,{{"Cod.", type text}, {"Cod. fornitore", type text}, {"Prodotti", type text}, {"Operatore", type text}, {"Fornitore", type text}, {"Data WMS di arrivo", type date}})
in
Formati
Si differenza da Tabella1 per il fatto di andare a prendere i dati di Tabella1 del file origine dati.
NEW
let
Origine = Table.NestedJoin(Tabella1, {"Cod."}, Tabella2, {"Cod."}, "Tabella2", JoinKind.LeftAnti),
RimossaTabella2 = Table.RemoveColumns(Origine,{"Tabella2"}),
RiordinateColonne = Table.ReorderColumns(RimossaTabella2,{"Operatore", "Cod.", "Cod. fornitore", "Prodotti", "Data WMS di arrivo", "Fornitore"})
in
RiordinateColonne
OLD
let
Origine = Table.NestedJoin(Tabella1, {"Cod."}, Tabella2, {"Cod."}, "Tabella2", JoinKind.RightAnti),
RimosseAltreColonne = Table.SelectColumns(Origine,{"Tabella2"}),
EspansaTabella2 = Table.ExpandTableColumn(RimosseAltreColonne, "Tabella2", {"Cod.", "Cod. fornitore", "Prodotti", "Data WMS di arrivo", "Operatore", "Fornitore"}, {"Cod.", "Cod. fornitore", "Prodotti", "Data WMS di arrivo", "Operatore", "Fornitore"}),
RiordinateColonne = Table.ReorderColumns(EspansaTabella2,{"Operatore", "Cod.", "Cod. fornitore", "Prodotti", "Data WMS di arrivo", "Fornitore"})
in
RiordinateColonne
Infine la query di "appoggio" (una funzione query a cui passare come argomento il nome delle celle) per ottenere il testo contenuto nelle celle nominate relative al percorso e nome del file:
let GetNamedRange=(NamedRange) =>
let
name = Excel.CurrentWorkbook(){[Name=NamedRange]}[Content],
value = name{0}[Column1]
in
value
in GetNamedRange
Prova ad utilizzarlo indicando il percorso e il nome di un file realmente da te utilizzato (dopo aver nominato in modo opportuno le tabelle contenenti i dati).
ciao