Ähnliche aber nicht idente Zelleninhalte hervorheben
#11
Hi Luschi & alle,

es geht noch wesentlich einfacher, wenn beim ersetzten eine neue Spalte gebildet und diese für den Table.FuzzyNestedJoin verwendet wird, da dann die hilfsweisen Ersetzungen nicht mehr rückgängig gemacht werden müssen.

Code:
let
    // ---------------- interne Funktionen ---------------------------------------------------
    fx_replace       = each List.Accumulate(LB_Replace, _,
                       (st, cur) => Text.Replace(Text.From(st), Text.From(cur{0}), (cur{1}))),
    //----------------------------------------------------------------------------------------

    LB_Replace       = List.Buffer(Table.ToRows(Replacements_Alt_Neu)),
    Source           = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
    A_for_merge      = Table.AddColumn(Source, "A_for_merge", each fx_replace([Artikel])),
    Change_Type      = Table.TransformColumnTypes(A_for_merge,{{"Artikel", type text}, {"A_for_merge", type text}}),
    Fuzzy_Merge      = Table.FuzzyNestedJoin(Change_Type,
                       {"A_for_merge"}, Change_Type, {"A_for_merge"}, "Merge_result",
                       JoinKind.LeftOuter, [IgnoreCase=true, IgnoreSpace=true, Threshold=0.8]),
    Expand_Merge     = Table.ExpandTableColumn(Fuzzy_Merge, "Merge_result", {"PZN", "Artikel"}, {"PZN.1", "Artikel.1"}),
    Col_Sorthlp      = Table.AddColumn(Expand_Merge, "Sorthlp", each if [PZN] = [PZN.1] then 1 else 2),
    Sort_Table       = Table.Sort(Col_Sorthlp, {{"Artikel", Order.Ascending},
                                                {"Sorthlp", Order.Ascending},
                                                {"Artikel.1", Order.Ascending} }),
    Keep_needed      = Table.RemoveColumns(Sort_Table,{"A_for_merge", "Sorthlp"})
in
    Keep_needed
Antworten Top
#12
Hallo WS-53,

auch diese neue Version funktioniert natürlich. Ob es 1 Vorteil ist eine, neue Spalte anzulegen und diese dann wieder zu Löschen oder ob das Transfomieren/Rück-  innerhalb der gleichen Spalte besser ist, müßte man an 1er 'Big Data Table' testen. Auf alle Fälle war dieses Aufgabenstellung  sehr lehrreich für mich.

Gruß von Luschi
aus klein-Paris
Antworten Top
#13
Hi Luschi und alle ineteressierte,

ich habe nun mal die Varianten mit einer Liste von rund 13.500 Produkten getestet und dabei für die Laufzeitmessung mein Tool für den Remote-Refresh verwendet, da bei diesem alle Aktualisierungen protokolliert werden.

Das Ergebnis entsprach meinen Erwartungen, dass ein Fuzzy-Join alle mit allen, der zur Laufzeit die Ähnlichkeitsvergleiche durchführt, einfach lange dauern muss. Allerdings ist es auch so, dass die sehr schnellen List.Buffer-Ersetzungen auch etwas Zeit kosten und ja in den vorherigen Versionen jeweils 3 mal durchgeführt werden, während diese in meiner letzten Variante ja nur einmal durchgeführt werden. Bei Laufzeiten von knapp 6 Minuten, ist diese dann gute 20 Sekunden schneller.

Anbei die Mappen, mit denen ich remote die größere Menge getestet habe.


Angehängte Dateien
.xlsm   Excel PQ - Remote Laufzeitmessung test Fuzzy_Join.xlsm (Größe: 50,03 KB / Downloads: 9)
.xlsx   cef - Ähnliche aber nicht idente Zelleninhalte hervorheben (PQ) ca. 13500 Produkte.xlsx (Größe: 456,39 KB / Downloads: 9)
[-] Folgende(r) 1 Nutzer sagt Danke an ws-53 für diesen Beitrag:
  •
Antworten Top
#14
Ein Test, bei dem ich den Fuzzy-Join mit einem Table.Buffer gecovert habe, hat nun die Laufzeit der letzten Variante von rund 330 Sek. auf 175 Sek. verkürzt. Somit müsste sich damit auch die Laufzeit der anderen Varianten verkürzen lassen.
Antworten Top
#15
Danke für alle Euren Input - ihr habt mir sehr geholfen und ich konnte mir alleine schon mit dem Fuzzy Lookup weiterhelfen. 

LG, SebMit
Antworten Top
#16
Und wie hast du das Problem mit  dem Wirkstoff und der Packungsgröße gelöst?
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste