Fichier maître : création de champs temporaires indépendants

Comment :

Référence :

Tous les champs temporaires que vous créez avec les commandes DEFINE et COMPUTEsont liés à un fichier Master particulier, et dans le cas d'une valeur calculée par la Commande COMPUTE, à une requête précise.. Toutefois, grâce à la commande DEFINE FUNCTION, vous pouvez créer des champs temporaires indépendants de tout fichier Master et de toute requête.

On appelle fonction DEFINE» tout groupe de calculs qui utilise un certain nombre de valeurs d'entrée pour produire une valeur renvoyée. Pour appeler une fonction DEFINE, vous devez tout d'abord définir la fonction.

Une fonction DEFINE peut être appelée dans la plupart des cas d'utilisation de fonctions fournies par Information Builders. Les types de données sont définis pour chaque argument. Lors de la substitution de valeurs dans ces arguments, le format d'une valeur donnée doit correspondre au format défini. Des espaces sont utilisés pour remplir les arguments alphanumériques qui sont plus courts que le format indiqué ; ceux qui sont plus longs sont tronqués.

Tous les calculs dans la fonction sont effectués en double précision. Les conversions de format ne sont réalisées qu'à travers des signes égal (=) dans les affectations définissant des champs temporaires.


Haut de page

x
Syntaxe : Définir une fonction
DEFINE FUNCTION name (argument1/format1,..., argumentn/formatn)
[tempvariablea/formata [TITLE 'line1[,line2 ...']
 [DESCRiption 'description'] = expressiona;] 
   .
   .
   .
[tempvariablex/formatx = expressionx;]  
name/format = [result_expression];
END

où :

name

Indique le nom de la fonction, qui peut compter jusqu'à 64 caractères. Il doit être le dernier champ calculé dans la fonction ; il est utilisé pour renvoyer la valeur de la fonction à la procédure d'appel.

argument1...argumentn

Sont des noms d'arguments. Il peut s'agir de tout nom conforme aux règles de nommage de champs WebFOCUS.

format1...formatn

Sont les formats des arguments de fonction.

Si le format d'un argument est alphanumérique, sa valeur doit l'être aussi. Des espaces servent de remplissage dans les arguments plus courts, alors que les arguments plus longs sont tronqués.

Si le format d'un argument est numrique, sa valeur doit l'être aussi. Pour éviter des résultats inattendus, une utilisation cohérente des types de données s'impose.

tempvariablea...tempvariablex

Ce sont des champs temporaires. Les champs temporaires contiennent des valeurs intermédiaires utilisées dans une fonction. Vous pouvez définir autant de champs temporaires qu'il vous faut.

tempformata...tempformatx

Sont les formats des champs temporaires.

line1,line2 ...

Sont les lignes de titre de colonne par défaut à afficher pour le champ virtuel à moins qu'elles ne soient remplacées par une phrase AS.

description

Est la description à associer au champ virtuel. La description s'affiche dans les outils qui parcourent les fichiers maîtres.

expressiona...expressionx

Ce sont des expressions qui calculent les valeurs des champs temporaires. Ces expressions peuvent utiliser des paramètres, des constantes et d'autres champs temporaires définis dans la même fonction.

format

Est le format de la valeur retournée par la fonction.

result_expression

C'est l'expression qui calcule la valeur renvoyée par la fonction. Cette expression peut utiliser des paramètres, des constantes et d'autres champs temporaires définis dans la même fonction.

Tous les noms définis dans le corps de la fonction sont locaux pour celle-ci. Le dernier champ défini avant la commande END dans la définition de la fonction doit avoir le même nom que la fonction ; il représente la valeur renvoyée de la fonction.


Haut de page

x
Référence : Limites et restrictions de la fonction DEFINE


Exemple : Définition d’une fonction

L'exemple suivant crée et appelle la fonction SUBTRACT. SUBTRACT effectue un calcul à l'aide des arguments VAL1 et VAL2.

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

La sortie est :

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
Comment : Afficher les fonctions DEFINE

Lancez la commande suivante à partir de la console de commande :

? FUNCTION


Exemple : Affichage des fonctions DEFINE

Lancement de la commande

? FUNCTION

affiche des informations semblables à celles-ci :

FUNCTIONS
CURRENTLY 
ACTIVE
NAME
FORMAT
PARAMETER
FORMAT
----------
---------
---------
-------
SUBTRACT
D8.2
VAL1
D8
VAL2
D8

Si vous lancez la ? commande FUNCTION lorsqu'il n'y a pas de fonction définie, vous verrez ceci

NO FUNCTIONS CURRENTLY IN EFFECT


x
Syntaxe : Effacer les fonctions DEFINE
DEFINE FUNCTION {name|*} CLEAR

où :

name
Est le nom de la fonction à effacer.
*
Efface toutes les fonctions DEFINE actives.

WebFOCUS