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.
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
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.
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.
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
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.
SET ALL= {OFF|ON|PASS}
où :
omet du rapport les instances de parents qui manquent de descendants. OFF est la valeur par défaut.
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.
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).
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 :
SET SHORTPATH = {FOCUS|SQL}
où :
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.
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).
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.
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
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
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.
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 |