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.
DEFINE FUNCTION name (argument1/format1,..., argumentn/formatn) [tempvariablea/formata [TITLE 'line1[,line2 ...'] [DESCRiption 'description'] = expressiona;] . . . [tempvariablex/formatx = expressionx;] name/format = [result_expression]; END
où :
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.
Sont des noms d'arguments. Il peut s'agir de tout nom conforme aux règles de nommage de champs WebFOCUS.
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.
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.
Sont les formats des champs temporaires.
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.
Est la description à associer au champ virtuel. La description s'affiche dans les outils qui parcourent les fichiers maîtres.
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.
Est le format de la valeur retournée par la fonction.
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.
(FOC03665) Error loading external function '%1'
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 |
Lancez la commande suivante à partir de la console de commande :
? FUNCTION
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
DEFINE FUNCTION {name|*} CLEAR
où :
WebFOCUS |