Cómo manejar un caso de segmento no disponible

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.


Principio de página

Ejemplo: Cómo informar contra segmentos sin 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

Principio de página

Ejemplo: Cómo informar contra segmentos con casos descendientes

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.



x
Cómo incluir casos no disponibles en informes con el Prefijo

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.



Ejemplo: Cómo incluir casos de segmentos no disponibles con el prefijo ALL. Prefijo

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

Principio de página

x
Cómo incluir casos no disponibles en informes con el parámetro SET ALL

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.



x
Sintaxis: Cómo Incluir un caso principal con descendientes no disponibles
SET ALL= {OFF|ON|PASS}

donde:

OFF

Omite en el informe instancias principales con descendientes no disponibles. OFF es el valor predeterminado.

ON

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.

PASS

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).



Ejemplo: Cómo incluir casos de segmentos no disponibles con SET ALL

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:



x
Sintaxis: Cómo Controlar el procesamiento de ruta corta en un join externo izquierdo
SET SHORTPATH = {FOCUS|SQL}

donde:

FOCUS

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.

SQL

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).



x
Referencia: Notas de uso de SET SHORTPATH = SQL

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.



Ejemplo: Cómo controlar el procesamiento de joins externos

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


Ejemplo: Cómo buscar registros host que no tienen registros de referencia cruzada correspondientes

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

Principio de página

x
Cómo probar casos no disponibles en orígenes de datos de FOCUS

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.



Ejemplo: Cómo probar casos MISSING en un origen de datos de FOCUS

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