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.

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‘)

ULTIMO_WERT

rel_diff(0.0, 20.0) and(duplicate(); contains(new@'DEPARTMENT'; 'internal'))

23431|EUR

duplicate()

CASH

0

diff()

CASH

<empty>

missing()

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.