Cómo crear campos temporales independientes respecto a un archivo máster

Cómo:

Referencia:

Los campos temporales creados con los comandos DEFINE y COMPUTE están ligados a un archivo máster específico y, en el caso de los valores calculados con el comando COMPUTE, a una solicitud específica. Sin embargo puede crear campos temporales que sean independientes de un archivo Máster o de una solicitud usando el comando DEFINE FUNCTION.

Una función DEFINE es un grupo nombrado de cálculos que utilizan cualquier número de valores de entrada y producen un valor de retorno. Al llamar una función DEFINE primero debe definir la función.

Una función DEFINE se puede llamar en la mayoría de las mismas situaciones que son válidas para funciones aportadas por Information Builders. Los tipos de datos se definen con cada argumento. Cuando sustituye valores de estos argumentos, el formato debe coincidir con el formato definido. Los argumentos alfanuméricos más cortos que el formato especificado se acomodan entre espacios en blanco, en tanto que los argumentos alfanuméricos se truncan.

Todos los cálculos dentro de la función se realizan con doble precisión. La conversión de datos sólo ocurre con signos de igualdad (=), en las asignaciones que definen campos temporales.


Principio de página

x
Sintaxis: Cómo Definir una función
DEFINE FUNCTION name (argument1/format1,..., argumentn/formatn)
[tempvariablea/formata [TITLE 'line1[,line2 ...']
 [DESCRiption 'description'] = expressiona;] 
   .
   .
   .
[tempvariablex/formatx = expressionx;]  
name/format = [result_expression];
END

donde:

name

Es el nombre de la función, de hasta 64 caracteres. Este debe ser el último campo calculado en la función y se utiliza para devolver el valor de la función al procedimiento de llamada.

argument1...argumentn

Son los nombres de los argumentos. Pueden ser cualquier campo, siempre que sean compatibles con las reglas de nomenclatura de campos WebFOCUS.

format1...formatn

Son los formatos de los argumentos de las funciones.

Si el formato de un argumento es alfanumérico, el valor del argumento debe ser también alfanumérico. Los argumentos más cortos se rellenan a la derecha con espacios en blanco, y los más largos resultan truncados.

Si el formato de un argumento es numérico, el valor del argumento debe ser también numérico. Para evitar que ocurran resultados inesperados debe ser consistente al usar los tipos de datos.

tempvariablea...tempvariablex

Son campos temporales. Los campos temporales contienen valores intermediarios usados en la función. Puede definir la cantidad de campos temporales que necesite.

tempformata...tempformatx

Son los formatos de los campos temporales.

line1,line2 ...

Son las líneas del título común predeterminado que aparecen para el campo virtual, a menos que se anulen mediante una frase AS.

description

Es la descripción que se va asociar al campo virtual. La descripción aparece en las herramientas encargadas de examinar los archivos máster.

expressiona...expressionx

Son las expresiones que calculan el valor de los campos temporales. Las expresiones pueden usar parámetros, constantes y otros campos temporales definidos en la misma función.

format

Es el formato del valor que devuelve la función.

result_expression

Es la expresión que calcula el valor obtenido por la función. Las expresiones pueden usar parámetros, constantes y campos temporales definidos en la misma función.

Todos los nombres definidos en la sección principal de la función son locales para la función. El último campo definido antes del comando END en la definición de función, debe tener el mismo nombre que la función y representa el valor de devolución para la función.


Principio de página

x
Referencia: Límites y restricciones de la función DEFINE


Ejemplo: Cómo definir una función

El siguiente ejemplo crea y llama a la función SUBTRACT. SUBTRACT realiza un cálculo con los argumentos VAL1 y 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 salida es:

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
Procedimiento: Cómo Mostrar funciones DEFINE

Emita el siguiente comando desde la consola de comandos:

? FUNCTION


Ejemplo: Cómo mostrar funciones DEFINE

Al emitir el comando

? FUNCTION

aparece información similar a ésta:

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

Si emite el comando ? FUNCTION cuando no hay funciones definidas, aparece lo siguiente:

NO FUNCTIONS CURRENTLY IN EFFECT


x
Sintaxis: Cómo Eliminar funciones DEFINE
DEFINE FUNCTION {name|*} CLEAR

donde:

name
Es el nombre de la función que se va a eliminar.
*
Elimina todas las funciones DEFINE activas.

WebFOCUS