Ciao, sono di fronte ad un argomento totalmente nuovo.
Sul gestionale Dynamic 365 ho una tabella 'SCONTI' con informazioni che non riesco a riportare su una tabella dei fatti con un semplice merge.
Il classico merce mi permette di mettere in relazione più campi, ma in questo caso la questione è molto articolata, perchè la tabella SCONTI può contenere uno sconto abbinato al codice cliente/articolo oppure codice cliente/gruppo articoli oppure cliente/tutti gli articoli.
Ovviamente la condizione cliente/articolo è la più semplice, ma le altre due mi mettono in crisi.
Vi allegato un esempio.
Attendo i vostri preziosi suggerimenti e grazie in anticipo.
Merge articolato L’argomento è risolto
Moderatore: Utilizzo_prof_Excel
-
- Messaggi: 79 | Topic creati
- Iscritto il: gio 30 lug 2020, 13:18
- Ringraziato: 10 volte
- Contatta:
-
Autore del topic - Messaggi: 79 | Topic creati
- Iscritto il: gio 30 lug 2020, 13:18
- Ringraziato: 10 volte
- Contatta:
Merge articolato
Dimenticavo........ Altra complicazione: nella tabella SCONTO nella colonna Cod.Art nello stesso campo è possibile dichiarare un elenco di codici attraverso il carattere speciale "|" che sta per AND
-
- Messaggi: 2320 | Topic creati
- Iscritto il: dom 28 giu 2020, 19:41
- Luogo: Bologna
- Ringraziato: 678 volte
- Contatta:
Merge articolato
Di questo interessa il giusto, perché tanto una gestione come quella che hai indicato, ovvero Art1 | Art2 | Art3 non è gestibile, quindi devi scomporre quella riga in n righe tante quanti sono gli articoli elencati.
Per il resto puoi effettuare questo calcolo per step, perché non puoi risolverla con un solo Merge. Se il tuo livello massimo di dettaglio è CLIENTE - ART allora definisci una tabella con tutte le combinazioni possibili (o esistenti), ad esempio quel "Tutti gli articoli" per il cliente 200 lo espliciterai per ciascun articolo e non in un'unica riga.
Per le casistiche particolari che non riuscirai a gestire in questo modo dovrai prevedere uno step successivo che potrà essere un nuovo merge oppure una condizione if..then..else.
Andrea
-
- Messaggi: 890 | Topic creati
- Iscritto il: dom 28 giu 2020, 19:03
- Luogo: San Giovanni in Persiceto (BO)
- Ringraziato: 325 volte
- Contatta:
Merge articolato
Ciao, propongo questa soluzione con codice M personalizzato, che funziona sull'esempio MA potrebbe non funzionare più se le condizioni si complicano (diciamo che la condizione base è che per ogni cliente ci sia solo una tipologia di sconto):
Codice: Seleziona tutto
// FATTI
let
Origine = Excel.CurrentWorkbook(){[Name="FATTI"]}[Content],
#"Modificato tipo" = Table.TransformColumnTypes(Origine,{{"Cliente", Int64.Type}, {"Cod.Art", Int64.Type}, {"Art", type text}, {"Gruppo Sconti", type text}, {"Vendite", Int64.Type}}),
#"Merge di query eseguito" = Table.NestedJoin(#"Modificato tipo", {"Cliente"}, SCONTI, {"CLIENTE"}, "SCONTI", JoinKind.LeftOuter),
#"Aggiunta colonna personalizzata" = Table.AddColumn(#"Merge di query eseguito", "sc", each
if List.First([SCONTI][TIPO]) = "Tutti gli articoli" then List.First([SCONTI][PREMIO])
else if List.First([SCONTI][TIPO]) = "Gruppo Sconti" then List.First(Table.SelectRows([SCONTI], (x)=> x[CODICE] = [Gruppo Sconti])[PREMIO])
else if List.First([SCONTI][TIPO]) = "Art" then List.First(Table.SelectRows([SCONTI], (x)=> Number.From(x[CODICE]) = [Cod.Art])[PREMIO])
else null
),
#"Rimosse colonne" = Table.RemoveColumns(#"Aggiunta colonna personalizzata",{"SCONTI"}),
#"Modificato tipo1" = Table.TransformColumnTypes(#"Rimosse colonne",{{"sc", Percentage.Type}})
in
#"Modificato tipo1"
// SCONTI
let
Origine = Excel.CurrentWorkbook(){[Name="SCONTI"]}[Content],
#"Modificato tipo" = Table.TransformColumnTypes(Origine,{{"CLIENTE", Int64.Type}, {"TIPO", type text}, {"CODICE", type any}, {"PREMIO", type number}}),
#"Suddividi colonna in base al delimitatore" = Table.ExpandListColumn(Table.TransformColumns(Table.TransformColumnTypes(#"Modificato tipo", {{"CODICE", type text}}, "it-IT"), {{"CODICE", Splitter.SplitTextByDelimiter("|", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "CODICE"),
#"Modificato tipo1" = Table.TransformColumnTypes(#"Suddividi colonna in base al delimitatore",{{"CODICE", type text}})
in
#"Modificato tipo1"
- Allegati
-
- MERGE articolato.xlsx
- (21.83 KiB) Scaricato 126 volte
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
Link utili: I nostri tutorial | Come inserire: Immagini - Codice - Risolto
Se il forum ti è stato utile, considera di supportarlo con una libera donazione