Temporärfelder unabhängig von einer Masterdatei erstellen

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.


Nach oben

x
Syntax: Eine Funktion 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:

name

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.

argument1...argumentn

Sind die Argumentnamen. Dies können beliebige Namen sein, die WebFOCUS-Regeln für die Benennung von Feldern einhalten.

format1...formatn

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.

tempvariablea...tempvariablex

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.

tempformata...tempformatx

Sind die Formate der Temporärfelder.

line1, line2...

Sind die Default-Spaltentitelzeilen, die für ein virtuelles Feld angezeigt werden sollen, es sei denn dies wird von einer AS-Phrase überschrieben.

description

Ist die Beschreibung, die mit dem virtuellen Feld assoziiert werden soll. Die Beschreibung wird in den Tools angezeigt, die Masterdateien durchsuchen.

expressiona...expressionx

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.

Format

Ist das Format des Werts, das die Funktion zurückgibt.

result_expression

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.


Nach oben

x
Referenz: Limits und Beschränkungen für die DEFINE-Funktion


Beispiel: Eine Funktion definieren

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


x
Vorgehensweise: DEFINE-Funktionen anzeigen

Geben Sie den folgenden Befehl in der Befehlskonsole aus:

? FUNCTION


Beispiel: DEFINE-Funktionen anzeigen

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


x
Syntax: DEFINE-Funktionen löschen
DEFINE FUNCTION {name|*} CLEAR

Hierbei gilt:

name
Ist der Name der Funktion, die gelöscht werden soll.
*
Löscht alle aktiven DEFINE-Funktionen.

WebFOCUS