Vorgehensweise: Referenz: |
Die Temporärfelder, die Sie mit den DEFINE- und COMPUTE-Befehlen Define- und Compute-Formeln erstellen, sind abhängig von von einer bestimmten Masterdatei, und im Fall von Werten, die mit dem COMPUTE-Befehl der Compute-Formel berechnet werden, von einer bestimmten Anfrage. Sie können jedoch Temporärfelder erstellen, die weder von einer Masterdatei noch von einer Anfrage abhängig sind, indem Sie den Befehl DEFINE FUNCTION verwenden.
Eine DEFINE-Funktion ist eine benannte Gruppe von Berechnungen, die beliebig viele Eingabewerte verwenden und einen Rückgabewert erzeugen. Wenn Sie eine DEFINE-Funktion aufrufen, müssen Sie als Erstes die Funktion definieren.
Eine DEFINE-Funktion kann meistens in denselben Situationen aufgerufen werden, die für von Information Builders bereitgestellte Funktionen gültig sind. Datentypen werden mit jedem Argument definiert. Wenn Sie Werte für diese Argumente ersetzen, muss das Format mit dem definierten Format übereinstimmen. Alphanumerische Argumente, die kürzer sind als das angegebene Format, werden mit Leerstellen aufgefüllt, wohingegen längere alphanumerische Argumente abgeschnitten werden.
Alle Berechnungen innerhalb der Funktion werden in Doppelpräzision durchgeführt. Formatumwandlungen kommen nur über Gleichheitszeichen (=) hinweg vor in den Zuweisungen, die Temporärfelder definieren.
DEFINE FUNCTION name (argument1/format1,..., argumentn/formatn) [tempvariablea/formata [TITLE 'line1[,line2 ...'] [DESCRiption 'description'] = expressiona;] . . . [tempvariablex/formatx = expressionx;] name/format = [result_expression]; END
Hierbei gilt:
Ist der Name der Funktion, bis zu 64 Zeichen. Dies muss das letzte Feld sein, das in der Funktion berechnet wird, und es wird verwendet, um den Wert der Funktion an die aufrufende Prozedur zurückzugeben.
Sind die Argumentnamen. Dies können beliebige Namen sein, die WebFOCUS-Regeln für die Benennung von Feldern einhalten.
Sind die Formate der Funktionsargumente.
Wenn das Format eines Arguments alphanumerisch ist, muss der Argumentwert auch alphanumerisch sein. Kürzere Argumente werden auf der rechten Seite mit Leerzeichen aufgefüllt, und längere Argumente werden abgeschnitten.
Wenn das Format eines Arguments numerisch ist, muss der Argumentwert auch numerisch sein. Um unerwartete Ergebnisse zu verhindern, müssen Sie die Datentypen einheitlich verwenden.
Sind Temporärfelder. Temporärfelder enthalten zwischenzeitliche Werte, die in der Funktion verwendet werden. Sie können so viele Temporärfelder definieren wie nötig.
Sind die Formate der Temporärfelder.
Sind die Default-Spaltentitelzeilen, die für ein virtuelles Feld angezeigt werden sollen, es sei denn dies wird von einer AS-Phrase überschrieben.
Ist die Beschreibung, die mit dem virtuellen Feld assoziiert werden soll. Die Beschreibung wird in den Tools angezeigt, die Masterdateien durchsuchen.
Sind die Formeln, die die Temporärfeldwerte berechnen. Die Formeln können Paramter, Konstanten und andere Temporärfelder verwenden, die in derselben Funktion definiert sind.
Ist das Format des Werts, das die Funktion zurückgibt.
Ist die Formel, die den Wert berechnet, den die Funktion zurückgibt. Die Formel kannParamter, Konstanten und Temporärfelder verwenden, die in derselben Funktion definiert sind.
Alle Namen, die im Hauptteil der Funktion definiert sind, sind lokal für die Funktion. Das letzte Feld, das vor dem END-Befehl in der Funktionsdefinition definiert wird, muss denselben Namen haben wie die Funktion, und es stellt den Rückgabewert für die Funktion dar.
(FOC03665) Error loading external function '%1'
Das folgende Beispiel erstellt die SUBTRACT-Funktion und ruft sie auf. SUBTRACT führt eine Berechnung mit den Argumenten VAL1 und VAL2 durch.
DEFINE FUNCTION SUBTRACT (VAL1/D8, VAL2/D8) SUBTRACT/D8.2 = VAL1 - VAL2; END
TABLE FILE MOVIES PRINT TITLE LISTPR IN 35 WHOLESALEPR AND COMPUTE PROFIT/D8.2 = SUBTRACT(LISTPR,WHOLESALEPR); BY CATEGORY WHERE CATEGORY EQ 'MYSTERY' OR 'ACTION' END
Die Ausgabe ist:
CATEGORY | TITLE | LISTPR | WHOLESALEPR | PROFIT |
ACTION | JAWS | 19.95 | 10.99 | 8.96 |
ROBOCOP | 19.98 | 11.50 | 8.48 | |
TOTAL RECALL | 19.99 | 11.99 | 8.00 | |
TOP GUN | 14.95 | 9.99 | 4.96 | |
RAMBO III | 19.95 | 10.99 | 8.96 | |
MYSTERY | REAR WINDOW | 19.98 | 9.00 | 10.98 |
VERTIGO | 19.98 | 9.00 | 10.98 | |
FATAL ATTRACTION | 29.98 | 15.99 | 13.99 | |
NORTH BY NORTHWEST | 19.98 | 9.00 | 10.98 | |
DEAD RINGERS | 25.99 | 15.99 | 10.00 | |
MORNING AFTER, THE | 19.95 | 9.99 | 9.96 | |
PSYCHO | 19.98 | 9.00 | 10.98 | |
BIRDS, THE | 19.98 | 9.00 | 10.98 | |
SEA OF LOVE | 59.99 | 30.00 | 29.99 |
Geben Sie den folgenden Befehl in der Befehlskonsole aus:
? FUNCTION
Den Befehl ausgeben
? FUNCTION
zeigt Informationen in etwa so an:
FUNCTIONS | CURRENTLY | ACTIVE | |
NAME | FORMAT | PARAMETER | FORMAT |
---------- | --------- | --------- | ------- |
SUBTRACT | D8.2 | VAL1 | D8 |
VAL2 | D8 |
Wenn Sie den Befehl ? FUNCTION ausgeben, wenn keine Funktionen definiert sind, wird Folgendes angezeigt:
NO FUNCTIONS CURRENTLY IN EFFECT
DEFINE FUNCTION {name|*} CLEAR
Hierbei gilt:
WebFOCUS |