Eine fehlende Segmentinstanz verarbeiten

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.


Nach oben

Beispiel: Reports mit Segmenten ohne untergeordnete 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

Nach oben

Beispiel: Reports mit Segmenten mit untergeordneten Instanzen erstellen

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.



x
Fehlende Instanzen mit dem Präfix ALL. in Reports aufnehmen

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.



Beispiel: Fehlende Segmentinstanzen mit dem Präfix ALL. aufnehmen

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

Nach oben

x
Mit dem Parameter SET ALL fehlende Instanzen in Reports aufnehmen

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.



x
Syntax: Eine übergeordnete Instanz mit fehlenden untergeordneten Segmenten aufnehmen
SET ALL= {OFF|ON|PASS}

Hierbei gilt:

OFF

Lässt übergeordnete Instanzen im Report weg, denen untergeordnete Segmente fehlen. OFF ist der Defaultwert.

ON

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.

PASS

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



Beispiel: Fehlende Segmentinstanzen mit SET ALL aufnehmen

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:



x
Syntax: Kurzpfadverarbeitung in einem linken äußeren Join steuern
SET SHORTPATH = {FOCUS|SQL}

Hierbei gilt:

FOCUS

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.

SQL

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



x
Referenz: Verwendungshinweise für SET SHORTPATH = SQL

Eine FOCUS-Datenquelle wird als Hostdatei in einem Join unterstützt, verwendet mit SET SHORTPATH = SQL, aber nicht als querverwiesene Datei.



Beispiel: Die Verarbeitung von äußeren Joins steuern

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


Beispiel: Host-Datensätze finden, die keine entsprechenden querverwiesenen Datensätze haben

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

Nach oben

x
Auf fehlende Instanzen in FOCUS-Datenquellen testen

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.



Beispiel: In einer FOCUS-Datenquelle auf eine MISSING-Instanz testen

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