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. .. contents:: Parameterliste :depth: 3 :local: 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: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg 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`` | | ```` | | ``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.