Gestion d'une instance de segments manquante

Dans cette section :

Dans les sources de données à segments multiples où une instance dans un segment parent n'a pas de descendants, les instances de descendants inexistantes s'appellent des instances manquantes.

Lorsque vous créez une requête à partir d'une source de données qui a des instances de segments manquantes, les instances manquantes influent sur le rapport. Par exemple, si la requête cite des champs dans un segment et ses descendants, le rapport omet les instances de segments parent qui n'ont pas de descendants. Que les champs soient des champs d'affichage ou de tri n'a pas d'importance.

Lorsqu'une instance manque de descendants dans un segment enfant, l'instance, son parent, le parent du parent, et ainsi de suite jusqu'au segment racine, s'appelle un chemin court. Les segments uniques ne sont jamais considérés manquants.

Par exemple, considérez le sous-ensemble suivant de la source de données EMPLOYEE.

Supposons que quelques employés sont payés par une agence extérieure. Aucun de ces employés n'a une historique de salaire dans l'entreprise. Les instances faisant référence à ces employés dans l'historique de salaire sont manquantes.

Les instances de descendants manquantes déterminent si des instances de segments parent sont comprises dans les résultats du rapport. Le paramètre SET ALL et le préfixe ALL. vous permettent d'inclure des données de segments parent dans les rapports.

Pour voir des illustrations de l'impact des instances de segments manquants sur le reporting, consultez Reporting à partir de segments sans instances de descendants et Reporting à partir de segments avec des instances de descendants.


Haut de page

Exemple : Reporting à partir de segments sans instances de descendants

La requête suivante affiche les historiques de salaire de chaque employé.

TABLE FILE EMPLOYEE
PRINT SALARY
BY LAST_NAME BY FIRST_NAME
BY DAT_INC
END

Cependant, deux employés, Davis et Gardner, sont omis du rapport suivant parce que les champs LAST_NAME et FIRST_NAME appartiennent au segment racine, et les champs DAT_INC et SALARY appartiennent au segment de l'historique de salaire descendant. Comme Davis et Gardner n'ont pas d'instances de descendants dans le segment d'historique de salaires, ils sont omis du rapport.

La sortie est :

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

Haut de page

Exemple : Reporting à partir de segments avec des instances de descendants

La requête suivante affiche les codes de cours et les frais des employés dans les sources de données EMPDATA et TRAIN2. La sortie de rapport affiche tous les employés qui ont des instances dans les champs COURSECODE ou EXPENSES. Les employés qui manquent d'instances dans l'un des deux champs sont omis du rapport. Pour les employés qui ont des instances pour seulement l'un des champs, l'indicatif des données manquantes s'affiche dans la colonne respective. Dans cet exemple, Henry Chisolm a suivi deux cours mais n'a des frais que pour un des cours. Par conséquent, l'indicatif des instances manquantes s'affiche dans la colonne EXPENSES (Frais).

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 sortie est :

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

Remarque : la sortie de rapport a été tronquée pour la démonstration.



x
Inclusion d'instances manquantes dans les rapports avec le préfixe ALL. Préfixe

Si une requête omet des instances de segments parent qui manquent de descendants, vous pouvez inclure les instances parent en mettant le préfixe ALL. dans l'un des champs dans le segment parent.

Notez que si la requête contient des critères WHERE ou IF qui pré-sélectionnent des champs dans les segments qui ont des instances manquantes, le rapport omet les instances parents même lorsque vous utilisez le préfixe ALL. préfixe. Pour inclure ces instances, utilisez la commande SET ALL=PASS, qui est décrite dans Inclusion d'instances manquantes dans les rapports avec le paramètre SET ALL.



Exemple : Inclusion d'instances de segments manquants avec le préfixe ALL. Préfixe

La requête suivante affiche l'historique de salaire de chaque employé. Bien que les employés Elizabeth Davis et David Gardner n'aient pas d'historiques de salaire, ils sont compris dans le rapport.

TABLE FILE EMPLOYEE
PRINT SALARY
BY ALL.LAST_NAME BY FIRST_NAME
BY DAT_INC
END

La sortie est :

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

Haut de page

x
Inclusion d'instances manquantes dans les rapports avec le paramètre SET ALL

Comment :

Référence :

Vous pouvez inclure des instances de parents qui manquent de descendants en lançant le paramètre SET ALL avant d'exécuter la requête. Dans une jointure, le lancement de la commande SET ALL = ON contrôle le traitement de jointure externe gauche.

Remarque : une requête avec des critères WHERE ou IF, qui présélectionnent des champs dans un segment manquant d'instances, omet des instances dans le segment parent même si vous utilisez la commande SET ALL=ON. Pour inclure ces instances dans le rapport, utilisez la commande SET ALL=PASS.

Dans WebFOCUS, la commande SET ALL = ON ou JOIN LEFT_OUTER spécifie une jointure externe gauche. Avec une jointure externe gauche, tous les enregistrements du fichier hôte s'affichent dans la sortie du rapport. Si une instance de segments à référence croisée n'existe pas pour une instance de segments hôte, la sortie du rapport affiche les valeurs manquantes pour les champs du segment à référence croisée.

S'il y a une condition de présélection dans le segment dépendant, ces instances de segments dépendantes qui ne remplissent pas la condition de présélection sont omis de la sortie du rapport, de même que leurs instances de segments hôte correspondantes. Avec des instances de segments manquantes, les tests pour les valeurs manquantes échouent puisque les champs dans le segment n'ont pas été attribués de valeurs manquantes.

Lorsqu'un moteur relationnel effectue une jointure externe gauche, il traite les enregistrements d'hôte avec des instances manquantes de segment de réfrence croisée légèrement différemment de la façon dont WebFOCUS traite ces enregistrements lorsque les deux conditions suivantes sont remplies :

Lorsque ces deux conditions sont remplies, WebFOCUS omet l'enregistrement d'hôte de la sortie du rapport, alors que les moteurs relationnels fournissent des valeurs nulles pour les champs du segment dépendant, puis appliquent la condition de filtrage. Si les valeurs manquantes passent la condition de présélection, l'enregistrement entier est conservé dans la sortie du rapport. Ce type de traitement est utile pour trouver ou compter tous les enregistrements d'hôtes qui n'ont pas d'enregistrements correspondants dans le fichier à référence croisée ou pour créer une jointure basée DEFINE de segment à référence croisée avec l'instance manquante vers un autre segment dépendant.

Si vous souhaitez que WebFOCUS assigne les valeurs nulles aux champs dans une instance de segments manquante lorsqu'une jointure externe gauche est activée, vous pouvez lancer la commande SET SHORTPATH=SQL.



x
Syntaxe : Inclure une instance parent avec des descendants manquants
SET ALL= {OFF|ON|PASS}

où :

OFF

omet du rapport les instances de parents qui manquent de descendants. OFF est la valeur par défaut.

ON

inclut dans le rapport les instances de parents qui manquent de descendants. Cependant, si la recherche sur un segment manquant échoue, le parent sera omis de la sortie. ON est comparable au préfixe ALL. préfixe.

PASS

inclut des instances de parents qui manquent de descendants, même si des critères WHERE ou IF existent pour présélectionner des champs dans les segments descendants qui manquent de descendants (c'est-à-dire, un test sur les envois de segments manquants).



Exemple : Inclusion d'instances de segments manquantes avec le paramètre SET ALL

La requête suivante affiche tous les employés, qu'ils aient suivi un cours ou non, car la commande ALL=PASS est définie.

Si la commande ALL=ON avait été définie, les employés qui n'ont pas suivi de cours auraient été omis en raison des critères 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 sortie est :



x
Syntaxe : Contrôler le traitement de chemin court dans une jointure externe gauche
SET SHORTPATH = {FOCUS|SQL}

où :

FOCUS

Omet un segment hôte de la sortie de rapport lorsqu'il n'a pas de segment à référence croisée correspondant et le rapport a une condition de présélection dans le segment à référence croisée.

SQL

Fournit les valeurs manquantes pour les champs dans un segment à référence croisée manquant dans une jointure externe. Applique les conditions de présélection contre cet enregistrement et retient l'enregistrement dans la sortie de rapport s'il passe le test de présélection.

Remarque : il doit y avoir une jointure active, que ce soit à la suite de la commande SET ALL=ON ou d'une commande JOIN LEFT_OUTER (soit à l'intérieur ou à l'extérieur du fichier maître).



x
Référence : Notes d'utilisation pour SET SHORTPATH = SQL

Une source de données FOCUS est prise en charge comme le fichier hôte dans une jointure utilisée avec SET SHORTPATH = SQL, mais pas comme le fichier de référence.



Exemple : Contrôler le traitement de jointure externe

La procédure suivante crée deux tables Oracle, ORAEMP et ORAEDUC, qui sont utilisées dans une jointure.

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 requête suivante joint les deux tables Oracle et crée une jointure externe gauche (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

Puisque la jointure est une jointure externe, toutes les lignes ORAEMP s'affichent dans la sortie de rapport. Les lignes ORAEMP sans les lignes correspondantes ORAEDUC affichent le symbole de donnée manquant pour les champs de la table 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 requête suivante ajoute une condition de présélection dans le segment ORAEDUC. Pour remplir la condition de filtrage, le nom du cours doit soit contenir les caractères BASIC soit manquants.

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

Cependant, avec SET ALL = ON, les lignes avec des valeurs manquantes ne sont pas retenues dans la sortie de rapport.

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 requête suivante ajoute la commande 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 sortie du rapport affiche maintenant les enregistrements qui contiennent les caractères BASIC et ceux avec les valeurs manquantes.

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


Exemple : Rechercher les enregistrements d'hôtes qui n'ont pas d'enregistrement à référence croisée correspondant

La requête suivante compte et liste les employés qui n'ont pas pris de cours.

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 sortie est :

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

Haut de page

x
Test d'instances manquantes dans les sources de données FOCUS

Vous pouvez utiliser le paramètre ALL PASS afin de créer des rapports contenant uniquement les instances de parents qui manquent de valeurs de descendants. Pour ce faire, il faut écrire la requête de sorte à dépister toutes les instances existantes dans le segment avec les instances manquantes. Après avoir défini le paramètre ALL sur PASS, le rapport affiche uniquement les instances qui manquent de descendants.



Exemple : Test d'instances manquantes dans les sources de données FOCUS

La requête suivante effectue un test de toutes les instances manquantes dans le champ COURSECODE. Comme aucun cours ne peut égaler 'XXXX', seuls les employés qui manquent d'instances dans le champ COURSECODE s'affichent dans la sortie.

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 sortie est :

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