Allgemeines Statistik System
Benutzerhandbuch
ASS - DataWarehouse
Dokumentationsübersicht
AA SSSSSS SSSSSS
AAAA SS SS SS SS
AA AA SS SS
AA AA SS SS
AAAAAAAAAA SSSSSSS SSSSSSS
AA AA SS SS
AA AA SS SS
AA AA SS SS SS SS
AAAA AAAA SSSSSS SSSSSS
ASS - DataWareHouse
-------------------
Bürger
Inhaltsverzeichnis
Stichwortverzeichnis
Mit dem ASS Data-Warehouse steht eine Komponente zur
Verfügung, die als Erweiterung zum bisherigen ASS zu
verstehen ist.
Gegenüber dem bisherigen Einsatz erlaubt diese
Systemerweiterung insbesondere
- eine Speicherung von ASS-Daten in offenem Speicherformat
(SQL) und
- die Versorgung von ASS-Arbeitsgebieten mittels
einer eigenen Abfragesprache (Ableitungen), wodurch die
Programmierung herkömmlicher Schnittstellen vollständig
ersetzt werden kann.
Abbildung 1: ASS-Data-Warehouse-Konzept Zur direkten Übernahme von Daten aus operativen Systemen in das ASS Data-Warehouse müssen diese Daten in einer standardisierten Form vorliegen. Andernfalls müssen diese Daten mittels Schnittstellen- programmierung in diese geeignete Form überführt werden. Im ASS-Sprachgebrauch stehen somit sogenannte Basis- Arbeitsgebiete zur Verfügung, aus denen mittels Ableitungen entweder herkömmliche ASS-Arbeitsgebiete in komprimierter Form oder Tabellen mit offener Speicherungsform gebildet werden können. Ein abgeleitetes Arbeitsgebiet wird aus n Arbeitsgebieten versorgt. Daraus resultieren n Ableitungen, die jeweils Aktualisierungen ( Differenzen, Deltas ) in das abgeleitete Zielarbeitsgebiet einarbeiten. Voraussetzung für komplexe Ableitungsregeln ist die Vollständigkeit bezüglich der Historie, die insbesondere für die Generierung von Bestandswerten in Bewegungsform benötigt wird.
Inhaltsverzeichnis
Stichwortverzeichnis
Zur Beschreibung der Basisarbeitsgebiete wurde der Dialog
"ST06" (Verwaltung der ASS-Metadaten) erweitert.
Art des Arbeitsgebietes
Bislang sind Basisarbeitsgebiete in folgender Form
möglich:
- DB2-Tabellen
- sequentielle Dateien
- sequentielle Dateien (CSV: Semikolon separiert)
Die Datensätze werden offen gespeichert und haben alle den
gleichen Aufbau.
Abbildung 2: Beschreibung Basisarbeitsgebiet
Schlüssel des Basisarbeitsgebietes
Die zu einem Basisarbeitsgebiet gehörenden Felder werden
mit ihren Attributen (Format, Länge, Offset, Anzahl
Kommastellen) definiert.
Bei einem CSV-Arbeitsgebiet gilt:
Die Feldnr definiert die Spaltennummer,
der Offset gibt den Offset innerhalb der Spalte an,
Länge gibt die maximale Feldlänge an.
Abbildung 3: Schlüssel des Basisarbeitsgebietes
Folgende Formate werden derzeit unterstützt:
char C maximal 50 Bytes
binär B maximal 4 Bytes
dezimal gepackt P maximal 8 Bytes (15 Dezimalstellen),
Festlegung der Anzahl von Kommastellen
timestamp TS DB2-Format, fixe Länge 26 Bytes
time T DB2-Format, fixe Länge 8 Bytes
date D DB2-Format, fixe Länge 10 Bytes
Die DB2-Formate werden intern wie das Char-Format
behandelt. Beim Abspeichern müssen die Inhalte den
entsprechenden DB2-Konventionen genügen.
Durch Anhängen von Postfix-Z in der Eingabemaske (z.B. CZ)
wird das entsprechende Feld als Zeitstempel ausgewiesen.
Abbildung 4: Attribute von Schlüsseln des
Basisarbeitsgebietes
Bei DB2-Tabellen kann gewöhnlich auf die Beschreibung der
Felder verzichtet werden. Die hierfür nötigen
Informationen (Feldname, Feldformat, Feldlänge) werden in
diesem Fall aus dem IBM-Systemkatalog ermittelt. Das
Arbeitsgebiet selbst (Tabellenname, Art des Arbeitsgebiet)
muss jedoch auch in diesem Fall in der ST06 bekanntgegeben
werden.
Soll ein Feld der Tabelle als Zeitstempel verwendet
werden, so ist genau dieses Feld anzugeben. Die
entsprechende Eigenschaft wird auf die gelesenen Angaben
des Systemkatalogs gehoben.
Hinweis: Existieren Feldbeschreibungen in der ST06, so
gelten diese (abgesehen von obiger Ausnahme). Es wird
dann nicht auf den Systemkatalog zugegriffen.
Inhaltsverzeichnis
Stichwortverzeichnis
Inhaltsverzeichnis
Stichwortverzeichnis
- Aufbau von Schnittstellensätzen durch sukzessives Besetzen
von Feldern. Bei ASS-Ziel-Arbeitsgebieten ist das Resultat
eine kurze Schnittstelle mit Bewegungssätzen.
- Eine Ableitungsregel wird unterteilt in einzelne
Anreicherungsschritte (SELECT / JOIN).
- Jede Ableitungsregel beginnt mit einem Select-Step optional
gefolgt von einem oder mehreren (weiteren) Select- oder
Join-Steps.
- Durch den ersten Select-Step wird aus einem Arbeitsgebiet heraus
eine zu verarbeitende Grundmenge festgelegt.
- In jedem Join-Step werden die bis zu diesem Zeitpunkt
ermittelten Daten um die Informationen genau eines
Arbeitsgebietes ergänzt. Diese Datenmanipulation
resultiert in
- Besetzen von Feldern
- Hinzufügen oder Weglassen von Sätzen
- Durch die zwischenzeitlichen Select-Steps können die zu diesem
Zeitpunkt ermittelten Daten (Select auf den aktuellen Zustand
des Zielarbeitsgebietes) modifiziert und gefiltert werden.
Abbildung: Kunde / Vertrag
Beispiel:
- AG Kunde
mit Feldern Kundennummer, Adresse, Änderungsdatum
- AG Vertrag
mit Feldern Kundennummer, Vertragsnummer, Bearbeitungsdatum
- AG Kunde_Vertrag
mit Feldern Kundennummer, Adresse, Vertragsnummer
ASS;
ZIELAG = KUNDE_VERTRAG;
ABLEITUNG = ABL_KUNDE_VERTRAG;
SELECT (AG = KUNDE),
KUNDENNUMMER = KUNDENNUMMER,
ADRESSE = ADRESSE;
JOIN (AG = VERTRAG),
JOINKRITERIUM = (
ZIELFELDER = (KUNDENNUMMER),
JOINFELDER = (KUNDENNUMMER),
SORT (BEARBEITUNGSDATUM ASC),
DUP = LAST ),
VERTRAGSNUMMER = VERTRAGSNUMMER;
END;
Inhaltsverzeichnis
Stichwortverzeichnis
--> Aufgrund der zu besetzenden Felder des Zielarbeitsgebietes
wird für die Verarbeitung ein (maximales) Satzformat
festgelegt. Dieses ändert sich während der gesamten
Ableitungsregel nicht. Neben den Feldern des
Zielarbeitsgebietes können dort auch Hilfsfelder (lokal
für die Ableitungsregel definiert) enthalten sein.
--> Bilden einer Grundmenge (WORK1) der zu verarbeitenden Daten
aufgrund des angegebenen SELECT. Dabei Besetzen von Feldern
/ Hilfsfeldern.
--> Sortieren der Sätze der WORK1 nach Joinkriterium
Selektieren und Sortieren der Sätze des Join-
Arbeitsgebietes. Dieser Schritt kann u. U. entfallen.
--> P r o Satz der WORK1 Bilden einer Joinmenge (WORK3). Alle
Sätze dieser Datei erfüllen das Joinkriterium und
gegebenenfalls angegebene Filterbedingungen. Das Resultat
kann in Abhängigkeit von der Duplikatsbedingung (first,
last, all)
- eine leere Datei
- ein Satz
- mehrere Sätze
sein.
--> Durchführen der im JOIN angegebenen Feldzuweisungen.
Aufgrund der WORK3 kann der aktuelle WORK1-Satz wegfallen
oder vervielfältigt werden. Für den Fall der leeren Menge
wurde daher eine feldspezifische Behandlung geschaffen.
--> Alle im Zielarbeitsgebiet definierten Felder müssen durch
die Ableitungsregel versorgt werden und dementsprechend
angegeben werden. Einzige Ausnahme ist das Zeitstempel-
Feld, welches nicht angegeben werden darf, da es durch die
Ableitungsregel automatisch versorgt wird (Deltas).
--> Schaukeltechnik bei Verwendung mehrerer JOINs
--> Diverse Cache-Techniken zur Erhöhung der Performance
Inhaltsverzeichnis
Stichwortverzeichnis
Einschränkung auf die relevanten Sätze sowohl bei der
Bildung der Grundmenge (Select) als auch der Join-Mengen.
ASS;
ZIELAG = KUNDE_VERTRAG;
ABLEITUNG = ABL_KUNDE_VERTRAG;
SELECT (AG = KUNDE)
WHERE ( KUNDENNUMMER = '4711'
! KUNDENNUMMER = '4712'),
KUNDENNUMMER = KUNDENNUMMER,
ADRESSE = ADRESSE;
JOIN (AG = VERTRAG),
JOINKRITERIUM = (
ZIELFELDER = (KUNDENNUMMER),
JOINFELDER = (KUNDENNUMMER),
SORT (BEARBEITUNGSDATUM ASC),
DUP = LAST ),
VERTRAGSNUMMER = VERTRAGSNUMMER;
END;
Allgemein umfasst die WHERE-Bedingung im Select-Step
Sortier- und Filterkriterien:
SELECT (AG = arbeitsgebietsbezeichnung)
WHERE ( bedingung1,
SORT ( FELD1 ASC oder DESC,
...
FELDk ASC oder DESC),
LAST ( FELD1 , ..., FELDl)
...
bedingungr,
SORT ( FELD1 ASC oder DESC,
...
FELDk ASC oder DESC),
LAST ( FELD1 , ..., FELDl)
)
Die aus dem angegebenen Arbeitsgebiet zu betrachtenden
Sätze werden in maximal 5 Teilschritten jeweils durch eine
Bedingung gefiltert, sortiert und anschließend bezüglich
des unter LAST angegebenen Gruppenwechselbegriffs nochmals
gefiltert. Dabei können gegebenenfalls Teilangaben fehlen.
Beispiel für die Funktionsweise einer LAST-Angabe
auf einer sortierten Datei:
Satznummer Kundennummer
1 4711
2 4711
3 4712
4 4713
5 4713
Die Angabe LAST (Kundennummer) bewirkt die Ausgabe der
Sätze mit den Satznummern 2, 3 und 5.
Um das Bilden von Join-Mengen beschreiben zu können, sind
im allgemeinen komplexe Bedingungen erforderlich. Die
Ableitungsregel unterscheidet drei Arten von Filtern:
- Globale Joinbedingung auf alle Sätze des Join-
Arbeitsgebietes, z.B. nur alle Sätze mit einem bestimmten
Bearbeitungsdatum. Es dürfen nur Felder aus dem aktuellen
Join-Arbeitsgebiet angesprochen werden. Aus
Performancegründen sollten globale Joinbedingungen, d.h.
genauer Bedingungen, deren Operanden sich
ausschließlich auf das Join-Arbeitsgebiet beziehen, als
solche auch formuliert werden. Dadurch werden nicht zu
verarbeitende Sätze schnell gefiltert und fließen nicht
in eine komplexe Folgeverarbeitung ein.
- Joinkriterium mit Angabe von JOINFELDER und ZIELFELDER.
Feldangaben müssen aus dem entsprechenden Arbeitsgebiet
bzw. aus den bereits besetzen Zielfeldangaben stammen.
Werden mehrere Felder angegeben, so werden die zugehörigen
aktuellen Inhalte konkateniert:
Beispiel:
JOINKRITERIUM = (
ZIELFELDER = (VSNR),
JOINFELDER = (VSNR1 !! VSNR2),
SORT (BEARBEITUNGSDATUM ASC),
DUP = LAST )
- Filter, der vom aktuellen WORK1-Satz abhängt. Hierbei
Mehrfachverarbeitung mit Ermittlung des letzten Satzes
bezüglich eines Gruppenwechselbegriffs möglich. Beispiel:
Beim JOIN sollen nur alle aktiven Verträge zu einem Kunden
berücksichtigt werden (siehe oben).
Beispiel:
ASS;
ZIELAG = KUNDE_VERTRAG;
ABLEITUNG = ABL_KUNDE_VERTRAG;
SELECT (AG = KUNDE),
KUNDENNUMMER = KUNDENNUMMER,
ADRESSE = ADRESSE,
AENDERUNGSDATUM (FORMAT=CHAR, LAENGE=6)
= AENDERUNGSDATUM;
JOIN (AG = VERTRAG)
WHERE (BEARBEITUNGSDATUM > '199801'),
JOINKRITERIUM = (
ZIELFELDER = (KUNDENNUMMER),
JOINFELDER = (KUNDENNUMMER),
SORT (BEARBEITUNGSDATUM ASC),
DUP = LAST
WHERE (AENDERUNGSDATUM >=
BEARBEITUNGSDATUM)),
VERTRAGSNUMMER = VERTRAGSNUMMER;
END;
Inhaltsverzeichnis
Stichwortverzeichnis
JOINKRITERIUM =(
ZIELFELDER = (FELD1 !! FELD2 !! ... !! FELDn),
JOINFELDER = (FELD1 !! FELD2 !! ... !! FELDm),
SORT ( FELD1 ASC oder DESC,
...
FELDj ASC oder DESC),
DUP = FIRST oder LAST oder ALL
WHERE ( bedingung1,
SORT ( FELD1 ASC oder DESC,
...
FELDk ASC oder DESC)
LAST ( FELD1 , ..., FELDl)
...
bedingungr,
SORT ( FELD1 ASC oder DESC,
...
FELDk ASC oder DESC)
LAST ( FELD1 , ..., FELDl)
),
LEERE_MENGE = LOESCHEN)
Die Angabe von LEERE_MENGE ist optional.
Inhaltsverzeichnis
Stichwortverzeichnis
JOIN ( AG = VERTRAG,
DATABASE = TEST,
LESART = DIREKT)
In den Fällen, wo die Grundmenge im Vergleich zur Join-Tabelle
klein ist, kann bei DB2-Tabellen im JOIN die Angabe LESART = DIREKT
gemacht werden.
Unter DB2 ist die allgemeine Form eines Tabellennamens
CREATOR.LOCATION.TBNAME
wobei CREATOR und LOCATION fehlen können. Werden diese Angaben
zur genauen Qualifizierung im DB2-System benötigt, so können
diese in der Ableitungsregeln unter DATABASE erfolgen.
Die Struktur einer DB2-Tabelle kann ASS auf zwei Weisen übergeben
werden. Entweder erfolgt in der ST06 eine Beschreibung der Struktur
analog zu sequentiellen Dateien, wobei wiederum nur die Felder
angegeben werden müssen, die in der Ableitungsregel angesprochen
werden, oder ASS ermittelt diese Struktur aus dem Systemkatalog.
In diesem Fall ist in der ST06 nur das Arbeitsgebiet an sich zu
deklarieren (ohne Angabe von Feldern).
Gibt man anstelle einer (globalen) WHERE-Bedingung diese Bedingung
unter SQLWHERE an, so wird diese Bedingung direkt an DB2
weitergereicht. Achtung: die Formulierung unterliegt der SQL-Syntax.
Es erfolgen keinerlei Prüfungen.
Beispiel:
ASS;
ZIELAG = KUNDE_VERTRAG;
ABLEITUNG = ABL_KUNDE_VERTRAG;
SELECT (AG = KUNDE)
SQLWHERE ( BEARBEITUNGSDATUM > '199801'
AND BEARBEITUNGSDATUM < '200012'),
KUNDENNUMMER = KUNDENNUMMER,
ADRESSE = ADRESSE,
AENDERUNGSDATUM (FORMAT=CHAR, LAENGE=6)
= AENDERUNGSDATUM;
.
.
.
END;
Inhaltsverzeichnis
Stichwortverzeichnis
In der Praxis kommt es vor, dass eine Join-Datei bereits nach
dem gewünschten Join-Kriterium sortiert vorliegt, der interne
Sort mithin überflüssig ist. Gleiches gilt für den aktuellen
Stand der Grundmenge. Dieses führt bei großen Datenvolumina
zu unnötigen Performance-Verlusten. Daher ist es möglich,
durch entsprechende Angaben in der Ableitungsregel, die interne
Sortierung nach dem Join-Kriterium zu unterbinden.
JOIN ( AG = arbeitgebietsbezeichnung,
NOSORT = nn)
wobei für nn die folgenden Angaben möglich sind:
JOIN -> die Join-Datei wird nicht sortiert
ZIEL -> die aktuelle Grundmenge wird nicht sortiert
ALL -> beide Dateien werden nicht sortiert
Inhaltsverzeichnis
Stichwortverzeichnis
Für die Operanden in Bedingungen gilt das gleiche wie
später für die Operanden in Formeln und Funktionen von
Feldzuweisungen:
- Innerhalb eines Steps darf auf alle bis zu diesem Zeitpunkt
bekannten Informationen Bezug genommen werden, d.h. alle
bekannten Felder / Hilfsfelder dürfen angesprochen werden.
Bei Nichteindeutigkeit von Namen ist die Syntax
FELD (AG = ZIEL) bzw. FELD (AG = SELECT) bzw.
FELD (AG = JOIN) zu verwenden.
- Gegebenenfalls ist bei einzelnen Operanden eine
Typumwandlung vorzunehmen.
Inhaltsverzeichnis
Stichwortverzeichnis
- Feldbesetzungen ergeben sich allgemein aus Formeln. Als
Operanden dürfen alle bis zu diesem Zeitpunkt ermittelten
Felder des Zielarbeitsgebietes und Hilfsfelder, sowie alle
Felder des aktuellen Join-Arbeitsgebietes verwendet werden.
Bei Nichteindeutigkeit von Feldbezeichnungen ist Angabe
einer AG-Anweisung erforderlich.
- Die Zuweisung kann in Abhängigkeit von Bedingungen (IF /
ELSE) erfolgen. Die Bedingungen sind dabei logische
Ausdrücke. Es werden zwei Arten von Bedingungen
unterschieden: duplizierend / nicht duplizierend
(nur einmal pro JOIN).
IF bedingung THEN zuweisung
ELSEIF bedingung THEN zuweisung
...
ELSEIF bedingung THEN zuweisung
OTHER zuweisung
ENDIF
oder
IF bedingung THEN zuweisung
IF bedingung THEN zuweisung
...
IF bedingung THEN zuweisung
OTHER zuweisung
ENDIF
- Anbindung von User-Exits (Individualprogrammierung)
Feld = Funktion (opcode, operand, ..., operand)
Feld = Mengenfunktion (opcode, operand, ..., operand)
Feld = Satzfunktion (opcode, operand, ..., operand)
- Mengenfunktionen operieren auf der gesamten WORK3
(Anzahl, Summe, Minimum, Maximum)
- Satzfunktionen liefern zu den aktuellen Eingabedaten in
Abhängigkeit vom Aufruf unterschiedliche Werte zurück:
Aufteilen von Jahresbeitrag auf einzelne Monate.
Inhaltsverzeichnis
Stichwortverzeichnis
FELD = feldabbildung, LEERE_MENGE = feldabbildung
oder falls FELD ein ASS-Wert in einem Monatsarbeitsgebiet ist
FELD = feldabbildung, ASSZEIT = zuweisung,
LEERE_MENGE = feldabbildung,
LEERE_MENGE_ASSZEIT = zuweisung
(ASSZEIT und LEERE_MENGE_ASSZEIT im Format JJJJMM)
oder falls FELD ein ASS-Wert in einem Tagesarbeitsgebiet ist
FELD = feldabbildung, ASSZEIT_TT = zuweisung,
LEERE_MENGE = feldabbildung,
LEERE_MENGE_ASSZEIT_TT = zuweisung
(ASSZEIT_TT und LEERE_MENGE_ASSZEIT_TT im Format JJJJMMTT)
Beispiele:
GROESSENKLASSE =
IF ANZ_VERTRAEGE < 0 THEN SATZ_LOESCHEN
ELSEIF ANZ_VERTRAEGE < 100 THEN 'A'
ELSEIF ANZ_VERTRAEGE < 1000 THEN 'B'
ELSEIF ANZ_VERTRAEGE < 10000 THEN 'C'
OTHER 'X'
ENDIF,
LEERE_MENGE = 'N'
ANZ_VERTRAEGE = MENGENFUNKTION (ANZAHL)
ANZ_TAGE = FUNKTION (ANZ_TAGE, DATUM1, DATUM2)
(falls DATUM1 und DATUM2 Format DATE haben)
Die Angabe SATZ_LOESCHEN bewirkt, dass der aktuell zu
verarbeitende Satz aus der WORK-Datei gelöscht wird.
Hinweis:
Beim Erzeugen der Schnittstellen werden Operandeninhalte im
allgemeinen nicht auf Formatkorrektheit überprüft. Eine
Ausnahme bilden die gepackten Felder.
Inhaltsverzeichnis
Stichwortverzeichnis
Wie bereits beschrieben, kann das Erzeugen einer aktuellen
Join-Menge zu unterschiedlichen Resultaten führen:
- genau ein Treffer (Eindeutigkeit)
- mehr als ein Treffer (Duplikatsbehandlung)
- kein Treffer (Leere-Menge-Behandlung)
Neben der Angabe der globalen Anweisung
LEERE_MENGE = LOESCHEN
im Joinkriterium, welche zu einem Löschen des aktuellen
Satzes, zu dem eine Join-Menge gebildet werden soll, aus
der Grundmenge führt, existiert eine feldspezifische
Leere-Menge-Behandlung.
Beispiel:
VERTRETER = VERTRETER (AG=JOIN), LEERE_MENGE = '4711'
Allgemein kann dort eine Formel stehen. Als Operanden
stehen all diejenigen Felder des Zielarbeitsgebietes zur
Verfügung, die bis zu diesem Zeitpunkt besetzt wurden. Auf
Felder des aktuellen Join-Arbeitsgebietes kann nicht Bezug
genommen werden, da der Inhalt dieser Felder in diesem Fall
gerade nicht ermittelt werden kann.
LEERE_MENGE_ASSZEIT = ... bzw. LEERE_MENGE_ASSZEIT_TT = ...
ist das Pendant hierzu für das Besetzen der ASS-Zeit
bei Werte-Feldern, falls das Zielarbeitsgebiet ein ASS-
Arbeitsgebiet ist.
Inhaltsverzeichnis
Stichwortverzeichnis
- durch Feldzuweisung (via Formel),
z.B. binär -> gepackt,
jedoch nicht char -> gepackt.
- SUBSTR (FELD, OFFSET, LAENGE)
- NUM (FELD_CHAR) bzw. CHAR (FELD_NUM):
Beispiel:
DATUM_CHAR = CHAR (DATUM_BIN)
Das Ergebnisformat hängt vom Operanden ab:
NUM (FELD_CHAR) -> dezimal gepackt 8 Bytes,
Komma (Anzahl Kommastellen)
und Vorzeichen des
Characterstrings werden
interpretiert.
ACHTUNG: Vorzeichen wird
rechts erwartet.
Führende und abschließende Blanks sind
zulässig. Nur Blanks ergeben 0.
Beispiel für zulässigen Operandeninhalt: 123,12-
CHAR (FELD_NUM)
-> 4 Bytes, falls FELD_NUM 1 Bytes binär
6 Bytes, falls FELD_NUM 2 Bytes binär
8 Bytes, falls FELD_NUM 3 Bytes binär
11 Bytes, falls FELD_NUM 4 Bytes binär
2 * Feldlänge von FELD_NUM, falls FELD_NUM
dezimal gepackt,
eventuell zusätzlich
ein Byte für Komma
Inhaltsverzeichnis
Stichwortverzeichnis
Es gibt Anwendungsfälle, wo das Besetzen von Feldinhalten
in Abhängigkeit davon geschehen soll, ob ein zu verarbeitender
Inhalt zum ersten Mal vorkommt oder nicht. In diesem Zusammenhang
taucht die Notwendigkeit auf, festzustellen, ob zum Vorgängersatz
bezüglich bestimmter Felder ein Gruppenwechsel - ein Inhalt hat
sich geändert - hat oder nicht. Dieses wird durch ein
entsprechendes Sprachelement erreicht:
Feld = IF GRUPPENWECHSEL (FELD1, FELD2, FELD3) THEN 1
OTHER 0
ENDIF
Der Gruppenwechsel wird stets bezüglich des Inputs untersucht,
d.h. genau im ersten Schritt (SELECT) bezüglich des einzulesenden
SELECT-Arbeitsgebietes (nach Auswertung von WHERE- und SORT-Angaben)
und im Folgenden bezüglich des aktuellen Stands der Grundmenge.
Der Gruppenwechsel bezieht sich nie auf Join-Arbeitsgebiete.
Dementsprechend dürfen auch nur die Felder in der Gruppenwechsel-
Anweisung gewählt werden.
Inhaltsverzeichnis
Stichwortverzeichnis
Aufgrund der Forderung der Vollständigkeit der Historie bezüglich komplexer Ableitungen ist es in einigen Arbeitsgebieten sinnvoll, dass alte Sätze nie manipuliert werden, sondern nur neue Informationen hinzugestellt werden. Hieraus ergibt sich die Fragestellung, bis zu welchem Punkt (Zeitstempel) die Daten bereits in abgeleitete Sichten übernommen wurden.
Beispiel:
Versorgung des Arbeitsgebietes Kunde / Vertrag:
- Einarbeitung des Deltas Kunde -> Ableitung 1
- Einarbeitung des Deltas Vertrag -> Ableitung 2
Zu jedem (Basis-)Arbeitsgebiet lässt sich hierzu (maximal)
ein Zeitstempel-Feld (Postfix-Z in Eingabemaske)
definieren. Beim Zielarbeitsgebiet wird dann pro Ableitung
vermerkt, wie weit die Datenversorgung erfolgt ist (letzter
Zeitstempel). Dieser Zeitstempel entspricht dem Zeitstempel
des im SELECT angegebenen Arbeitsgebietes. Die Berück-
sichtigung von Deltas bezieht sich dementsprechend
nur auf das Bilden der Grundmenge und erfolgt automatisch,
falls im Select-AG ein solcher Zeitstempel existiert.
Die Delta-Berücksichtigung kann auf zweierlei Weisen
beeinflusst werden:
- Unterdrückung durch Angabe der Option NO_DELTA ->
komplette Datenübernahme
- Unterdrückung der Pflege des Zeitstempels beim
Zielarbeitsgebiet durch Angabe der Option NUPDAT
(nur für Testzwecke sinnvoll)
Beispiel:
ASS;
ZIELAG = KUNDE_VERTRAG;
ABLEITUNG = ABL_KUNDE_VERTRAG;
OPTIONEN = NO_DELTA;
SELECT (AG = KUNDE),
...
END;
Liegt das Zielarbeitsgebiet in offener Speicherungsform
vor, so kann hierfür ein Feld als Zeitstempel-Feld
definiert werden, das dann durch die Ableitung automatisch
versorgt wird. Dieses Feld
- muss das Format dezimal gepackt der Länge 8 haben (PZ) und
- darf nicht in der Ableitungsregel angegeben werden.
Die Ableitung ermittelt aus dem Maschinendatum einen
Zeitstempel der Form JJJJMMTTHHMMSSZ, der in jedem
erzeugten Schnittstellensatz eingetragen wird.
Inhaltsverzeichnis
Stichwortverzeichnis
In der Ableitungsregel kann auf bestimmte Daten Bezug genommen
werden, die quasi konstant sind. Hierzu zählen
- das aktuelle Maschinendatum, wobei die Bezugnahme durch die
Begriffe
- LAUFENDES_JAHR in der Form JHJJ
- VORJAHR in der Form JHJJ
- LAUFENDER_MONAT in der Form MM
- VORMONAT in der Form MM
erfolgt
- LETZTE_VERSORGUNG, die letzte Versorgung des Zielarbeitsgebietes
durch die aktuelle Ableitung. Format und Feldlänge hängen von
der Definition des entsprechenden Zeitstempels ab.
- SATZNUMMER, die aktuelle Satznummer desjenigen Satzes, der durch
die Ableitungsregel für das Zielarbeitsgebiet aktuell aufgebaut
wird. Dadurch können die Sätze im Ziel innerhalb jedes
Select- bzw. Join-Steps numeriert werden. Bei der Satznummer
handelt es sich um ein 4 Bytes binär Feld. Einschränkung: der
CAST-Operator CHAR darf nicht (direkt) auf SATZNUMMER angewandt
werden.
Das Maschinendatum kann durch eine Angabe im ersten Satz
der Datei ASSDATE (analog zum Standard-ASS) übersteuert
werden. Diese Angabe lässt sich wiederum durch
BEZUGSMONAT = JHJJMM in der Ableitungsregel übersteuern.
In den Sätzen 2 bis n können in ASSDATE Parameter mit
Parameterinhalten angegeben werden, die dann in der
Ableitungsregel nutzbar sind. Parameterbezeichner beginnen
dabei mit &&.
Beispiel:
Inhalt der Datei ASSDATE:
9805
&&MONAT = '03'
Angabe in der Ableitungsregel:
DATUM_AKT = LAUFENDES_JAHR !! &&MONAT
Standardmäßig wird für die Ermittlung des Vormonats mit
12 Monaten pro Kalenderjahr gerechnet. Diese Angabe lässt
sich in der Ableitungsregel übersteuern.
ASS;
ZIELAG = KUNDE_VERTRAG;
ABLEITUNG = ABL_KUNDE_VERTRAG;
BEZUGSMONAT = '199812';
MONATE_MAX = 13;
...
END;
Inhaltsverzeichnis
Stichwortverzeichnis
Für Bestandsarbeitsgebiete im ASS ist es im allgemeinen
nicht möglich, beispielsweise bei Zustandsänderungen von
Verträgen, aus den Quellarbeitsgebieten heraus via
Anweisungen in der Ableitungsregel die korrekten
Schnittstellensätze zu erzeugen, da unter Umständen bei
komplexen Zusammenhängen nicht mehr alle Informationen zur
Verfügung stehen. Daher existieren Sprachmittel, die die
Erzeugung von Gegenbuchungen aus dem Zielarbeitsgebiet
heraus ermöglichen:
ASS;
ZIELAG = BESTAND_NEU;
ABLEITUNG = VTR_BESTAND;
OPTIONEN = BESTAND;
ORDNUNGSBEGRIFF = ( KUNDENNUMMER,
POLICENNUMMER);
SORT_ORDNUNGSBEGRIFF = (HISTORIENUMMER);
SELECT (AG = 1001),
BESTANDSSATZART (FORMAT = CHAR, LAENGE = 1) = ' ',
...
END;
- Zugriff auf ASS-Arbeitsgebiet bzw. Ziel-Arbeitsgebiet über
den Ordnungsbegriff
- Bei Duplikaten im Select-Arbeitsgebiet bezüglich des
Ordnungsbegriffs, z.B. mehrere Vertragsänderungen seit der
letzten Übernahme, Sortierung der Sätze nach
SORT_ORDNUNGSBEGRIFF (z.B. Historiennummer)
- Definition eines Hilfsfeldes BESTANDSSATZART
- Die Ausgabe der Schnittstellensätze erfolgt zusätzlich in
einer Datei ASSOUBB, in der Positivbuchungen und
Negativbuchungen im Feld BESTANDSSATZART unterschiedlich
gekennzeichnet sind
Inhaltsverzeichnis
Stichwortverzeichnis
ASS-Arbeitsgebiete werden intern in einer normierten Form interpretiert. Diese Form ist unabhängig vom physischen Speicherungsprinzip der ASS-Summendaten, insbesondere auch vom Verdichtungsstufenkonzept.
In der obigen Tabelle bezeichnen Si Schlüssel und Wj Werte
im ASS-Sinne. Eine Zeile W(j,tk) steht für einen Wert, der
nur für den Zeitaspekt tk von Null verschieden ist. Die
ASSZEIT wird auf eine eigene Spalte abgebildet. Das
dargestellte Format ist ein maximales Format. In
Abhängigkeit von den aufgrund der Ableitungsregel
angeforderten Schlüssel, Werte und Zeiten können einzelne
Zeilen entfallen.
In der Ableitungssprache werden analog zu den
Basisarbeitsgebieten Schlüssel und Werte über ihren
Bezeichner angesprochen. Die ASS-Zeit wird über den Pseudo-
Schlüssel ASSZEIT bzw. ASSZEIT_TT ausgewertet, dessen Inhalt
in der Form JHJJMM bzw. JHJJMMTT betrachtet wird. Innerhalb des
ASS sind analog zur Auswertung Werte nicht ohne ASS-Zeitangabe
interpretierbar. In diesem Zusammenhang unterstützt die
Ableitungssprache zwei Szenarien:
- Angabe von Werten mit ASS-Zeitaspekt, die Angabe erfolgt
hinter der Wertebezeichnung in Klammern gesetzt in der Form
Wert (ASSZEIT ='199812' )
bzw. Wert (ASSZEIT_TT ='20060923')
oder Wert (AG = JOIN, ASSZEIT ='199812' )
bzw. Wert (AG = JOIN, ASSZEIT_TT ='20060923').
Im Select-Step ist dementsprechend JOIN durch
SELECT zu ersetzen.
- Angabe von Werten ohne ASS-Zeitaspekt. Die zugehörigen
Zeitaspekte werden intern aus den Angaben zum Schlüssel
ASSZEIT bzw. ASSZEIT_TT ermittelt. Fehlen Angaben hierzu, so wird
der gesamte Einspeicherungszeitraum als angefordert betrachtet.
Welche Schlüssel, Werte und Zeiten aus dem ASS-
Arbeitsgebiet im aktuellen SELECT / JOIN-Step betrachtet
werden, hängt ausschließlich von der Ableitung ab. Alle
angesprochenen Felder aus dem Arbeitsgebiet, unabhängig
davon, ob dieses in einer Feldzuweisung oder in einer
Bedingung ist, gelten als angefordert. Wird ein Wert ohne
Zeitaspekt angesprochen, so gilt automatisch der Pseudo-
Schlüssel ASSZEIT bzw. ASSZEIT_TT als angefordert und wird unter
Umständen ergänzt. ASSZEIT findet bei Monatsarbeitsgebieten,
ASSZEIT_TT bei Tagesarbeitsgebieten Verwendung.
Pro Step muss mindestens ein ASS-Wert angegeben werden.
Aus allen Zeitangaben wird ein maximales Zeitintervall für
die ASS-Zeit ermittelt. Dieses ist gegebenenfalls das
gesamte Einspeicherungsintervall des Arbeitsgebietes (siehe
oben). Bezüglich dieses Zeitintervalls werden die
Summendaten gelesen.
Beispiel:
ASS;
ZIELAG = KUNDE_VERTRAG;
ABLEITUNG = ABL_KUNDE_VERTRAG;
SELECT (AG = ASS_DATEN)
WHERE (ASSZEIT >= '199801' & ASSZEIT <= '199812'),
KUNDENNUMMER = KUNDENNUMMER,
UMSATZ = UMSATZ;
.
.
.
END;
Es wird nur der Zeitaspekt zwischen Januar und Dezember
1998 betrachtet.
Beispiel:
ASS;
ZIELAG = KUNDE_VERTRAG;
ABLEITUNG = ABL_KUNDE_VERTRAG;
SELECT (AG = ASS_DATEN),
KUNDENNUMMER = KUNDENNUMMER,
UMSATZ = UMSATZ (ASSZEIT = '199801');
.
.
.
END;
Unabhängig vom Quellarbeitsgebiet kann das
Zielarbeitsgebiet wiederum ein ASS-Arbeitsgebiet sein. In
diesem Fall sind (ASS-)Werte mit der zugehörigen ASS-Zeit
zu versorgen. Bei Monatsarbeitsgebieten ist ASSZEIT und bei
Tagesarbeitsgebieten ASSZEIT_TT zu verwenden.
Beispiel:
ASS;
ZIELAG = ASS_DATEN_NEU;
ABLEITUNG = ABL_KUNDE_VERTRAG;
SELECT (AG = ASS_DATEN)
WHERE (ASSZEIT >= '199801' & ASSZEIT <= '199812'),
KUNDENNUMMER = KUNDENNUMMER,
UMSATZ = UMSATZ, ASSZEIT = ASSZEIT;
.
.
.
END;
Die Versorgung der ASS-Zeit geschieht wie üblich allgemein
durch eine Formel. Das obige Beispiel stellt hierbei einen
Sonderfall dar. Es wird Bezug genommen auf den intern
ergänzten Schlüssel ASSZEIT, der aktuelle Inhalt wird
übernommen.
In allen Beispielen werden nur Sätze ausgegeben, wenn der
Werteinhalt von Null verschieden ist. Allgemein entsteht
ein Satz nur dann, wenn der Werteinhalt eines angegebenen
Wertes von Null verschieden ist. Möchte man derartige
"Nullsätze" bezüglich des angeforderten Zeitaspektes
erzeugen, so ist die Option NULLAUSGABE anzugeben.
Beispiel:
ASS;
ZIELAG = KUNDE_VERTRAG;
ABLEITUNG = ABL_KUNDE_VERTRAG;
OPTIONEN = NULLAUSGABE;
SELECT (AG = ASS_DATEN)
WHERE (ASSZEIT >= '199801' & ASSZEIT <= '199812'),
KUNDENNUMMER = KUNDENNUMMER,
UMSATZ = UMSATZ;
.
.
.
END;
ACHTUNG:
Bei Verwendung der Option NULLAUSGABE ist das
Ergebnis abhängig von der / den benutzten
Verdichtungsstufen aus denen die ASS-Summendaten gelesen
werden. Es können nur Sätze ausgegeben werden, die auf
den entsprechenden Verdichtungsstufen vorhanden sind.
Aufgrund der internen Speicherungslogik von ASS-Summendaten
ist es möglich, dass auf einer Basisverdichtungsstufe
Schlüsselinhaltskombinationen existieren, die auf höheren
Verdichtungsstufen aufgrund der Verdichtung nicht
vorkommen. Daher ist die Angabe der Option nur dann ratsam,
wenn gewährleistet ist, dass eine echte
Basisverdichtungsstufe vorhanden ist und die zu
selektierenden Daten aufgrund der Ableitungsregel durch
Anforderung aller Schlüssel des Arbeitsgebietes aus dieser
Basis gewonnen werden.
Inhaltsverzeichnis
Stichwortverzeichnis
Analog zur ASS-Auswertung ist beim Schlüssel ASSZEIT und
bei den ASSZEIT-Angaben zu ASS-Werten der relative Bezug
auf das Maschinendatum beziehungsweise auf den
übersteuernd angegebenen Bezugsmonat möglich.
Möglich sind
BMnn: Bezugsmonat minus nn Monate
BPnn: Bezugsmonat plus nn Monate
nnMm: Monat nn, Jahresangabe aus Bezugsmonat minus m Jahre
nnPm: Monat nn, Jahresangabe aus Bezugsmonat plus m Jahre
Die Anzahl Monate im Jahr ist standardmäßig 12. Sie kann
durch die Angabe von MONATE_MAX auf eine Anzahl zwischen 13
und 16 erhöht werden.
Eine relative Zeitangabe beim Schlüssel ASSZEIT muss in
Hochkommata eingeschlossen werden, also als String
erfolgen.
Beispiele:
ASS;
ZIELAG = KUNDE_VERTRAG;
ABLEITUNG = ABL_KUNDE_VERTRAG;
BEZUGSMONAT = '199801';
SELECT (AG = ASS_DATEN)
WHERE (ASSZEIT >= 'BM00' & ASSZEIT <= 'BP11'),
KUNDENNUMMER = KUNDENNUMMER,
UMSATZ = UMSATZ;
.
.
.
END;
ASS;
ZIELAG = KUNDE_VERTRAG;
ABLEITUNG = ABL_KUNDE_VERTRAG;
SELECT (AG = ASS_DATEN),
KUNDENNUMMER = KUNDENNUMMER,
UMSATZ = UMSATZ (ASSZEIT = 01P1);
.
.
.
END;
Inhaltsverzeichnis
Stichwortverzeichnis
Innerhalb einer Ableitungsregel ist es möglich, in einem
Join-Step Bezug auf den aktuellen Zustand des aufzubauenden
Zielarbeitsgebietes zu nehmen. Diese sequentielle Datei
wird als Arbeitsgebiet aufgefasst:
Beispiel:
ASS;
ZIELAG = zielagbezeichnung;
ABLEITUNG = bezeichnung_ableitung;
SELECT (AG = ag_select),
Feld1 = Formel1,
.
.
.
Feldn = Formeln;
JOIN (AG = ZIELAG_NEU_AKT) ,
JOINKRITERIUM = ( ... ),
Feldn+1 = Formeln+1,
.
.
.
SELECT (AG = ZIELAG_NEU_AKT) ,
Feldm+1 = Formelm+1,
.
.
.
END;
In dem betreffenden Join-Step kann auf alldiejenigen Felder
Bezug genommen werden, die bis zu diesem Zeitpunkt
ermittelt wurden (im Beispiel Feld1,..., Feldn). Intern
wird entsprechend ein künstliches Arbeitsgebiet mit einer
entsprechenden Arbeitsgebietsbeschreibung angelegt. Der
Umfang des Arbeitsgebietes (bekannte Felder, Anzahl Sätze)
ist demnach dynamisch. Insbesondere zu beachten ist die
zusätzliche Qualifkation der zu besetzenden Felder durch
die Angaben von AG = JOIN bzw. AG = ZIEL. Die aktuellen
Inhalte dieser Felder während der Verarbeitung sind im
allgemeinen verschieden.
Inhaltsverzeichnis
Stichwortverzeichnis
PCL4003: Steuerung
MCL4016: Sprachanalyse
MCL4018: Formeln umsetzen
MCL4017: Einlesen der Arbeitsgebietsinformationen
MCL4015: Feldinformation für DB2-AG aus IBM-Systemkatalog
MCL4009: Erzeugung der Schnittstellendatei
MCL4003: Erzeugung aktueller Join-Datei (meistens Cache)
MCL4004: Erzeugung kurzer Schnittstelle für ASS-AG
MCL4005: Zugriff sequentielle Dateien
MCL4006: DB2-Zugriff
MCL4014: Formeln berechnen
MCL4023: Zugriff aus ASS-Summendatenbanken
MCL4098: Funktionen berechnen
MCL4097: USER-Exit
Gezielte Ansteuerung von Programmteilen per Option:
NUR_SYNTAX: nur Sprachanalyse (MCL4016)
NUR_SEMANTIK: Sprachanalyse und Konsistenzprüfungen
(bis einschließlich MCL4017)
Zusätzliche Dokumentation von Laufzeiten in MCL4009:
DISPLAY_ZEIT: Ausgabe via Cobol-DISPLAY
PROTO_ZEIT: Ausgabe auf Protokolldatei
Inhaltsverzeichnis
Stichwortverzeichnis
LINE_SEQUENTIAL: Diese Option ist nur für eine PC-
Installation gedacht. Gewöhnlich erzeugt die DW-Kompo-
nente Schnittstellendateien mit variablen Satzlängen
(Ladebestände für ASS, DB2). Ist das Zielarbeitsgebiet
ein sequentielles Basisarbeitsgebiet, so wird bei Angabe
dieser Option eine Datei vom Typ "line sequential" erzeugt.
In diesem Fall darf das Zielarbeitsgebiet nur Felder vom
Typ Character enthalten.
Inhaltsverzeichnis
Stichwortverzeichnis
//PG999513 JOB (PG9999,ASS,E),'ODI PCL4003',
// CLASS=1,
// MSGCLASS=X,
// NOTIFY=&SYSUID,
// REGION=6M,
// TIME=(,10),
// COND=(0,LT)
/*JOBPARM R=33,PROCLIB=PROC09
//ATECNTL JCLLIB ORDER=(PG##E.INO.CNTL)
//*
//*
//**** P C L 4 0 0 3 ***************************
//PCL4003 EXEC §ODI2,
// MBR=DSNMTV01,
// PSB=PCL4003
//DDITV02 DD *
DB2T,SYS1,DSNMIN10,,R,-,ARIADNE,PAR4000,PCL4003
//DDOTV02 DD DISP=(,PASS),
// UNIT=SYSDA,
// SPACE=(TRK,(1,1)),
// DCB=(RECFM=VB,LRECL=4092,BLKSIZE=4096)
//KARTE DD DSN=PG##E.PDS.BUE(KARTE2),DISP=SHR
//VNRNAME DD DSN=PG##E.PDS.BUE(VNRNAME),DISP=SHR
//LISTE DD SYSOUT=*,
// DCB=RECFM=FBA
//ASSDATE DD DSN=NULLFILE
//ASSOUMM DD DSN=PG##E.ERE.EX(A4003M),DISP=OLD
//ASSOUNN DD DSN=PG##E.ERE.EX(A4003N),DISP=OLD
//ASSOUOO DD DSN=PG##E.ERE.EX(A4003O),DISP=OLD
//WORK1 DD DSN=PG##E.ERE.W1,DISP=OLD
//WORK2 DD DSN=PG##E.ERE.W2,DISP=OLD
//WORK3 DD DSN=PG##E.ERE.W3,DISP=OLD
//WORK4 DD DSN=PG##E.ERE.W4,DISP=OLD
//WORK5 DD DSN=PG##E.ERE.W5,DISP=OLD
//WORK6 DD DSN=PG##E.ERE.W6,DISP=OLD
//SORTWK1 DD UNIT=SYSDA,
// SPACE=(CYL,(10,1))
//SORTWK2 DD UNIT=SYSDA,
// SPACE=(CYL,(10,1))
//*
//**** D F S E R A 1 0 ****************************
//DFSERA10 EXEC PGM=DFSERA10,COND=EVEN
//STEPLIB DD DSN=$$ALL12.Q.NODBRC,DISP=SHR
//SYSIN DD *
CONTROL CNTL K=000,H=8000
OPTION PRINT
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD DSN=*.PCL4003.A.DDOTV02,DISP=(OLD,DELETE)
Inhaltsverzeichnis
Stichwortverzeichnis
KARTE Ableitungsregel
ASSDATE Bezugsdatum und Parameter
LISTE Protokoll
WORK1-WORK6 temporäre Work-Dateien
SORTWK1, SORTWK2 Arbeitsdateien für Systemsort
ASSOUMM Kopfsatz, falls Zielarbeitsgebiet ASS-AG
ASSOUNN Schnittstellendatei bzw. Summensätze
ASSOUOO Endesatz, falls Zielarbeitsgebiet ASS-AG
ASSOUBB nur Option BESTAND
VNRNAME Daten des Arbeitsgebietes VNRNAME,
Satzformat: fest oder variabel.
Inhaltsverzeichnis
Stichwortverzeichnis
ASS;
ABLEITUNG = VTRBST;
ZIELAG = BESTAND_NEU;
OPTIONEN = BESTAND;
ORDNUNGSBEGRIFF = KD_NUMMER_1_3,KD_NUMMER_4_6,KD_NUMMER_7_9,
POL_LFD_NR,VTR_LFD_NR,MANDANT);
SORT_ORDNUNGSBEGRIFF = (VTRHISTNR);
/*** BEARBEITEN DER NEU HINZUGEKOMMENEN ZUSTAENDE/VORGAENGE */
SELECT(AG = 1002),
BESTANDSSATZART (FORMAT=CHAR, LAENGE=1)
= ' ',
KDNR (FORMAT=BIN, LAENGE=4)
= KD_NUMMER,
URLDATUM (FORMAT=DATE,LAENGE=10)
= '&&URLDATUM',
STATDATUM (FORMAT=DATE, LAENGE=10)
= IF BEARBEITUNGSDATUM > AENDERUNGSDATUM
& BEARBEITUNGSDATUM > URLDATUM
THEN BEARBEITUNGSDATUM
ELSEIF BEARBEITUNGSDATUM <= AENDERUNGSDATUM
& AENDERUNGSDATUM > URLDATUM
THEN AENDERUNGSDATUM
OTHER URLDATUM
ENDIF,
BEARBDAT_JJJJMM (FORMAT=CHAR, LAENGE=6)
= SUBSTR(BEARBEITUNGSDATUM,7,4) !!
SUBSTR(BEARBEITUNGSDATUM,4,2),
VTRNR (FORMAT=PACKED, LAENGE=8)
= VTR_NR,
VTRHISTNR (FORMAT=PACKED, LAENGE=3)
= VTR_HIST_NR,
POLLFDNR (FORMAT=BIN,LAENGE=2)
= POL_LFD_NR,
VTRHNR (FORMAT=PACKED, LAENGE=3)
= VTR_HIST_NR, /* WEGEN KD_BST */
LEISCHL (FORMAT=PACKED, LAENGE=8)
= LEISTUNGSSCHL,
STATDAT (FORMAT=DATE, LAENGE=10)
= STATDATUM,
VORGANG(FORMAT=CHAR, LAENGE=4) = VORGANG,
TEILVORGANG(FORMAT=CHAR, LAENGE=4) = TEILVORGANG,
STORNOART (FORMAT=CHAR, LAENGE=3)
= IF STORNOART = ' ' THEN '#'
OTHER STORNOART
ENDIF,
STORNOGRUND(FORMAT=CHAR, LAENGE=3)
= IF STORNOGRUND = ' ' THEN '#'
OTHER STORNOGRUND
ENDIF,
AENDERDAT_JJJJMM (FORMAT=CHAR, LAENGE=6)
= SUBSTR(STATDAT,7,4) !!
SUBSTR(STATDAT,4,2),
ANTRAGSART (FORMAT=CHAR, LAENGE=6) = ANTRAGSART,
ANTRAGSDATUM (FORMAT=CHAR, LAENGE=4) = ANTRAGSDATUM,
ANZTAGE (FORMAT=BIN, LAENGE=4)
= FUNKTION(ANZ-TAGE,
VERTRAGSBEGINN_VTR,
STATDATUM ),
BEWEGUNGSJAHR_VTR (FORMAT=CHAR, LAENGE=1) =
IF ANZTAGE < 365 THEN '0'
ELSEIF ANZTAGE < 730 THEN '1'
OTHER '2'
ENDIF,
GESELLSCHAFT = SUBSTR(CHAR(GESELLSCHAFT),4,2),
HAUPTFAELL_POL = SUBSTR(CHAR(HAUPTFAELL_POL),4,2),
LAUFZEIT = SUBSTR(CHAR(LAUFZEIT),1,3),
LEISTUNGSSCHL = SUBSTR(CHAR(LEISTUNGSSCHL),10,6),
MANDANT = MANDANT,
MITARBEITER_KNZ = MITARBEITER_KNZ,
KD_NUMMER_1_3 = SUBSTR(CHAR(KD_NUMMER),2,3),
KD_NUMMER_4_6 = SUBSTR(CHAR(KD_NUMMER),5,3),
KD_NUMMER_7_9 = SUBSTR(CHAR(KD_NUMMER),8,3),
POL_LFD_NR = SUBSTR(CHAR(POL_LFD_NR),3,3),
SPARTE = SPARTE,
STATUS_VTR = STATUS_VTR,
VTR_LFD_NR = SUBSTR(CHAR(VTR_LFD_NR),2,4),
VERTRAGSBEG_V_JJJJ = SUBSTR(VERTRAGSBEGINN_VTR,7,4),
VERTRAGSBEG_V_JJJJMM = VERTRAGSBEG_V_JJJJ !!
SUBSTR(VERTRAGSBEGINN_VTR,4,2),
VERTRAGSBEG_P_JJJJ = SUBSTR(VERTRAGSBEGINN_POL,7,4),
VERTRAGSBEG_P_JJJJMM = VERTRAGSBEG_P_JJJJ !!
SUBSTR(VERTRAGSBEGINN_POL,4,2),
WARTEZEITENTFALL = WARTEZEITENTFALL,
WERBESCHLUESSEL = IF WERBESCHLUESSEL = ' ' THEN '#'
OTHER WERBESCHLUESSEL
ENDIF,
ZAHLWEISE = ZAHLWEISE,
ZU_NACHLASSART = IF ZU_NACHLASSART = ' ' THEN '#'
OTHER ZU_NACHLASSART
ENDIF,
ZU_NACHLASSNR = SUBSTR(CHAR(ZU_NACHLASSNR),1,5),
ABSCHLUSSGRUPPE = '#',
VERTRIEBSSTELLE = '#',
ANZAHL_VERTRAEGE = IF VORGANG(AG=SELECT) = '0000'
& TEILVORGANG(AG=SELECT) ^= '0090'
THEN 0
ELSEIF ( VORGANG(AG=SELECT)='0000'
& TEILVORGANG(AG=SELECT) = '0090')
! VORGANG(AG=SELECT) = '2900'
! VORGANG(AG=SELECT) = '2950'
! VORGANG(AG=SELECT) = '3000'
! VORGANG(AG=SELECT) = '5000'
! VORGANG(AG=SELECT) = '5100'
THEN SATZ_LOESCHEN
OTHER 1
ENDIF,
ASSZEIT = SUBSTR(STATDAT,7,4) !!
SUBSTR(STATDAT,4,2);
/*** ERGAENZEN DER KUNDENMERKMALE */
JOIN (AG = 1000 /* KUNDENDATEI */,LESART=DIREKT),
JOINKRITERIUM = ( ZIELFELDER = ( MANDANT !! KDNR ),
JOINFELDER = ( MANDANT !! KD_NUMMER ),
SORT (BEARBEITUNGSDATUM ASC),
DUP = LAST
WHERE ( BEARBEITUNGSDATUM <= STATDAT,
SORT (BEARBEITUNGSDATUM ASC),
LAST (KD_NUMMER),
STATUS_MGL = ' '
)
),
EINTRITTSJAHR_KD = EINTRITTSJAHR_KD,
LEERE_MENGE = '$',
FAELLIGKEIT_KD = FAELLIGKEIT_KD,
LEERE_MENGE = '$',
GESCHLECHT = GESCHLECHT,LEERE_MENGE = '$',
GEBURTSJAHR = SUBSTR(GEBURTSDATUM,7,4),
LEERE_MENGE = '$',
INKASSOART = IF STATUS_BANK_R = '1' THEN 'A'
OTHER 'I'
ENDIF,
TARIF = TARIF, LEERE_MENGE = '$',
WOHNSITZ = WOHNSITZ, LEERE_MENGE = '$';
/*** ERGAENZEN WERBEMERKMALE */
JOIN (AG = 1008 /*WERBESCHL*/),
JOINKRITERIUM = ( ZIELFELDER = ( WERBESCHLUESSEL !! MANDANT ),
JOINFELDER = ( WERBESCHLUESSEL !! MANDANT ),
DUP = LAST
),
WERBEGRUPPE = IF WERBEGRUPPE = ' ' THEN '#'
OTHER WERBEGRUPPE
ENDIF,
WERBEMEDIUM = IF WERBEMEDIUM = ' ' THEN '#'
OTHER WERBEMEDIUM
ENDIF;
/*** ERMITTELN DER WERTE */
JOIN (AG = 1003 /*VO_LVB*/),
JOINKRITERIUM = ( ZIELFELDER = ( MANDANT !! VTRNR !! VTRHISTNR),
JOINFELDER = ( MANDANT !! VTR_NR !!
VTR_HIST_NR ),
SORT ( VO_NR ASC,
LVB_NR ASC
),
DUP = LAST
WHERE ( STATUS_VO = 'A' )
),
STEUERPROZSATZ = SUBSTR(CHAR(STEUERPROZSATZ),3,8),
BRUTTO (FORMAT=PACKED, LAENGE=6, KOMMASTELLEN=3)
= MENGENFUNKTION (SUMME,BRUTTOBEITRAG),
NETTO (FORMAT=PACKED, LAENGE=6, KOMMASTELLEN=3)
= MENGENFUNKTION (SUMME,NETTOBEITRAG),
BRUTTO_BEITRAG = BRUTTO,
ASSZEIT = SUBSTR(STATDAT,7,4) !!
SUBSTR(STATDAT,4,2),
LEERE_MENGE_ASSZEIT = SUBSTR(STATDAT,7,4) !!
SUBSTR(STATDAT,4,2),
NETTO_BEITRAG = NETTO,
ASSZEIT = SUBSTR(STATDAT,7,4) !!
SUBSTR(STATDAT,4,2),
LEERE_MENGE_ASSZEIT = SUBSTR(STATDAT,7,4) !!
SUBSTR(STATDAT,4,2),
RABATT = MENGENFUNKTION (SUMME,RABATT_DM),
ASSZEIT = SUBSTR(STATDAT,7,4) !!
SUBSTR(STATDAT,4,2),
LEERE_MENGE_ASSZEIT = SUBSTR(STATDAT,7,4) !!
SUBSTR(STATDAT,4,2),
STEUER = BRUTTO - NETTO,
ASSZEIT = SUBSTR(STATDAT,7,4) !!
SUBSTR(STATDAT,4,2),
LEERE_MENGE_ASSZEIT = SUBSTR(STATDAT,7,4) !!
SUBSTR(STATDAT,4,2);
END;
Inhaltsverzeichnis
Stichwortverzeichnis
Inhaltsverzeichnis
Stichwortverzeichnis
ASS;
ZIELAG = ag;
DATABASE = database;
ABLEITUNG = regel;
MONATE_MAX = monat;
BEZUGSMONAT = bezugsmonat;
OPTIONEN = option, ..., ..., option;
ORDNUNGSBEGRIFF = ( feldname_einfach, ..., ...,
feldname_einfach );
SORT_ORDNUNGSBEGRIFF = ( feldname_einfach );
SELECT ( selectangabe ) WHERE ( selectbedingung )
,feldzuweisung
,...
,...
,...
,feldzuweisung
;
JOIN ( joinangabe ) WHERE ( joinbedingung )
,JOINKRITERIUM = joinkriterium
,feldzuweisung
,...
,...
,...
,feldzuweisung
;
SELECT ( AG = ZIELAG_NEU_AKT ) WHERE ( selectbedingung )
,feldzuweisung
,...
,...
,...
,feldzuweisung
;
END;
Die Join-Steps und Select-Steps außer dem ersten sind optional
und dürfen in beliebiger Reihenfolge angegeben werden. Die
Feldzuweisungen bei Folge-Select-Steps dürfen fehlen.
Inhaltsverzeichnis
Stichwortverzeichnis
ag: positive ganzzahlige Konstante 1, ..., 1999
oder
Char-Konstante der Länge 1, ..., 20
database: für DB2-Tabellen Database
regel: positive ganzzahlige Konstante 1, ..., 1999
oder
Char-Konstante der Länge 1, ..., 20
bezugsmonat: Zeitangabe in der Form 'JHJJMM'
monat: positive ganzzahlige Konstante 12, ..., 16
option: NUPDAT
oder
NUR_SYNTAX
oder
NUR_SEMANTIK
oder
BESTAND
oder
NO_DELTA
oder
NULLAUSGABE
oder
DISPLAY_ZEIT
oder
PROTO_ZEIT
oder
LINE_SEQUENTIAL (nur PC)
feldname_einfach:
Spaltenbezeichner, der syntaktisch ein
PLI-Bezeichner sein muss
selectangabe: AG = ag
oder
AG = ag, DATABASE = database
oder
AG = ag, LESART = DIREKT
oder
AG = ag, DATABASE = database,
LESART = DIREKT
joinangabe: AG = ag
oder
AG = ag, DATABASE = database
oder
AG = ag, LESART = DIREKT
oder
AG = ag, NOSORT = nosort
oder
AG = ag, DATABASE = database,
LESART = DIREKT
oder
AG = ag, DATABASE = database,
NOSORT = nosort
oder
AG = ag, NOSORT = nosort,
LESART = DIREKT
oder
AG = ag, DATABASE = database,
LESART = DIREKT, NOSORT = nosort
nosort: ALL
oder
ZIEL
oder
JOIN
feldzuweisung: zielfeld = feldabbildung_mit_zeitangabe
oder
zielfeld, ..., ..., zielfeld =
SATZFUNKTION ( opcode, operand, ... ),
LEERE_MENGE ( opcode, operand, ... )
zielfeld: feldname_einfach
oder
feldname_einfach ( arbeitsfeldangabe )
arbeitsfeldangabe:
ASSZEIT bzw. ASSZEIT_TT
oder
FORMAT = format, LAENGE = laenge1,
KOMMASTELLEN = kommastellen
format: CHAR
oder
BIN
oder
PACKED
laenge1: positive ganzzahlige Konstante
bei arbeitsfeldangabe abhängig von FORMAT:
bei CHAR: 1 ... 50
bei BIN: 1 ... 4
bei PACKED: 1 ... 8
kommastellen: positive ganzzahlige Konstante 1, ..., 4
( nur bei FORMAT = PACKED erlaubt! )
feldabbildung_mit_zeitangabe:
Monatsarbeitsgebiet:
feldabbildung,
ASSZEIT = zuweisung
LEERE_MENGE = feldabbildung,
LEERE_MENGE_ASSZEIT= zuweisung
oder
feldabbildung,
ASSZEIT = zuweisung
LEERE_MENGE_ASSZEIT= zuweisung
oder
feldabbildung,
LEERE_MENGE = feldabbildung,
Tagesarbeitsgebiet:
feldabbildung,
ASSZEIT_TT = zuweisung
LEERE_MENGE = feldabbildung,
LEERE_MENGE_ASSZEIT_TT= zuweisung
oder
feldabbildung,
ASSZEIT_TT = zuweisung
LEERE_MENGE_ASSZEIT_TT= zuweisung
oder
feldabbildung,
LEERE_MENGE = feldabbildung,
feldabbildung: IF bedingung THEN zuweisung
ELSEIF bedingung THEN zuweisung
...
...
...
ELSEIF bedingung THEN zuweisung
OTHER zuweisung
ENDIF
oder
IF bedingung THEN zuweisung
...
...
...
IF bedingung THEN zuweisung
OTHER zuweisung
ENDIF
oder
zuweisung
oder
SATZFUNKTION ( opcode, operand, ... )
bedingung: funktionsaufruf
oder
elementarbedingung
oder
logische verknüpfung von elementar-
bedingungen durch ( , ), &, !
oder
GRUPPENWECHSEL (feldname_einfach,...,feldnane_einfach)
funktionsaufruf:
FUNKTION ( opcode, operand , ... )
oder
MENGENFUNKTION ( opcode, operand , ... )
elementarbedingung:
operand operator operand
oder
operand
operand: feldname1
oder
NUM ( feldname1 )
oder
CHAR ( feldname2 )
oder
SUBSTR ( CHAR ( feldname2 ), offset, laenge2 )
oder
KONSTANTE
oder
'relative_zeitangabe' (als String)
feldname1: feldname2
oder
SUBSTR ( feldname_einfach, offset, laenge2 )
oder
SUBSTR ( feldname2, offset, laenge2 )
feldname2: feldname_einfach
oder
feldname_einfach ( ag_angabe )
oder falls ASS-Wert
feldname_einfach ( ag_angabe, asszeit-angabe )
ag_angabe: AG = ZIEL
oder
AG = SELECT ( nur innerhalb SELECT ! )
oder
AG = JOIN ( nur innerhalb JOIN ! )
asszeit-angabe:
Monatsarbeitsgebiet:
ASSZEIT = 'jhjjmm'
oder
ASSZEIT = relative_zeitangabe
Tagesarbeitsgebiet:
ASSZEIT_TT = 'jhjjmmtt'
relative_zeitangabe:
BMnn mit 0 <= nn <= 99
oder
BPnn mit 0 <= nn <= 99
oder
nnMm mit 01 <= nn <= 16, 0 <= m <= 9
oder
nnPm mit 01 <= nn <= 16, 0 <= m <= 9
offset: positive ganzzahlige Konstante 1 ... 500
laenge2: positive ganzzahlige Konstante
bei SUBSTR: 1 ... 500
operator: logische Vergleichsoperatoren: =, ^=, <, <=, >, >=
zuweisung: FORMEL ( im ASS-Sinne, nur für
numerische Felder oder Zeitangaben )
oder
operand
oder
operand !! operand
oder
funktionsaufruf
oder
zeitangabe
oder
SATZNUMMER
oder
SATZ_LOESCHEN ( nur nach THEN in einer
IF-Struktur )
zeitangabe: LETZTE_VERSORGUNG
oder
LAUFENDES_JAHR
oder
VORJAHR
oder
LAUFENDER_MONAT
oder
VORMONAT
selectbedingung:
filterangabe ( MENGENFUNKTION
nicht erlaubt! )
joinbedingung: bedingung ( MENGENFUNKTION
nicht erlaubt! )
joinkriterium: ( ZIELFELDER = zielfelder,
JOINFELDER = joinfelder,
SORT sortangabe,
DUP = duplikatsregel
WHERE ( filterangabe ),
LEERE_MENGE = LOESCHEN )
zielfelder: ( feldname3 !! feldname3 !! ... !! feldname3 )
feldname3: feldname_einfach
oder
SUBSTR ( feldname_einfach, offset, laenge2 )
joinfelder: ( feldname3 !! feldname3 !! ... !! feldname3 )
sortangabe: ( feldname3 ASC oder DESC,
...
...
...
feldname3 ASC oder DESC )
duplikatsregel:
FIRST
oder
LAST
oder
PRIOR
oder
ALL
filterangabe: filterbedingung, ..., filterbedingung
( maximal 5 ! )
filterbedingung:
bedingung
oder
bedingung,
SORT ( feldname3 ASC oder DESC,
...
...
feldname3 ASC oder DESC ),
LAST ( feldname3, ..., feldname3 )
oder
SORT ( feldname3 ASC oder DESC,
...
...
feldname3 ASC oder DESC ),
LAST ( feldname3, ..., feldname3 )
( MENGENFUNKTION bei bedingung nicht erlaubt! )
Inhaltsverzeichnis
Stichwortverzeichnis
ag: positive ganzzahlige Konstante 1, ..., 1999
oder
Char-Konstante der Länge 1, ..., 20
ag_angabe: AG = ZIEL
oder
AG = SELECT ( nur innerhalb SELECT ! )
oder
AG = JOIN ( nur innerhalb JOIN ! )
arbeitsfeldangabe:
ASSZEIT bzw. ASSZEIT_TT
oder
FORMAT = format, LAENGE = laenge1,
KOMMASTELLEN = kommastellen
ASSZEIT = relative_zeitangabe
asszeit-angabe:
Monatsarbeitsgebiet: ASSZEIT = 'JHJJMM'
Tagesarbeitsgebiet: ASSZEIT_TT = 'JHJJMMTT'
oder
bedingung: funktionsaufruf
oder
elementarbedingung
oder
logische verknüpfung von elementar-
bedingungen durch ( , ), &, !
oder
GRUPPENWECHSEL (feldname_einfach,...,feldnane_einfach)
bezugsmonat: Zeitangabe in der Form 'JHJJMM'
BPnn mit 0 <= nn <= 99
database: für DB2-Tabellen Database
duplikatsregel:
FIRST
oder
LAST
oder
PRIOR
oder
ALL
elementarbedingung:
operand operator operand
oder
operand
feldabbildung: IF bedingung THEN zuweisung
ELSEIF bedingung THEN zuweisung
...
...
...
ELSEIF bedingung THEN zuweisung
OTHER zuweisung
ENDIF
oder
IF bedingung THEN zuweisung
...
...
...
IF bedingung THEN zuweisung
OTHER zuweisung
ENDIF
oder
zuweisung
oder
SATZFUNKTION ( opcode, operand, ... )
feldabbildung_mit_zeitangabe:
Monatsarbeitsgebiet:
feldabbildung,
ASSZEIT = zuweisung
LEERE_MENGE = feldabbildung,
LEERE_MENGE_ASSZEIT = zuweisung
bzw. Tagesarbeitsgebiet:
feldabbildung,
ASSZEIT_TT = zuweisung
LEERE_MENGE = feldabbildung,
LEERE_MENGE_ASSZEIT_TT = zuweisung
oder
Monatsarbeitsgebiet:
feldabbildung,
ASSZEIT = zuweisung
LEERE_MENGE_ASSZEIT = zuweisung
bzw. Tagesarbeitsgebiet:
feldabbildung,
ASSZEIT_TT = zuweisung
LEERE_MENGE_ASSZEIT_TT = zuweisung
oder
feldabbildung,
LEERE_MENGE = feldabbildung,
feldname_einfach:
Spaltenbezeichner, der syntaktisch
ein PLI-Bezeichner sein muss
feldname1: feldname2
oder
SUBSTR ( feldname_einfach, offset, laenge2 )
oder
SUBSTR ( feldname2, offset, laenge2 )
feldname2: feldname_einfach
oder
feldname_einfach ( ag_angabe )
oder falls ASS-Wert
feldname_einfach ( ag_angabe, asszeit-angabe )
feldname3: feldname_einfach
oder
SUBSTR ( feldname_einfach, offset, laenge2 )
feldzuweisung: zielfeld = feldabbildung_mit_zeitangabe
oder
zielfeld, ..., ..., zielfeld =
SATZFUNKTION ( opcode, operand, ... ),
LEERE_MENGE ( opcode, operand, ... )
filterangabe: filterbedingung, ..., filterbedingung
( maximal 5 ! )
filterbedingung:
bedingung
oder
bedingung,
SORT ( feldname3 ASC oder DESC,
...
...
feldname3 ASC oder DESC ),
LAST ( feldname3, ..., feldname3 )
oder
SORT ( feldname3 ASC oder DESC,
...
...
feldname3 ASC oder DESC ),
LAST ( feldname3, ..., feldname3 )
( MENGENFUNKTION bei bedingung nicht erlaubt! )
format: CHAR
oder
BIN
oder
PACKED
funktionsaufruf:
FUNKTION ( opcode, operand , ... )
oder
MENGENFUNKTION ( opcode, operand , ... )
joinangabe: AG = ag
oder
AG = ag, DATABASE = database
oder
AG = ag, LESART = DIREKT
oder
AG = ag, NOSORT = nosort
oder
AG = ag, DATABASE = database,
LESART = DIREKT
oder
AG = ag, DATABASE = database,
NOSORT = nosort
oder
AG = ag, NOSORT = nosort,
LESART = DIREKT
oder
AG = ag, DATABASE = database,
LESART = DIREKT, NOSORT = nosort
joinbedingung: bedingung ( MENGENFUNKTION
nicht erlaubt! )
joinfelder: ( feldname3 !! feldname3 !! ... !! feldname3 )
joinkriterium: ( ZIELFELDER = zielfelder,
JOINFELDER = joinfelder,
SORT sortangabe,
DUP = duplikatsregel
WHERE ( filterangabe ),
LEERE_MENGE = LOESCHEN )
kommastellen: positive ganzzahlige Konstante 1, ..., 4
( nur bei FORMAT = PACKED erlaubt! )
laenge1: positive ganzzahlige Konstante
bei arbeitsfeldangabe abhängig von FORMAT:
bei CHAR: 1 ... 50
bei BIN: 1 ... 4
bei PACKED: 1 ... 8
laenge2: positive ganzzahlige Konstante
bei SUBSTR: 1, ..., 500
monat: positive ganzzahlige Konstante 12, ..., 16
nnMm mit 01 <= nn <= 16, 0 <= m <= 9
oder
nnPm mit 01 <= nn <= 16, 0 <= m <= 9
oder
funktionsaufruf
oder
zeitangabe
oder
SATZ_LOESCHEN ( nur nach THEN in einer
IF-Struktur )
oder
operand !! operand
nosort: ALL
oder
ZIEL
oder
JOIN
offset: positive ganzzahlige Konstante 1, ..., 500
operand: feldname1
oder
NUM ( feldname1 )
oder
CHAR ( feldname2 )
oder
SUBSTR ( CHAR ( feldname2 ), offset, laenge2 )
oder
KONSTANTE
oder
'relative_zeitangabe' (als String)
operator: logische Vergleichsoperatoren: =, ^=, <, <=, >, >
option: NUPDAT
oder
NUR_SYNTAX
oder
NUR_SEMANTIK
oder
BESTAND
oder
NO_DELTA
oder
NULLAUSGABE
oder
DISPLAY_ZEIT
oder
PROTO_ZEIT
oder
LINE_SEQUENTIAL (nur PC)
regel: positive ganzzahlige Konstante 1, ..., 1999
oder
Char-Konstante der Länge 1, ..., 20
relative_zeitangabe:
BMnn mit 0 <= nn <= 99
selectangabe: AG = ag
oder
AG = ag, DATABASE = database
oder
AG = ag, LESART = DIREKT
oder
AG = ag, DATABASE = database,
LESART = DIREKT
selectbedingung:
filterangabe ( MENGENFUNKTION
nicht erlaubt! )
sortangabe: ( feldname3 ASC oder DESC,
...
...
...
feldname3 ASC oder DESC )
zeitangabe: LETZTE_VERSORGUNG
oder
LAUFENDES_JAHR
oder
VORJAHR
oder
LAUFENDER_MONAT
oder
VORMONAT
zielfeld: feldname_einfach
oder
feldname_einfach ( arbeitsfeldangabe )
zielfelder: ( feldname3 !! feldname3 !! ... !! feldname3 )
zuweisung: FORMEL ( im ASS-Sinne, nur für
numerische Felder
oder Zeitangaben )
Inhaltsverzeichnis
Stichwortverzeichnis
Folgende Mengenfunktionen stehen standardmäßig zur
Verfügung:
MENGENFUNKTION ( SUMME, feldname ) Summe der Einträge
unter feldname
( nur für numerische Felder )
MENGENFUNKTION ( MAX, feldname ) Maximum der Einträge
unter feldname
MENGENFUNKTION ( MIN, feldname ) Minimum der Einträge
unter feldname
MENGENFUNKTION ( ANZAHL ) Anzahl Sätze der
Arbeitsdatei "work3"
Inhaltsverzeichnis
Stichwortverzeichnis
Folgende Funktion steht standardmäßig zur Verfügung: FUNKTION ( ANZ-TAGE , feldname1, feldname2 ) Wenn feldname1 und feldname2 im Format DATE vorliegen, wird die Anzahl der Tage zwischen den Datumsangaben ermittelt. Das Resultat wird im Format BINAER in der Länge 4 bereitgestellt.
Inhaltsverzeichnis
Stichwortverzeichnis
--> ZIELAG = ag und ABLEITUNG = regel müssen immer angegeben werden.
Dabei ist ag eine gültige Arbeitsgebietsnummer oder -bezeichnung.
Hingegen können die Angaben MONATE_MAX = ..., OPTIONEN = ...,
BEZUGSMONAT = ..., ORDNUNGSBEGRIFF = ... und DATABASE = ...
entfallen.
--> Die Optionen bei OPTIONEN = ... müssen nicht alle angegeben
werden. Die Reihenfolge der Optionen spielt keine Rolle.
--> Wird die Option BESTAND angegeben, so muss auch
ORDNUNGSBEGRIFF = ... bzw. SORT ORDNUNGSBEGRIFF = ...
angegeben werden und umgekehrt. Beides ist nur für ASS-
Arbeitsgebiete zulässig und steuert die Erzeugung von
Gegenbuchungen für Bestandsarbeitsgebiete. Zusätzlich ist
die Angabe eines Hilfsfeldes BESTANDSSATZART erforderlich.
--> Die Arbeitsgebietsangabe AG = ... in Klammern hinter einem
Feldnamen kann entfallen und ist innerhalb des
Joinkriteriums bei Ziel- und Joinfeldern verboten. Die
Angabe von ASSZEIT = ... bzw ASSZEIT_TT = ... an gleicher
Stelle ist nur für ASS-Arbeitsgebiete als Input erlaubt.
--> In Select-Angaben sind bei Feldnamen nur die Angaben
AG = SELECT und AG = ZIEL zulässig, in Join-Angaben nur
AG = JOIN und AG = ZIEL.
--> Die WHERE-Klauseln bei SELECT, JOIN und im Joinkriterium
bei DUP sind optional.
--> Mengenfunktionen sind innerhalb der WHERE-Klauseln bei
SELECT und JOIN sowie bei LEERE_MENGE = ... und
LEERE_MENGE_ASSZEIT = ... bzw.
LEERE_MENGE_ASSZEIT_TT = ... nicht zulässig.
--> Im Joinkriterium dürfen die Sortangabe, LEERE_MENGE =
LOESCHEN und die WHERE-Klausel fehlen, DUP = ... jedoch
nicht. Die Anzahl der Duplikatsbedingungen ist auf 5
beschränkt. SORT ... und LAST ... in der
Duplikatsbedingung müssen immer paarweise auftreten, die
Bedingung darf fehlen.
--> Die Funktion SUBSTR ist nur auf CHARACTER- oder ASSZEIT-
Feldern erlaubt. Eine Schachtelung von SUBSTR ist nicht
möglich.
--> Für das Besetzen von Zielfeldern, genauer von Werte-
Feldern in ASS-Arbeitsgebieten gilt:
Die Angaben ASSZEIT = ..., LEERE_MENGE_ASSZEIT = ...
und LEERE_MENGE = ... sind optional.
Wird jedoch ASSZEIT = ... angegeben, so muss auch
LEERE_MENGE_ASSZEIT = ... angegeben werden und umgekehrt.
--> Die Angabe von KOMMASTELLEN ist nur bei FORMAT = PACKED
erlaubt.
--> NUM darf nur auf CHARACTER- oder ASSZEIT-Felder angewendet
werden, CHAR nur auf BINAER- oder PACKED-Felder.
--> Ein duplizierendes IF darf pro SELECT- bzw. JOIN-Block nur
einmal vorkommen. Innerhalb einer Angabe LEERE_MENGE = ...
ist ein derartiges IF nicht erlaubt.
--> Wird optional MONATE_MAX angegeben, so ist der VORMONAT von
01 (Januar) dieser Wert, sonst 12.
--> Mit Hilfe der Datei ASSDATE kann man das Bezugsdatum für
Zeitangaben festlegen. Dabei enthält ASSDATE das Datum in
der Form JJMM. Wird in ASSDATE kein Datum festgelegt, so
beziehen sich Zeitangaben immer auf das aktuelle Datum.
--> Die Angabe von BEZUGSMONAT ist optional. Diese Angabe
übersteuert sowohl das Maschinendatum als auch Angaben in
ASSDATE.
Inhaltsverzeichnis
A B C D E F G I J K L M N O P R S T U V W Z