Il modo sbagliato
Sarebbe tentato di dirti di inserire ogni mappatura in una tabella di database e interrogare fornendo tutti i campi rilevanti. Ciò tuttavia non tiene conto del fatto che le regole possono essere basate sulla corrispondenza parziale e che quando si trovano più regole di corrispondenza, il più specifico dovrebbe applicarsi:
Esempio:
Input data: Output Explanations on rules
Firm Category Sub-Category Code
B b1 sc2 c3 ACCT3 (R2,R3 match but R3 is the most specific)
B b1 sc3 c3 ACCT4 (R2,R3,R4 matches but R4 is the most specific)
B b2 sc3 c3 ACCT2 (only R2 matches, for B)
Soluzione 1: algoritmo di corrispondenza sofisticato per ciascuna mappatura
Naturalmente puoi elaborare la tabella di mappatura aggiungendo un valore di precedenza alla regola e generare una query più complessa che trovi tutti i candidati e prendi quella con la precedenza più alta.
Questo è soggetto a errori (generazione di query di Comlex, rischio di regole non ancora selezionate, necessità di definire la precedenza manuealmente). Inoltre, potrebbe portare a molte domande costose.
Soluzione 2: algoritmo di corrispondenza che utilizza mappature successive
Un altro approccio potrebbe essere quello di determinare un set di tabelle di mappatura e lasciare che il tuo motore di regole iterazioni attraverso condizioni successive, fermandosi ogni volta che viene trovata una regola corrispondente:
Mapping 1:
Firm Category Sub-Category Code Acct = InternalCode( Enriched )
A a1 sc1 c1 acc1 = ACCT1
B b1 sc3 c3 acc4 = ACCT4
Mapping 2:
Firm Category = InternalCode( Enriched )
B b1 = ACCT3
Mapping 3
Firm = InternalCode( Enriched )
B acc2 = ACCT2
Questo tipo di approccio viene utilizzato nei motori di determinazione dei prezzi ad alte prestazioni (e ha anche portato al brevetto contenziosi che hanno concluso che si trattava di un approccio ben noto: disclaimer: non sono un avvocato, e questa è la mia comprensione personale e non la consulenza legale ).
Questo approccio può essere usato sia in un record per modo record (passando per ogni serie di mappature per ogni record). Ma può anche essere usato in un modo più efficiente se hai caricato il tuo CSV in un database, usando alcune istruzioni di aggiornamento successive che non aggiornano i valori dell'account già riempiti dai passaggi precedenti.
Altre soluzioni
Un altro approccio potrebbe essere utilizzare un motore di regole più sofisticato e tradurre tutto il tuo se-then-else in business regole. Il vantaggio è che non è necessario determinare le tabelle di mappaggio come si è fatto. Non è necessario pensare alle dipendenze di mapping (ad esempio se su ogf il campo di mapping è in realtà determinato da una mappatura precedente). È anche facile aggiungere nuove regole.
L'inconveniente è che il motore di regole è invocato per ogni record CSV. Quindi potrebbe essere più pesante dell'approccio basato su tabelle (vedi soluzione 2). Inoltre, è difficile per lo scrittore di regole comprendere l'interazione tra diversi tipi di regole.
Se non vuoi utilizzare un motore basato su regole esistente e svilupparne uno tuo, potresti essere interessato a questo SE domanda .