Filterregeln und Einschränkungen¶
NCDiff unterstützt an diversen Stellen Filter und Einschränkungen auf bestimmte Werte (Constraints). Diese Anwendungsfälle sind:
- Row Filter:
Filtern die Eingabedaten vor dem Vergleich
- Ignore Columns:
Spalten werden beim Vergleich ignoriert wenn eine bestimmte Bedingung erfüllt ist.
- Column Tolerances:
Absolute und relative Toleranzwerte die je nach zutreffender Bedingung eingestellt werden können.
- Result Filter:
Filtern die Vergleichsergebnisse um unerwünschte Werte auszuschließen.
Um diesen Ansprüchen gerecht zu werden gibt es eine Filter Sprache welche stark an Tabellenkalkulationen angelehnt ist. Die Filter Sprache besteht aus einer Reihe von ineinander geschachtelten Funktionsaufrufen welche das Ergebnis ermitteln.
Filter Funktionen¶
Im folgenden werden die verfügbaren Funktionen kurz vorgestellt. Die übergebenen Argumente werden mit ARG1 … ARGn abgekürzt.
Parameterliste
not(ARG)¶
- Beschreibung
Negiert den Wert des Arguments.
- Parameter
ARG ist ein Wahrheitswert.
- Rückgabewert
Rückgabewert ist ein Wahrheitswert.
- Verfügbarkeit
generell
or(ARG1; ARG2; … ARGn)¶
- Beschreibung
ODER-Verknüpfung aller Argumente.
- Parameter
ARG1 … ARGn sind Wahrheitswerte.
- Rückgabewert
Rückgabewert ist ein Wahrheitswert.
- Verfügbarkeit
generell
and(ARG1; ARG2; … ARGn)¶
- Beschreibung
UND-Verknüpfung aller Argumente.
- Parameter
ARG1 … ARGn sind Wahrheitswerte.
- Rückgabewert
Rückgabewert ist ein Wahrheitswert.
- Verfügbarkeit
generell
if(ARG1; ARG2) oder if(ARG1; ARG2; ARG3)¶
- Beschreibung
Wenn ARG1 wahr ist dann wird ARG2 zurückgegeben, ansonsten ARG3. Wird ARG3 nicht angegeben, dann wird ein Standardwert genommen, der vom Anwendungsfall abhängt.
- Parameter
ARG1 ist ein Wahrheitswert. ARG2 und ARG3 sind beliebige Werte deren Typen übereinstimmen sollten.
- Rückgabewert
Rückgabewert ist der Typ von ARG2/ARG3.
- Verfügbarkeit
generell
contains(ARG1; ARG2)¶
- Beschreibung
Wenn die Zeichenkette ARG2 in ARG1 enthalten ist, dann wird wahr zurückgegeben.
- Parameter
ARG1 und ARG2 sind Zeichenketten.
- Rückgabewert
Rückgabewert ist ein Wahrheitswert.
- Verfügbarkeit
generell
equals(ARG1; ARG2)¶
- Beschreibung
Wenn die Zeichenkette ARG1 gleich ARG2 ist, dann wird wahr zurückgegeben.
- Parameter
ARG1 und ARG2 sind Zeichenketten.
- Rückgabewert
Rückgabewert ist ein Wahrheitswert.
- Verfügbarkeit
generell
startswith(ARG1; ARG2)¶
- Beschreibung
Wenn die Zeichenkette ARG1 mit ARG2 beginnt, dann wird wahr zurückgegeben.
- Paramter
ARG1 und ARG2 sind Zeichenketten.
- Rückgabewert
Rückgabewert ist ein Wahrheitswert.
- Verfügbarkeit
generell
endswith(ARG1; ARG2)¶
- Beschreibung
Wenn die Zeichenkette ARG1 auf ARG2 endet, dann wird wahr zurückgegeben.
- Parameter
ARG1 und ARG2 sind Zeichenketten.
- Rückgabewert
Rückgabewert ist ein Wahrheitswert.
- Verfügbarkeit
generell
row_empty()¶
- Beschreibung
Liefert wahr für jede leere Zeile.
- Parameter
- Rückgabewert
Rückgabewert ist ein Wahrheitswert.
- Verfügbarkeit
Row Filter
row_range(ARG) oder row_range(ARG1; ARG2)¶
- Beschreibung
Liefert wahr wenn eine der beiden Bedingungen zutrifft:
- Parameter
ARG = Zeilennummer ARG1 ≤ Zeilennummer ≤ ARG2 ARG und ARG1 sind Ganzzahlen > 0.
- Rückgabewert
Rückgabewert ist ein Wahrheitswert.
- Verfügbarkeit
Row Filter
diff()¶
- Beschreibung
Liefert wahr wenn die Ergebniszeile eine Differenz ist.
- Parameter
- Rückgabewert
Rückgabewert ist ein Wahrheitswert.
- Verfügbarkeit
Result Filter
abs_diff(ARG) oder abs_diff(ARG1; ARG2)¶
- Beschreibung
Liefert wahr wenn eine der beiden Bedingungen zutrifft
- Parameter
ARG = Absolute Differenz ARG1 ≤ Absolute Differenz ≤ ARG2 ARG und ARG1 sind Fließkommazahlen > 0.
- Rückgabewert
Rückgabewert ist ein Wahrheitswert.
- Verfügbarkeit
Result Filter
rel_diff(ARG) oder rel_diff(ARG1; ARG2)¶
- Beschreibung
Liefert wahr wenn eine der beiden Bedingungen zutrifft
- Parameter
ARG = Relative Differenz ARG1 ≤ Relative Differenz ≤ ARG2 ARG und ARG1 sind Fließkommazahlen > 0.
- Rückgabewert
Rückgabewert ist ein Wahrheitswert.
- Verfügbarkeit
Result Filter
missing() oder missing(ARG)¶
- Beschreibung
Liefert wahr für wenn der Datensatz in einer Eingabedatei fehlt.
- Parameter
Mit ARG kann auf die alte „old“ oder neue „new“ Eingabedatei eingeschränkt werden. ARG ist eine Zeichenkette.
- Rückgabewert
Rückgabewert ist ein Wahrheitswert.
- Verfügbarkeit
Result Filter
duplicate() oder duplicate(ARG)¶
- Beschreibung
Liefert wahr wenn es sich in einer Eingabedatei ein doppelten Datensatz aufgetreten ist.
- Parameter
Mit ARG kann auf die alte „old“ oder neue „new“ Eingabedatei eingeschränkt werden. ARG ist eine Zeichenkette.
- Rückgabewert
Rückgabewert ist ein Wahrheitswert.
- Verfügbarkeit
Result Filter
Die Funktionsargumente können Zahlen, Zeichenketten, Spaltenreferenzen oder Funktionsaufrufe sein.
Datentypen¶
Zahlen¶
Zahlen können Ganzzahlen oder Fließkommazahlen sein. Beispiele: Ganzzahlen: -4, 0, 10 Fließkommazahlen: -4.0, 0.0, 10.0, 1e-4
Zeichenketten¶
Zeichenketten müssen zwischen einfachem oder doppeltem Hochkomma eingeschlossen werden. Beispiele: Einfaches Hochkomma: ‚Ich bin ein Text‘ Doppeltes Hochkomma: „Ich bin ein Text“
Spaltenreferenzen¶
Spaltenreferenzen dienen dazu um auf Spalten der gerade verarbeiteten Zeile zuzugreifen. Eine Spaltenreferenz beginnt immer mit einem Klammeraffen: @. Der Klammeraffe muss von einer positiven Ganzzahl, einem Microsoft Excel Spaltenbezeichner oder dem Spaltennamen als Zeichenkette gefolgt werden. Bei Result Filtern ist es möglich sich mit der Spaltenreferenz auf die alte oder neue Eingabedatei zu beziehen. Damit ergeben sich für die Spaltenbezeichner folgende Möglichkeiten:
Spaltenreferenz aktuelle Eingabedatei:
@ZAHL, @BEZEICHNER, @SPALTENNAME
Spaltenreferenz alte Eingabedatei:
old@ZAHL, old@BEZEICHNER, old@SPALTENNAME
Spaltenreferenz neue Eingabedatei:
new@ZAHL, new@BEZEICHNER, new@SPALTENNAME
Beispiele:
Als Ganzzahl:
@1, @4, @218
Als MS Excel Spaltenbezeichner:
@A, @CD, @AZB
Als Spaltenname:
@'ISIN', @'Total Profit and Loss', @"Price Delta Cash"
Funktionsaufrufe¶
Funktionsaufrufe dürfen als Argument von Funktionsaufrufen vorkommen, sind also verschachtelt möglich. Beispiele:
Mit Wahrheitswert als Ergebnis:
or(row_range(1; 10);
and(equals(@A; 'Deutsche Bank');
endswith(@'Type'; 'Option')
)
)
Mit Fließkommazahl als Ergebnis:
if(endswith(@'Type'; 'Option'); 5.0;
if(endswith(@'Type'; 'Future'); 10.0;
if(equals(@'Type'; 'Bond'); 0.0;
2.0
)
)
)
Anwendungsfälle¶
Row Filter¶
Row Filter dienen dazu Zeilen vor dem Vergleich aus einer Eingabedatei zu entfernen. Beispielsweise eine SQL Abfrage am Anfang einer Report Datei oder Zeilen in deren Spalte 5 der Text „intern“ vorkommt.
Der Row Filter können Filter Funktionen vom Typ generisch und Row Filter verwenden.
Beispiel 1: oldRowFilter = row_range(1;5)
Entfernt die ersten fünf Zeilen aus der „old“ Eingabedatei.
Beispiel 2: bothRowFilter = or(row_range(1;5); row_empty())
Entfernt die ersten fünf Zeilen und alle leeren Zeilen aus beiden Eingabedateien.
Beispiel 3: newRowFilter = or(row_empty(); startswith(@1; 'Deutsche'))
Entfernt alle leeren Zeilen und Zeilen die in der ersten Spalte mit dem Text ‚Deutsche‘ beginnen.
Ignore Columns¶
Bei Ignore Columns lässt sich mit Filter Funktionen einstellen dass Spalten beim Vergleich nur dann ignoriert werden sollen wenn eine bestimmte Filterregel zutrifft.
Ignore Columns können Filter Funktionen vom Typ generisch verwenden.
Beispiel 1:
bothIgnoreColumns = A,
5,
Instrument: and(equals(@'Currency'; 'EUR');
startswith(@'Issuer'; 'Deutsche Bank')
)
Hier werden die erste und die fünfte Spalte immer beim Vergleich ignoriert, aber die Spalte Instrument nur dann wenn die Spalte Currency den Wert ‚EUR‘ hat und die Spalte Issuer mit dem Text ‚Deutsche Bank‘ beginnt.
Column Tolerances¶
Toleranzen für den Vergleich können mit den Konfigurationsparameter absoluteColumnsTolerances
und
relativeColumnsTolerances
absolut oder relativ pro Spalte definiert werden. Mit Filter Funktionen ist es möglich die
Toleranzen weiter fein zu justieren.
Dazu wird die if Funktion verwendet. Wird nur der wahr Fall behandelt so wird für die Toleranz der Wert des Parameters
absoluteTolerance
, bzw. relativeTolerance
verwendet.
Ignore Columns können Filter Funktionen vom Typ generisch verwenden.
Beispiel 1:
absoluteTolerance = 10.0
absoluteColumnsTolerances = 7: if(contains(@2, 'STOCK'); 30.0;
if(contains(@2, 'OPTION'); 50.0))
Hier wird festgelegt, dass die absolute Toleranz beim Vergleich 10.0 ist. Für Spalte sieben gilt aber, dass die Toleranz 30.0 ist, wenn die Spalte zwei den Wert ‚STOCK‘ enthält. Enthält die Spalte zwei den Wert ‚OPTION‘ so gilt eine absolute Toleranz von 50.0. In allen anderen Fällen gilt der Wert 10.0.
Beispiel 2:
relativeTolerance = 5.0
relativeColumnsTolerances = 3: 2.0,
7: if(contains(@2, 'OPTION'); 20.0; 10.0),
8: 15.0
Hier wird festgelegt, dass die relative Toleranz generell 5% beträgt. Für die Spalte drei gilt eine Toleranz von 2%, für die Spalte acht eine von 15%. Für Spalte sieben gilt eine Toleranz von 20%, falls die Spalte zwei den Wert ‚OPTION‘ enthält, ansonsten 10%.
Result Filter¶
Result Filter können dazu verwendet werden bereits bekannte Unterschiede zu filtern. Row Filter Regeln greifen bereits vor dem eigentlichen Vergleich. Result Filter Regeln hingegen greifen erst nach der eigentlichen Vergleichsoperation und berücksichtigen die Ergebnissen des Vergleichs. Result Filter sind den Toleranzen grundsätzlich sehr ähnlich stellen jedoch eine den Toleranzen nachgelagerten Filtermechanismus dar.
Result Filter stellen eine Art von Positiveliste bzw. Whitelist bekannter Unterschiede dar. Unterschiede die mit Hilfe dieses Mechanismus gefiltert werden können stellen keine hochwertigen Unterschiede dar und können daher mit niedrigerer Priorität begutachtet werden.
- Es gibt 2 mögliche Auswirkungen der Result Filter auf die Ausgabe:
Diejenigen Unterschiede die via Result Filter Regel zugeordnet werden können werden überhaupt nicht in der Ausgabe angeführt
Oder die andere Möglichkeit ist das diese Unterschiede durch einen anderen Status als „Result Filter“ Differenzen identifiziert werden können.
Im Unterschied zu Row Filtern und Toleranzen werden Result Filter in einem eigenen Excel Worksheet gepflegt. Bei Result Filter kann man im Unterschied zu Row Filtern und Toleranzen von „Soft“ Filtern sprechen die sich sehr viel öfters ändern werden als „Hard“ Filter, die als Teil der Konfiguration angesehen werden können.
Durch die tabellarische Darstellung von Result Filtern ist es auch sehr viel einfacher sich eine Überblick über alle definierten Result Filter zu machen als wenn man eine einzige Zeile in einer Konfigurationsdatei interpretieren muss. Zusätzlich ist es mit Result Filter auch möglich kompliziertere Bedingungen zu formulieren als es mit Row Filtern und Toleranzen möglich ist.
Format der Result Filter Datei¶
Die ersten sechs Spalten (oldKey, newKey, oldColumnID, newColumnID, oldValue, newValue
) dienen dazu den
Geltungsbereich des zu benutzenden Filters zu definieren.
Alle 6 Parameter sind optional und könnten alle Leer gelassen werden, was bedeuten würde das der in der Zeile
definierte Filter global auf alle vorgefundenen Unterschieden angewendet wird. Je mehr Parameter definiert werden
desto enger wird der Geltungsbereich des Filters eingegrenzt. Diese Einschränkung kann soweit sein das Sie auch
wirklich nur für genau einen definierten unterschiedlichen Wert in einer definierten Spalte für genau einen einzigen
Datensatz innerhalb einer Vergleichsoperation gültig ist. Der Wert in oldValue
bezieht sich auf die Spalte
oldColumnID
und der Wert in newValue
auf newColumnID
. Die Werte in old-/newValue
müssen mit dem Wert der
Spalte die mit old-/newColumnID
angegeben wurde exakt übereinstimmen.
Der Algorithmus ist so definiert das zuerst nach genau zutreffenden Filtern gesucht wird und sollten keine gefunden
werden wird nach immer allgemeineren Filtern gesucht die auf den vorgefundenen Unterschied angewendet werden könnten.
Dies bedeutet das sehr allgemein definierte Result Filter Regeln möglicherweise auf eine große Anzahl an Unterschieden
Anwendung findet. Wird eine Wert in old-/newColumnID
zusammen mit old-/newValue
angeben so wird die Filterregel
automatisch um diese Spaltenwerte erweitert.
Result Filter Format |
Kurzbeschreibung |
---|---|
oldKey |
Primary Key eines Datensatzes innerhalb der old Datei |
newKey |
Primary Key eines Datensatzes innerhalb der new Datei |
oldColumnID |
Index oder Name der Spalte innerhalb des old Datensatzes |
newColumnID |
Index oder Name der Spalte innerhalb des new Datensatzes |
oldValue |
Wert der Spalte oldColumnID des old Datensatzes |
newValue |
Wert der Spalte oldColumnID des new Datensatzes |
filter |
Enthält die Filter Regel. Der Result Filter können Filter Funktionen vom Typ generisch und Result Filter verwenden. |
Ein Template für Result Filter liegt als XLS in templates/template_resultfilter.xls
.
Beispiel 1: Folgende Result Filter Datei wird verwendet
oldKey |
newKey |
oldColumnId |
newColumnID |
oldValue |
newValue |
filter |
---|---|---|---|---|---|---|
missing(‚new‘) |
||||||
|
|
|||||
|
|
|||||
|
|
|
||||
|
|
|
Die erste Zeile führt dazu, dass alle Unterschiede die dadurch zustande kommen, weil eine Zeile in der neuen Datei fehlt, gefiltert werden.
Die zweite Zeile führt dazu, dass alle Unterschiede bei denen der ULTIMO_WERT
kleiner als 20% sind gefiltert werden.
Die dritte Zeile filtert alle Unterschiede durch doppelte Zeilen in alten und neuen Eingabe Dateien wenn in der neuen
Datei die Spalte DEPARTMENT
den Wert internal
enthält.
Die vierte Zeile führt dazu dass alle Duplikate mit dem Schlüssel 23431|EUR
ausgefiltert werden.
Die fünfte Zeile führt dazu, dass alle Differenzen der Spalte CASH
ignoriert werden, falls der Wert der Spalte
CASH
in der alten Datei gleich 0
ist.
Die sechste Zeile führt dazu dass alle missing Unterschiede ignoriert werden, wenn in der alten Datei die Spalte
CASH
leer ist.