En esta sección: |
En orígenes de datos de múltiples segmentos, cuando un caso en un segmento principal no tiene casos descendientes, a los casos de descendientes inexistentes se les llama casos no disponibles.
Cuando escribe una solicitud desde un origen de datos que tiene casos de segmentos no disponibles, los casos no disponibles afectan al informe. Por ejemplo, si la solicitud identifica campos en un segmento y sus descendientes, el informe omite los casos del segmento principal que carece de descendientes. No importa que los campos sean campos de visualización o de clasificación.
Cuando a un campo le faltan descendientes en un segmento secundario, al caso, a su principal, al principal de su principal y así sucesivamente hasta el segmento raíz, se les llama ruta corta. Los segmentos únicos nunca se consideran no disponibles.
Por ejemplo, tomemos en consideración el siguiente subconjunto del origen de datos EMPLOYEE.
Supongamos que a algunos empleados les paga una agencia externa. Ninguno de estos empleados tiene un historial salarial en la empresa. Faltan los casos que se refieren a estos empleados en el segmento de historial salarial.
Los casos de descendientes inexistentes determinan la presencia de casos de segmentos principales en los resultados del informe. El parámetro SET ALL y el prefijo ALL. le permiten incluir datos de segmento principal en los informes.
Para ver un ejemplo de cómo afectan los casos de segmentos no disponibles a la creación de informes, consulte Cómo informar contra segmentos sin casos descendientes y Cómo informar contra segmentos con casos descendientes.
La siguiente solicitud muestra los historiales salariales de cada empleado.
TABLE FILE EMPLOYEE PRINT SALARY BY LAST_NAME BY FIRST_NAME BY DAT_INC END
Ahora bien, se ha omitido a dos empleados, Davis y Gardner, del siguiente informe porque los campos LAST_NAME y FIRST_NAME pertenecen al segmento raíz y los campos DAT_INC y SALARY pertenecen al segmento descendiente de historial salarial. Dado que Davis y Gardner no tienen casos descendientes en el segmento de historial salarial, han sido omitidos en el informe.
La salida es:
LAST_NAME FIRST_NAME DAT_INC SALARY --------- ---------- ------- ------ BANNING JOHN 82/08/01 $29,700.00 BLACKWOOD ROSEMARIE 82/04/01 $21,780.00 CROSS BARBARA 81/11/02 $25,775.00 82/04/09 $27,062.00 GREENSPAN MARY 82/04/01 $8,650.00 82/06/11 $9,000.00 IRVING JOAN 82/01/04 $24,420.00 82/05/14 $26,862.00 JONES DIANE 82/05/01 $17,750.00 82/06/01 $18,480.00 MCCOY JOHN 82/01/01 $18,480.00 MCKNIGHT ROGER 82/02/02 $15,000.00 82/05/14 $16,100.00 ROMANS ANTHONY 82/07/01 $21,120.00 SMITH MARY 82/01/01 $13,200.00 RICHARD 82/01/04 $9,050.00 82/05/14 $9,500.00 STEVENS ALFRED 81/01/01 $10,000.00 82/01/01 $11,000.00
La siguiente solicitud muestra los códigos de curso y los gastos de empleados en los orígenes de datos EMPDATA y TRAIN2. La salida de informe muestra a todos los empleados que tienen casos en los campos COURSECODE o EXPENSES. Los empleados que representan casos no disponibles de cualquiera de estos casos se omiten en el informe. Para los empleados que tengan casos que correspondan a sólo uno de los campos, el elemento que designa los datos no disponibles aparece en la respectiva columna. En este ejemplo, Henry Chisolm ha tomado dos cursos pero sólo aparecen los gastos de uno. Por lo tanto, el elemento que designa los casos no disponibles aparece en la columna EXPENSES.
JOIN EMPDATA.PIN IN EMPDATA TO ALL TRAINING.PIN IN TRAIN2 AS JOIN1 TABLE FILE EMPDATA PRINT LASTNAME AND FIRSTNAME AND COURSECODE AND EXPENSES BY PIN END
La salida es:
PIN | LASTNAME | FIRSTNAME | COURSECODE | EXPENSES |
000000010 | VALINO | DANIEL | PDR740 | 2,300.00 |
000000030 | CASSANOVA | LOIS | NAMA730 | 2,600.00 |
CASSANOVA | LOIS | EDP090 | 2,300.00 | |
. . . | ||||
000000350 | FERNSTEIN | ERWIN | SSI220 | 1,850.00 |
FERNSTEIN | ERWIN | MC90 | 1,730.00 | |
FERNSTEIN | ERWIN | UMI720 | 3,350.00 | |
000000360 | CHISOLM | HENRY | EDP090 | .00 |
CHISOLM | HENRY | EDP690 | 3,000.00 | |
000000370 | WANG | JOHN | UMI710 | 2,050.00 |
000000380 | ELLNER | DAVID | EDP090 | . |
ELLNER | DAVID | UNI780 | 3,350.00 | |
000000410 | CONTI | MARSHALL | EDP690 | 3,100.00 |
Nota: La salida de informe ha sido truncada para fines de demostración.
Si una solicitud excluye casos de segmentos principales que carecen de descendientes, se incluyen los casos de principales adjuntando el prefijo ALL. a uno de los campos en el segmento principal.
Tenga en cuenta que si la solicitud contiene criterios WHERE o IF que filtran campos en segmentos con casos no disponibles, el informe omite casos principales aunque utilice el prefijo ALL. prefijo. Para incluir esos casos, use el comando SET ALL=PASS que se describe en Cómo incluir casos no disponibles en informes con el parámetro SET ALL.
La siguiente solicitud muestra el historial salarial de cada empleado. Aunque los empleados Elizabeth Davis y David Gardner no tienen historiales salariales, están incluidos en el informe.
TABLE FILE EMPLOYEE PRINT SALARY BY ALL.LAST_NAME BY FIRST_NAME BY DAT_INC END
La salida es:
LAST_NAME FIRST_NAME DAT_INC SALARY --------- ---------- ------- ------ BANNING JOHN 82/08/01 $29,700.00 BLACKWOOD ROSEMARIE 82/04/01 $21,780.00 CROSS BARBARA 81/11/02 $25,775.00 82/04/09 $27,062.00 DAVIS ELIZABETH . . GARDNER DAVID . . GREENSPAN MARY 82/04/01 $8,650.00 82/06/11 $9,000.00 IRVING JOAN 82/01/04 $24,420.00 82/05/14 $26,862.00 JONES DIANE 82/05/01 $17,750.00 82/06/01 $18,480.00 MCCOY JOHN 82/01/01 $18,480.00 MCKNIGHT ROGER 82/02/02 $15,000.00 82/05/14 $16,100.00 ROMANS ANTHONY 82/07/01 $21,120.00 SMITH MARY 82/01/01 $13,200.00 RICHARD 82/01/04 $9,050.00 82/05/14 $9,500.00 STEVENS ALFRED 81/01/01 $10,000.00 82/01/01 $11,000.00
Cómo:
Referencia: |
Puede controlar el modo en que se procesan los casos de elementos principales a los que les faltan descendientes, mediante la emisión del comando SET ALL antes de ejecutar la solicitud. En un join, el comando SET ALL = ON le permite controlar el procesamiento de los joins externos izquierdos.
Nota: Una solicitud con criterios WHERE o IF, que filtra campos en un segmento que tiene casos no disponibles, omite casos en el segmento principal aunque utilice el comando SET ALL=ON. Para incluir estos casos en el informe, utilice el comando SET ALL=PASS.
En Web, el comando SET ALL = ON o JOIN LEFT_OUTER especifica un join externo izquierdo. Con un join externo izquierdo, todos los registros del archivo de host aparecen en la salida del informe. Si no existe un caso de segmento de referencia cruzada para el caso de segmento de host correspondiente, la salida del informe muestra los valores no disponibles para los campos del segmento de referencia cruzada.
Si hay una condición de filtraje en el segmento dependiente, los casos de segmento dependiente que no cumplan dicha condición quedan omitidos de la salida del informe, al igual que sus correspondientes casos de segmento de host. Cuando faltan casos de segmentos, las pruebas de valores no disponibles fallan ya que los campos del segmento no cuentan con valores no disponibles asignados.
Cuando un motor relacional establece un join externo izquierdo, procesa los registros de host con casos de segmento de referencia cruzada no disponibles de modo un ligeramente diferente a cómo los procesa WebFOCUS, cuando se aplican las dos siguientes condiciones:
Cuando estas dos condiciones son verdaderas, WebFOCUS omite el registro de host de la salida del informe, mientras que los motores relacionales proporcionan los valores nulos para los campos del segmento dependiente y después, aplican la condición de filtraje. Si los valores no disponibles cumplen con la condición de filtraje, se retiene el registro completo en la salida del informe. Este tipo de procesamiento es útil a la hora de encontrar o contar todos los registros host que no cuentan con registros correspondientes en el archivo de referencia cruzada o crear joins basados en DEFINE, desde el segmento de referencia cruzada con el segmento no disponible hasta otro segmento dependiente.
Si desea que WebFOCUS asigne valores nulos a los campos de un caso de segmento no disponible, con un join externo izquierdo en vigor, puede emitir el comando SET SHORTPATH=SQL.
SET ALL= {OFF|ON|PASS}
donde:
Omite en el informe instancias principales con descendientes no disponibles. OFF es el valor predeterminado.
Incluye en el informe casos de principales que son descendientes no disponibles. Ahora bien, si la prueba sobre un segmento no disponible falla, el principal queda omitido en la salida. Es comparable con el prefijo ALL. prefijo.
Incluye casos de principales que son descendientes no disponibles aunque no existan criterios WHERE o IF para filtrar los campos en los segmentos descendientes que son casos no disponibles (es decir, pasa una prueba de segmento no disponible).
La siguiente solicitud muestra a todos los empleados, independientemente de que hayan tomado el curso, pues se ha ajustado el comando ALL=PASS.
Si se hubiera utilizado el comando ALL=ON, se habrían omitido los empleados que no han tomado cursos, a causa de los criterios WHERE.
JOIN EMPDATA.PIN IN EMPDATA TO ALL TRAINING.PIN IN TRAIN2 AS JOIN1
SET ALL = PASS
TABLE FILE EMPDATA
PRINT LASTNAME AND FIRSTNAME AND COURSECODE AND EXPENSES
BY PIN
WHERE EXPENSES GT 3000
END
La salida es:
SET SHORTPATH = {FOCUS|SQL}
donde:
Omite un segmento de host de la salida del informe, cuando no hay un segmento de referencia cruzada correspondiente y el informe contiene una condición de filtraje en el segmento de referencia cruzada.
Proporciona valores no disponibles para los campos en un segmento de referencia cruzada, no disponible, en un join externo izquierdo. Aplica las condiciones de filtraje en base a este registro y lo retiene en la salida del informe, siempre que supere la prueba de filtraje.
Nota: Debe haber un join externo establecido como resultado del comando SET ALL=ON o LEFT_OUTER (dentro o fuera del archivo máster).
Se admiten los orígenes de datos FOCUS como archivos host en los joins con SET SHORTPATH = SQL, pero no como archivos de referencia cruzada.
El siguiente procedimiento crea dos tablas Oracle, ORAEMP y ORAEDUC, que van a utilizarse en un join.
TABLE FILE EMPLOYEE SUM LAST_NAME FIRST_NAME CURR_SAL CURR_JOBCODE DEPARTMENT BY EMP_ID ON TABLE HOLD AS ORAEMP FORMAT SQLORA END -RUN TABLE FILE EDUCFILE SUM COURSE_CODE COURSE_NAME BY EMP_ID BY DATE_ATTEND ON TABLE HOLD AS ORAEDUC FORMAT SQLORA END
La siguiente solicitud establece un join entre dos tablas de Oracle y crea un join externo izquierdo (SET ALL = ON).
JOIN EMP_ID IN ORAEMP TO ALL EMP_ID IN ORAEDUC AS J1 SET ALL = ON TABLE FILE ORAEMP PRINT COURSE_CODE COURSE_NAME BY EMP_ID END
Puesto que el join es de tipo externo, aparecen todas las filas ORAEMP en la salida del informe. Las filas ORAEMP que no tengan la fila ORAEDUC correspondiente muestran el símbolo de datos no disponibles para los campos de la tabla ORAEDUC.
EMP_ID COURSE_CODE COURSE_NAME ------ ----------- ----------- 071382660 101 FILE DESCRPT & MAINT 112847612 101 FILE DESCRPT & MAINT 103 BASIC REPORT PREP FOR PROG 117593129 101 FILE DESCRPT & MAINT 103 BASIC REPORT PREP FOR PROG 201 ADVANCED TECHNIQUES 203 FOCUS INTERNALS 119265415 108 BASIC RPT NON-DP MGRS 119329144 . . 123764317 . . 126724188 . . 219984371 . . 326179357 104 FILE DESC & MAINT NON-PROG 106 TIMESHARING WORKSHOP 102 BASIC REPORT PREP NON-PROG 301 DECISION SUPPORT WORKSHOP 202 WHAT'S NEW IN FOCUS 451123478 101 FILE DESCRPT & MAINT 543729165 . . 818692173 107 BASIC REPORT PREP DP MGRS
La siguiente solicitud añade una condición de filtraje al segmento ORAEDUC. Para cumplir con la condición de filtraje, el número de curso debe contener los caracteres BASIC o no estar disponible.
JOIN CLEAR JOIN EMP_ID IN ORAEMP TO ALL EMP_ID IN ORAEDUC AS J1 SET ALL = ON TABLE FILE ORAEMP PRINT COURSE_CODE COURSE_NAME BY EMP_ID WHERE COURSE_NAME CONTAINS 'BASIC' OR COURSE_NAME IS MISSING END
Sin embargo, con SET ALL = ON, la salida del informe no retiene las filas con valores no disponibles.
EMP_ID COURSE_CODE COURSE_NAME ------ ----------- ----------- 112847612 103 BASIC REPORT PREP FOR PROG 117593129 103 BASIC REPORT PREP FOR PROG 119265415 108 BASIC RPT NON-DP MGRS 326179357 102 BASIC REPORT PREP NON-PROG 818692173 107 BASIC REPORT PREP DP MGRS
La siguiente solicitud añade el comando SET SHORTPATH = SQL.
JOIN CLEAR JOIN EMP_ID IN ORAEMP TO ALL EMP_ID IN ORAEDUC AS J1 SET ALL = ON SET SHORTPATH=SQL TABLE FILE ORAEMP PRINT COURSE_CODE COURSE_NAME BY EMP_ID WHERE COURSE_NAME CONTAINS 'BASIC' OR COURSE_NAME IS MISSING END
La salida del informe ahora muestra los registros que contienen los caracteres BASIC y los que les faltan valores.
EMP_ID COURSE_CODE COURSE_NAME ------ ----------- ----------- 112847612 103 BASIC REPORT PREP FOR PROG 117593129 103 BASIC REPORT PREP FOR PROG 119265415 108 BASIC RPT NON-DP MGRS 119329144 . . 123764317 . . 126724188 . . 219984371 . . 326179357 102 BASIC REPORT PREP NON-PROG 543729165 . . 818692173 107 BASIC REPORT PREP DP MGRS
La siguiente solicitud cuenta y lista los empleados que no han seguido ningún curso.
JOIN LEFT_OUTER EMP_ID IN ORAEMP TO ALL EMP_ID IN ORAEDUC AS J1 SET ALL = ON SET SHORTPATH=SQL TABLE FILE ORAEMP COUNT EMP_ID LIST EMP_ID LAST_NAME FIRST_NAME WHERE COURSE_NAME IS MISSING END
La salida es:
EMP_ID COUNT LIST EMP_ID LAST_NAME FIRST_NAME ------ ---- ------ --------- ---------- 5 1 119329144 BANNING JOHN 2 123764317 IRVING JOAN 3 126724188 ROMANS ANTHONY 4 219984371 MCCOY JOHN 5 543729165 GREENSPAN MARY
Puede utilizar el parámetro ALL PASS para producir informes que incluyan solamente casos de principales con valores de descendiente no disponibles. Para lograr esto, introduzca la solicitud para filtrar todos los casos existentes en el segmento con casos no disponibles. Después de ajustrar el parámetro ALL en PASS, el informe muestra solamente los casos de principales que son descendientes no disponibles.
La siguiente solicitud prueba casos no disponibles en el campo COURSECODE. Como ningún COURSECODE puede ser igual a 'XXXX', solamente aparecen en la salida de informe los empleados con campos no disponibles en COURSECODE.
JOIN EMPDATA.PIN IN EMPDATA TO ALL TRAINING.PIN IN TRAIN2 AS JOIN1 SET ALL = PASS TABLE FILE EMPDATA PRINT LASTNAME AND FIRSTNAME AND COURSECODE AND EXPENSES BY PIN WHERE COURSECODE EQ 'XXXX' END
La salida es:
PIN | LASTNAME | FIRSTNAME | COURSECODE | EXPENSES |
000000020 | BELLA | MICHAEL | . | . |
000000060 | PATEL | DORINA | . | . |
000000070 | SANCHEZ | EVELYN | . | . |
000000090 | PULASKI | MARIANNE | . | . |
000000130 | CVEK | MARCUS | . | . |
000000170 | MORAN | WILLIAM | . | . |
000000220 | LEWIS | CASSANDRA | . | . |
000000230 | NOZAWA | JIM | . | . |
000000300 | SOPENA | BEN | . | . |
000000390 | GRAFF | ELAINE | . | . |
000000400 | LOPEZ | ANNE | . | . |
WebFOCUS |