In diesem Abschnitt: |
Wenn in einer Datenquelle mit mehreren Segmenten eine Instanz in einem übergeordneten Segment keine untergeordneten Instanzen besitzt, werden die nicht vorhandenen untergeordneten Instanzen als fehlende Instanzen bezeichnet.
Wenn Sie eine Anfrage für eine Datenquelle schreiben, in der fehlende Segmentinstanzen vorhanden sind, wirken sich die fehlenden Instanzen auf den Report aus. Wenn die Anfrage z. B. Felder in einem Segment und dessen untergeordnete Segmente benennt, lässt der Report übergeordnete Segmentinstanzen weg, die keine untergeordneten Segmente besitzen. Es spielt dabei keine Rolle, ob die Felder Anzeigefelder oder Sortierfelder sind.
Wenn einer Instanz in einem untergeordneten Segment keine Segmente untergeordnet sind, wird die Instanz, dessen übergeordnete Instanz und alle Instanzen darüber bis hin zum Rootsegment als Kurzpfad bezeichnet. Eindeutige Segmente werden nie als fehlend betrachtet.
Betrachten Sie z. B. die folgende Teilmenge der Datenquelle EMPLOYEE.
Nehmen wir an, dass einige Angestellte von einer Agentur außer Haus bezahlt werden. Für keinen dieser Angestellten liegt eine Gehaltsentwicklung vor. Es fehlen Instanzen, die auf diese Angestellten im Segment Gehaltsentwicklung verweisen.
Nicht vorhandene untergeordnete Instanzen wirken sich darauf aus, ob übergeordnete Segmentinstanzen in Reportergebnisse aufgenommen werden. Der Parameter SET ALL und das Präfix ALL. ermöglichen es Ihnen, Daten aus übergeordneten Segmenten in Reports aufzunehmen.
Eine Abbildung, in der gezeigt wird, wie sich fehlende Segmentinstanzen auf Reports auswirken, finden Sie unter Reports mit Segmenten ohne untergeordnete Instanzen erstellen und Reports mit Segmenten mit untergeordneten Instanzen erstellen.
Die folgende Anfrage zeigt die Gehaltsentwicklungen der einzelnen Angestellten an.
TABLE FILE EMPLOYEE PRINT SALARY BY LAST_NAME BY FIRST_NAME BY DAT_INC END
Zwei Angestellte (Davis und Gardner) werden im folgenden Report jedoch weggelassen, da die Felder LAST_NAME und FIRST_NAME zum Rootsegment und die Felder DAT_INC und SALARY zum untergeordneten Segment Gehaltsentwicklung gehören. Da Davis und Gardner keine untergeordneten Instanzen im Segment Gehaltsentwicklung besitzen, werden sie im Report weggelassen.
Die Ausgabe ist:
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
Die folgende Anfrage zeigt die Kurscodes und Ausgaben für Angestellte in den Datenquellen EMPDATA und TRAIN 2 an. Die Reportausgabe zeigt alle Angestellten an, für die Instanzen in den Feldern COURSECODES oder EXPENSES vorhanden sind. Angestellte, für die in keinem dieser Felder eine Instanz vorliegt, werden im Report weggelassen. Für Angestellte, die nur in einem der Felder Instanzen besitzen, wird in der entsprechenden Spalte der Kennzeichner für fehlende Daten angezeigt. Henry Chisolm hat in diesem Beispiel zwei Kurse besucht, hat aber nur für einen Ausgaben. Daher wird der Kennzeichner für fehlende Instanzen in der Spalte EXPENSES angezeigt.
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
Die Ausgabe ist:
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 |
Hinweis: Die Reportausgabe wurde zur Veranschaulichung gekürzt.
Wenn eine Anfrage übergeordnete Segmentinstanzen ausschließt, die keine untergeordneten Segmente besitzen, können Sie die übergeordneten Instanzen aufnehmen, indem Sie einem der Felder im übergeordneten Segment das Präfix ALL. beifügen.
Beachten Sie, dass der Report selbst unter Verwendung des Präfix ALL. übergeordnete Instanzen weglässt, wenn die Anfrage WHERE- oder IF-Kriterien besitzt, die Felder in Segmenten mit fehlenden Instanzen prüfen. Verwenden Sie, um diese Instanzen aufzunehmen, den Befehl SET ALL=PASS, der in Mit dem Parameter SET ALL fehlende Instanzen in Reports aufnehmen beschrieben wird.
Die folgende Anfrage zeigt die Gehaltsentwicklung jedes einzelnen Angestellten an. Obwohl für die Angestellten Elizabeth Davis und David Gardner keine Gehaltsentwicklungen vorliegen, werden Sie in den Report aufgenommen.
TABLE FILE EMPLOYEE PRINT SALARY BY ALL.LAST_NAME BY FIRST_NAME BY DAT_INC END
Die Ausgabe ist:
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
Vorgehensweise:
Referenz: |
Sie können steuern, wie übergeordnete Instanzen mit fehlenden untergeordneten Segmenten verarbeitet werden, indem Sie den Befehl SET ALL ausgeben, bevor Sie die Anfrage ausführen. Die Ausgabe des Befehls SET ALL = ON in einem Join steuert die Verarbeitung des linken äußeren Joins.
Hinweis: Eine Anfrage mit WHERE- oder IF-Kriterien, die Felder in einem Segment prüfen, das fehlende Instanzen besitzt, lässt Instanzen im übergeordneten Segment weg, selbst wenn Sie den Befehl SET ALL=ON verwenden. Verwenden Sie, um diese Instanzen in den Report aufzunehmen, den Befehl SET ALL=PASS.
In WebFOCUS gibt der Befehl SET ALL = ON oder JOIN LEFT_OUTER einen linken äußeren Join an. Bei einem linken äußeren Join werden alle Datensätze aus der Hostdatei in der Reportausgabe angezeigt. Falls für ein Hostsegment keine querverwiesene Segmentinstanz vorhanden ist, zeigt die Reportausgabe fehlende Werte für die Felder aus dem querverwiesenen Segment an.
Wenn für das abhängige Segment eine Prüfbedingung vorhanden ist, werden die abhängigen Segmentinstanzen, die die Prüfbedingung nicht erfüllen, in der Reportausgabe weggelassen, gemeinsam mit den zugehörigen Host-Segmentinstanzen. Mit fehlenden Segmentinstanzen scheitern Tests für fehlende Werte, da den Feldern im Segment keine fehlenden Werte zugewiesen wurden.
Wenn eine relationale Engine einen linken äußeren Join durchführt, werden Host-Datensätze mit fehlenden querverwiesenen Segmentinstanzen etwas anders verarbeitet, als WebFOCUS diese Datensätze verarbeitet, wenn beider der folgenden Bedingungen zutreffen:
Wenn diese zwei Bedingungen true sind, lässt WebFOCUS den Host-Datensatz in der Reportausgabe weg, während relationale Engines Nullwerte für die Felder aus dem abhängigen Segment angeben und dann die Prüfbedingung anwenden. Wenn die fehlenden Werte die Prüfbedingung erfüllen, ist der gesamte Datensatz in der Reportausgabe enthalten. Dieser Verarbeitungstyp eignet sich, wenn Sie alle Host-Datensätze finden oder zählen möchten, die keine entsprechenden Datensätze in der querverwiesenen Datei haben, oder wenn Sie einen DEFINE-basierten Join erstellen möchten, vom querverwiesenen Segment mit der fehlenden Instanz zu einem anderen abhängigen Segment.
Wenn Sie möchten, dass WebFOCUS den Feldern in einer fehlenden Segmentinstanz Nullwerte zuweist, wenn ein linker äußerer Join wirksam ist, können Sie den Befehl SET SHORTPATH=SQL ausgeben.
SET ALL= {OFF|ON|PASS}
Hierbei gilt:
Lässt übergeordnete Instanzen im Report weg, denen untergeordnete Segmente fehlen. OFF ist der Defaultwert.
Nimmt übergeordnete Instanzen in den Report auf, denen untergeordnete Segmente im Report fehlen. Falls jedoch ein Test für ein fehlendes Segment fehlschlägt, führt dies dazu, dass das übergeordnete Segment im Report weggelassen wird. Dies ist mit dem ALL.-Präfix vergleichbar.
Nimmt übergeordnete Instanzen auf, denen untergeordnete Segmente fehlen, selbst wenn WEHRE- oder IF-Kriterien vorhanden sind, mit denen Felder in den untergeordneten Segmenten, denen Instanzen fehlen, getestet werden (d.h. die Testbedingung für ein fehlendes Segment wird erfüllt).
Die folgende Anfrage zeigt alle Angestellten an, unabhängig davon, ob sie Kurse besucht haben, da der Befehl ALL=PASS ausgegeben wurde.
Wenn der Befehl ALL=ON verwendet worden wäre, wären Angestellte, die keine Kurse besucht haben, aufgrund der WHERE-Kriterien weggelassen worden.
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
Die Ausgabe ist:
SET SHORTPATH = {FOCUS|SQL}
Hierbei gilt:
Lässt ein Hostsegment in der Reportausgabe weg, wenn es kein entsprechendes querverwiesenes Segment gibt, und der Report eine Prüfbedingung für das querverwiesene Segment hat.
Gibt fehlende Werte für die Felder in einem fehlenden querverwiesenen Segment in einem äußeren Join an. Wendet Prüfbedingungen auf diesen Datensatz an und behält den Datensatz in der Reportausgabe bei, wenn er den Filtertest besteht.
Hinweis: Es muss ein äußerer Join wirksam sein, entweder als Ergebnis des Befehls SET ALL=ON oder eines JOIN LEFT_OUTER-Befehls (entweder innerhalb oder außerhalb der Masterdatei).
Eine FOCUS-Datenquelle wird als Hostdatei in einem Join unterstützt, verwendet mit SET SHORTPATH = SQL, aber nicht als querverwiesene Datei.
Die folgende Prozedur erstellt zwei Oracle-Tabellen (ORAEMP und ORAEDUC), die in einem Join verwendet werden.
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
Die folgende Anfrage verbindet die zwei Oracle-Tabellen und erstellt einen linken äußeren Join (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
Da der Join ein äußerer Join ist, werden alle ORAEMP-Zeilen in der Reportausgabe angezeigt. ORAEMP-Zeilen mit keiner entsprechenden ORAEDUC-Zeile zeigen das Symbol für fehlende Daten für die Felder aus der ORAEDUC-Tabelle an.
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
Die folgende Anfrage fügt dem ORAEDUC-Segment eine Prüfbedingung hinzu. Der Kursname muss, um die Prüfbedingung zu erfüllen, entweder die Zeichen BASIC enthalten oder fehlen.
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
Es werden jedoch mit SET ALL = ON die Zeilen mit fehlenden Werten in der Reportausgabe nicht beibehalten.
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
Die folgende Anfrage fügt den Befehl SET SHORTPATH = SQL hinzu.
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
Die Reportausgabe zeigt jetzt sowohl die Datensätze an, die die Zeichen BASIC enthalten, als auch die mit fehlenden Werten.
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
Die folgende Anfrage zählt die Angestellten, die keine Kurse belegt haben, und listet sie auf.
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
Die Ausgabe ist:
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
Sie können den Parameter ALL PASS verwenden, um Reports zu erstellen, die nur übergeordnete Instanzen mit fehlenden untergeordneten Werten enthalten. Schreiben Sie hierfür die Anfrage so, dass alle vorhandenen Instanzen im Segment mit fehlenden Instanzen geprüft werden. Nachdem Sie den Parameter ALL auf PASS gestellt haben, zeigt der Report nur die übergeordneten Instanzen an, denen untergeordnete Werte fehlen.
Die folgende Anfrage testet auf fehlende Instanzen im Feld COURSECODE. Da kein COURSECODE gleich 'XXXX' sein kann, werden nur Angestellte mit fehlenden Instanzen in COURSECODE in der Reportausgabe angezeigt.
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
Die Ausgabe ist:
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 |