In diesem Abschnitt: |
Fehlende Werte in Segmentinstanzen treten auf, wenn die Instanzen vorhanden sind, einigen Feldern jedoch Werte fehlen.
Wenn Feldern in Instanzen Werte fehlen, wird numerischen Feldern der Wert 0 und alphanumerischen Feldern ein Leerzeichen zugewiesen. Diese Defaultwerte werden in Reports angezeigt und werden in allen Berechnungen verwendet, die von den Anzeigebefehlen SUM und COUNT, DEFINE-Befehlen und Präfixoperatoren wie z. B. MAX durchgeführt werden. und AVE.
Um die Verwendung dieser Defaultwerte in Berechnungen zu verhindern (was zu fehlerhaften Ergebnissen führen könnte), können Sie der Felddeklaration in der Masterdatei das Attribut MISSING entweder für ein reales oder ein virtuelles Feld hinzufügen. Wenn das Attribut MISSING auf ON gestellt wurde, werden die fehlenden Werte mit einem speziellen internen Code markiert, damit sie sich von Leerstellen und Nullen unterscheiden, und die fehlenden Werte werden in Berechnungen ignoriert. In Reports wird der interne Code durch den Wert SET NODATA dargestellt, der per Default ein Punkt (.) ist. Siehe Die NODATA-Zeichenfolge einstellen.
Fehlende Daten für ein Feld in einer Segmentinstanz können auftreten, wenn die Datenwerte unbekannt sind, wie es im folgenden Beispiel der Fall ist. Nehmen wir an, dass den Angestellten, die in der EMPLOYEE-Datenquelle enthalten sind, an einem bestimmten Datum eine Gehaltserhöhung zusteht, der Betrag der Erhöhung allerdings noch nicht festgelegt wurde. Das Unternehmen gibt die Daten für jeden Angestellten ohne die Gehaltssummen in die Datenquelle ein. Die Gehälter werden später eingegeben. Jedes Datum ist eine individuelle Instanz im Segment Gehaltsentwicklung. Die neuen Gehälter fehlen jedoch für jede Dateninstanz. Nehmen wir weiter an, dass eine Reportanfrage den Durchschnitt des Feldes SALARY berechnet (SUM AVE.SALARY). Die Genauigkeit des sich ergebenden Durchschnitts hängt davon ab, ob die fehlenden Wert für das SALARY-Feld als Nullen behandelt werden (MISSING=OFF) oder als interne Codes (MISSING=ON).
Hinweis: Wenn alle Feldwerte fehlen, die in der Berechnung eines numerischen Summenwerts verwendet werden, wie z. B. eine Zwischensumme, wird dem Summenwert der fehlende Datenwert zugewiesen, nicht der Wert null (0). Hierzu gehören Summenwerte, die von den Operatoren ST. und CT. erzeugt werden, die in einer Zwischenfußzeile verwendet werden.
Nehmen wir an, dass das Feld CURR_SAL in 12 Segmentinstanzen angezeigt wird. In drei dieser Instanzen wurde dem Feld kein Wert gegeben. Trotzdem zählt der Anzeigebefehl
COUNT CURR_SAL
das Feld CURR_SAL zwölfmal. Dies ist der Fall, da das Attribut MISSING per Default auf OFF gestellt ist, damit die fehlenden Werte in die Zählung aufgenommen werden. Wenn Sie die fehlenden Daten von der Zählung ausschließen möchten, können Sie MISSING auf ON stellen.
Nehmen wir an, dass Sie die folgenden Datensätze für ein Feld besitzen:
. . 1 3
Die numerischen Werte in den ersten beiden Datensätzen fehlen (durch Punkte angezeigt). Die letzten beiden Datensätze besitzen die Werte 1 und 3. Wenn Sie einen Durchschnitt für diese Felder ohne das MISSING-Attribut berechnen (MISSING OFF), wird der Wert 0 für die beiden Datensätze angezeigt, die fehlen. Daher ist der Durchschnitt der Datensätze (0+0+1+3)/4, also 1. Wenn Sie das MISSING ON-Attribut verwenden, werden die beiden fehlenden Werte ignoriert und die Berechnung des Durchschnitts ist (1+3)/2, also 2.
In manchen Anwendungen können die Defaultwerte (Leerstellen oder Nullen) gültige Daten und nicht das Fehlen von Daten darstellen. Falls dies jedoch nicht der Fall ist, können Sie das Attribut MISSING nach dem Feldformat in der Deklaration der Masterdatei für das Feld mit den fehlenden Werten aufnehmen. Das MISSING-Attribut kann in der Datenquelle mit einem tatsächlichen Feld oder mit einem virtuellen Feld, das Sie in der Masterdatei definieren, verwendet werden.
Die folgende Felddeklaration gibt z. B. das MISSING-Attribut für das RETURNS-Feld an:
FIELDNAME=RETURNS, ALIAS=RTN, FORMAT=I4, MISSING=ON,$
Die nächste Deklaration gibt das MISSING-Attribut für ein virtuelles Feld namens PROFIT an:
DEFINE PROFIT/D7 MISSING ON NEEDS SOME DATA = RETAIL_COST - DEALER_COST;$
Um sicherzustellen, dass die fehlenden Werte für virtuelle Felder richtig verarbeitet werden, können Sie das Attribut MISSING im Befehl DEFINE für das virtuelle Feld auf ON stellen und angeben, ob Sie die Berechnung durchführen möchten, wenn manche oder alle Werte fehlen. Zugehörige Informationen über die Phrasen SOME und ALL finden Sie unter Fehlende Werte in einem DEFINE- oder COMPUTE-Befehl angeben.
Wenn das Attribut MISSING in einer Felddeklaration auf ON gestellt wurde, wird das Feld, das keine Daten enthält, mit einem speziellen internen Code und nicht mit Leerstellen und Nullen markiert. Während der Reporterstellung schließen die Befehle SUM und COUNT und alle Präfixoperatoren (z. B. AVE., MAX., MIN.) die fehlenden Daten in ihren Berechnungen aus. Weitere Informationen über das MISSING-Attribut und Felddeklarationen finden Sie im Handbuch Daten mit der WebFOCUS-Sprache beschreiben .
Hinweis:
Dieses Beispiel verdeutlicht den Unterschied zwischen einem Feld mit MISSING ON und einem Feld ohne MISSING ON. Darin wird ein virtuelles Feld (X_RETURNS) ohne das Attribut MISSING so eingestellt, dass es einem realen Feld (RETURNS) mit dem MISSING-Attribut in der Masterdatei gleicht. Wenn dem Feld mit dem Attribut MISSING (RETURNS) ein Wert fehlt, ist der entsprechende Wert von X_RETURNS gleich 0, da ein Datenquellenfeld, dem ein Wert fehlt, zum Zweck der Berechnung als 0 (oder Leerstelle) bewertet wird (siehe Das MISSING-Attribut in einem DEFINE- oder COMPUTE-Befehl).
Die folgende Anfrage definiert das virtuelle Feld:
DEFINE FILE SALES X_RETURNS/I4 = RETURNS; END
Geben Sie nun die folgende Reportanfrage aus:
TABLE FILE SALES SUM CNT.X_RETURNS CNT.RETURNS AVE.X_RETURNS AVE.RETURNS END
Beachten Sie, dass das Feld X_RETURNS denselben Wert wie RETURNS besitzt, es sei denn es fehlt RETURNS ein Wert. In diesem Fall ist der Wert von X_RETURNS gleich 0.
Die Ausgabe ist:
Für das Feld RETURNS wird eine niedrigere Zahl ermittelt als für X_RETURNS und der Durchschnitt von RETURNS ist größer als der von X_RETURNS, da die fehlenden Werte in RETURNS nicht Teil der Berechnung sind.
Eine Abbildung, in der das MISSING-Attribut für ein virtuelles Feld eingestellt ist, finden Sie unter Fehlende Werte für virtuelle Felder mit SOME und ALL verarbeiten.
Vorgehensweise: |
Sie können das MISSING-Attribut in einem DEFINE- oder COMPUTE-Befehl auf ON stellen, damit ein Temporärfeld mit fehlenden Werten in Reports richtig interpretiert und dargestellt wird.
Eine Formel, mit der die Werte des Temporärfeldes abgeleitet werden, kann reale Felder enthalten, die fehlende Werte besitzen. Wenn diese jedoch verwendet wird, um den Wert eines Temporärfeldes abzuleiten, wird ein Datenquellenfeld, dem ein Wert fehlt, zum Zweck der Berechnung als 0 oder Leerstelle ausgewertet, selbst wenn das MISSING-Attribut für dieses Feld in der Masterdatei auf ON gestellt wurde.
Um sicherzustellen, dass fehlende Werte für Temporärfelder richtig verarbeitet werden, können Sie das Attribut MISSING für das virtuelle Feld in den Befehlen DEFINE oder COMPUTE auf ON stellen und angeben, ob Sie die Berechnung durchführen möchten, wenn manche oder alle Werte fehlen. Siehe Fehlende Werte in einem DEFINE- oder COMPUTE-Befehl angeben.
field[/format] MISSING {ON|OFF} [NEEDS] {SOME|ALL} [DATA] = expression;
Hierbei gilt:
Ist der Name des virtuellen Feldes, das vom DEFINE-Befehl erstellt wurde.
Ist das Format des virtuellen Feldes. Der Default ist D12.2.
ON ermöglicht, dass der Wert des Temporärfeldes als fehlend (d.h. durch besonderen internen Code von absichtlich eingegebenen Nullen oder Leerstellen unterschieden) interpretiert und in Reports mit dem NODATA-Zeichen dargestellt werden kann.
OFF verarbeitet fehlende Werte für numerische Felder als Nullen und fehlende Werte für alphanumerische Felder als Leerstellen. Dies ist der Defaultwert.
Ist optional. Es hilft bei der Klärung der Befehlsbedeutung.
Gibt an, dass das Temporärfeld einen Wert hat, wenn wenigstens ein Feld in der Formel einen Wert besitzt (die fehlenden Werte des Feldes werden in der Berechnung als 0 oder Leerstelle bewertet). Wenn alle Felder in der Formel fehlende Werte sind, fehlt dem Temporärfeld sein Wert. SOME ist der Defaultwert.
Gibt an, dass das Temporärfeld einen Wert hat, wenn alle Felder in der Formel Werte besitzen. Wenn wenigstens einem Feld in der Formel ein Wert fehlt, fehlt dem Temporärfeld ebenfalls ein Wert.
Ist optional. Es hilft bei der Klärung der Befehlsbedeutung.
Ist eine gültige Formel, von der das Temporärfeld seinen Wert ableitet.
Die folgende Anfrage verdeutlicht die Verwendung von zwei Feldern (RETURNS und DAMAGED), um das Feld NO_SALE zu definieren. Das MISSING-Attribut ist sowohl für das Feld RETURNS als auch für das Feld DAMAGED in der SALES-Masterdatei auf ON gestellt. Falls jedoch einem dieser Felder ein Wert fehlt, wird dieses Feld als 0 bewertet.
DEFINE FILE SALES NO_SALE/I4 = RETURNS + DAMAGED; END TABLE FILE SALES PRINT RETURNS AND DAMAGED AND NO_SALE BY CITY BY DATE BY PROD_CODE END
Die Ausgabe ist:
CITY DATE PROD_CODE RETURNS DAMAGED NO_SALE ---- ---- --------- ------- ------- ------- NEW YORK 10/17 B10 2 3 5 B17 2 1 3 B20 0 1 1 C13 . 6 6 C14 4 . 4 C17 0 0 0 D12 3 2 5 E1 4 7 11 E2 . . 0 E3 4 2 6 NEWARK 10/18 B10 1 1 2 10/19 B12 1 0 1 STAMFORD 12/12 B10 10 6 16 B12 3 3 6 B17 2 1 3 C13 3 0 3 C7 5 4 9 D12 0 0 0 E2 9 4 13 E3 8 9 17 UNIONDALE 10/18 B20 1 1 2 C7 0 0 0
Beachten Sie, dass die Produkte C13, C14 und E2 im Abschnitt New York entweder für RETURNS oder DAMAGED fehlende Werte anzeigen, da das Attribut MISSING ON in der Masterdatei eingestellt wurde. In der Berechnung, die den Wert von NO_SALE bestimmt, werden diese fehlenden Werte jedoch als Nullen interpretiert, da MISSING ON für das virtuelle Feld nicht eingestellt wurde.
Die folgende Anfrage verdeutlicht, wie der DEFINE-Befehl zusammen mit dem MISSING-Attribut verwendet wird, um anzugeben, dass entweder manche oder alle Feldwerte fehlen, auf die in einem DEFINE-Befehl verwiesen wird. Der Wert des virtuellen Feldes sollte dann ebenfalls fehlen.
Das Feld SOMEDATA enthält einen Wert, wenn entweder das RETURNS- oder das DAMAGED-Feld einen Wert enthält. Andernfalls fehlt der Wert für SOMEDATA. Das Feld ALLDATA enthält nur dann einen Wert, wenn sowohl das Feld RETURNS als auch das Feld DAMAGED Werte enthalten. Andernfalls fehlt der Wert für ALLDATA.
DEFINE FILE SALES SOMEDATA/I5 MISSING ON NEEDS SOME=RETURNS + DAMAGED; ALLDATA/I5 MISSING ON NEEDS ALL=RETURNS + DAMAGED; END
TABLE FILE SALES PRINT RETURNS AND DAMAGED SOMEDATA ALLDATA BY CITY BY DATE BY PROD_CODE END
Die Ausgabe ist:
Vorgehensweise: |
Sie können WHERE-Kriterien angeben, um Segmentinstanzen mit fehlenden Feldwerten zu identifizieren.
Sie können diese Tests nicht verwenden, um fehlende Instanzen zu identifizieren. Sie können jedoch den ALL-Parameter auf PASS stellen, um auf fehlende Instanzen zu prüfen. Siehe Eine fehlende Segmentinstanz verarbeiten.
Mit der folgenden Syntax können Sie auf ein Segment mit fehlenden Feldwerten testen:
WHERE field {IS|EQ} MISSING
Um zu testen, ob Feldwerte vorhanden sind, lautet die Syntax:
WHERE field {NE|IS-NOT} MISSING
Ein WHERE-Kriterium, das ein numerisches Feld auf 0 oder ein alphanumerisches Feld auf Leerstellen testet, ruft ebenfalls Instanzen ab, für die im Feld ein Wert fehlt.
Die folgende Anfrage verdeutlicht, wie MISSING verwendet werden kann, um Lebensmittel (nach Code) anzuzeigen, für die die Anzahl der Packungen, die von Kunden zurückgegeben wurden, fehlt.
TABLE FILE SALES PRINT RETURNS BY CITY BY DATE BY PROD_CODE WHERE RETURNS IS MISSING END
Die Ausgabe ist:
CITY DATE PROD_CODE RETURNS ---- ---- --------- ------- NEW YORK 10/17 C13 . E2 .
Die folgende Anfrage verdeutlicht, wie MISSING verwendet werden kann, um nur die Lebensmittel anzuzeigen, für die die Anzahl der Packungen, die von Kunden zurückgegeben wurden, nicht fehlt.
TABLE FILE SALES PRINT RETURNS BY CITY BY DATE BY PROD_CODE WHERE RETURNS IS-NOT MISSING END
Die Ausgabe ist:
Die folgende Anfrage zeigt Lebensmittel an, für die entweder keine Packungen zurückgegeben wurden oder für die die Anzahl der zurückgegebenen Packungen nicht aufgezeichnet wurde:
TABLE FILE SALES PRINT RETURNS BY CITY BY DATE BY PROD_CODE WHERE RETURNS EQ 0 END
Die Ausgabe ist:
Um nur die Elemente anzuzeigen, die von Kunden nicht zurückgegeben wurden, benötigen Sie zwei WHERE-Kriterien. Mit dem ersten beschränken Sie die Anzahl der Rückgaben auf 0 und mit der zweiten schließen Sie fehlende Werte aus, wie es in der folgenden Anfrage zu sehen ist.
TABLE FILE SALES PRINT RETURNS BY CITY BY DATE BY PROD_CODE WHERE RETURNS EQ 0 WHERE RETURNS IS-NOT MISSING END
Die Ausgabe ist:
Vorgehensweise: Referenz: |
Die Fähigkeit, in Feldern zwischen fehlenden Daten und Defaultwerten (Nullen und Leerstellen) zu unterscheiden, kann in Ausgabedateien übernommen werden. Wenn die abgerufenen und verarbeiteten Informationen in einem Report die NODATA-Zeichenfolge angezeigt haben, kann die NODATA-Zeichenfolge per Default in der Ausgabedatei gespeichert werden. Sie können auch den SET HOLDMISS-Befehl verwenden, um die fehlenden Werte anstelle des NODATA-Zeichens in einer Ausgabedatei zu speichern. Weitere Informationen zu diesem Thema finden Sie unter Ihre Reportausgabe speichern und wiederverwenden.
ON TABLE {HOLD|SAVE|SAVB} MISSING {ON|OFF}
Hierbei gilt:
Erstellt eine Extrahierungsdatei, die in nachfolgenden Reports verwendet werden kann. Der Default für MISSING ist ON.
Erstellt eine Extrahierungstextdatei, die in anderen Programmen verwendet werden kann. Der Default für MISSING ist OFF.
Erstellt eine binäre Extrahierungsdatei, die in anderen Programmen verwendet werden kann. Der Default für MISSING ist OFF.
HOLD-Dateien können sowohl mit der MISSING- als auch mit der FORMAT ALPHA-Option erstellt und in einer beliebigen Reihenfolge angegeben werden. Beispiel:
ON TABLE HOLD FORMAT ALPHA MISSING OFF ON TABLE HOLD MISSING OFF FORMAT ALPHA
Die folgende Anfrage gibt MISSING ON in der HOLD-Phrase an:
TABLE FILE SALES SUM RETURNS AND HOLD FORMAT ALPHA MISSING ON BY CITY BY DATE BY PROD_CODE END
Das Attribut MISSING=ON für das Feld RETURNS wird an die Masterdatei HOLD weitergegeben. Zusätzlich werden die Symbole für fehlende Daten an die HOLD-Datei für die fehlenden Feldwerte weitergegeben:
FILENAME=HOLD , SUFFIX=FIX , $ SEGMENT=HOLD, SEGTYPE=S3, $ FIELDNAME=CITY, ALIAS=E01, USAGE=A15, ACTUAL=A15, $ FIELDNAME=DATE, ALIAS=E02, USAGE=A4MD, ACTUAL=A04, $ FIELDNAME=PROD_CODE, ALIAS=E03, USAGE=A3, ACTUAL=A03, $ FIELDNAME=RETURNS, ALIAS=E04, USAGE=I3, ACTUAL=A03, MISSING=ON, $
Mit MISSING OFF in der HOLD-Phrase wird das Attribut MISSING=ON nicht an die Masterdatei HOLD weitergegeben und die Symbole für fehlende Daten werden mit Defaultwerten ersetzt.
SET HOLDMISS={ON|OFF} ON TABLE SET HOLDMISS {ON|OFF}
Hierbei gilt:
Ermöglicht das Speichern von fehlenden Daten in einer HOLD-Datei. Wenn TABLE einen Defaultwert für nicht gefundene Daten erzeugt, erzeugt es fehlende Werte.
Ermöglicht das Speichern von fehlenden Daten in einer HOLD-Datei nicht. OFF ist der Defaultwert.
SET HOLDMISS=ON TABLE FILE MOVIES SUM WHOLESALEPR BY CATEGORY ACROSS RATING ON TABLE HOLD AS HLDM END TABLE FILE HLDM PRINT * END
Die Ausgabe ist:
CATEGORY WHOLESALEPR WHOLESALEPR WHOLESALEPR WHOLESALEPR WHOLESALEPR -------- ----------- ----------- ----------- ----------- ----------- ACTION . . 20.98 . 34.48 CHILDREN 54.49 51.38 . . . CLASSIC 40.99 160.80 . . . COMEDY . . 46.70 30.00 13.75 DRAMA . . . . 10.00 FOREIGN 13.25 . 62.00 . 70.99 MUSICALS 15.00 . 13.99 9.99 13.99 MYSTERY . 9.00 18.00 9.00 80.97 SCI/FI . . . 35.99 43.53 TRAIN/EX . 60.98 . . .
Vorgehensweise: Referenz: |
Wenn ein Feld in einer Anfrage neu formatiert wird (z. B. SUM-Feld/-Format), wird ein internes COMPUTE-Feld erstellt, damit der neu formatierte Feldwert und die Anzeige in der Reportausgabe enthalten sind. Wenn das ursprüngliche Feld einen fehlenden Wert hat, kann dieser fehlende Wert an das interne Feld weitergegeben werden, indem der COMPMISS-Parameter auf ON gestellt wird. Wenn der fehlende Wert nicht an das interne Feld weitergegeben wird, zeigt es eine Null an (falls es numerisch ist) oder eine Leerstelle (falls es alphanumerisch ist). Wenn der fehlende Wert an das interne Feld weitergegeben wird, zeigt es das Symbol für fehlende Daten in der Reportausgabe an.
SET COMPMISS = {ON|OFF}
Hierbei gilt:
Gibt einen fehlenden Wert an ein neu formatiertes Feld weiter. ON ist der Defaultwert.
Zeigt eine Leerstelle oder eine Null für ein neu formatiertes Feld an.
Hinweis: Der COMPMISS-Parameter kann in einem ON TABLE-Befehl nicht eingestellt werden.
Die folgende Prozedur druckt das RETURNS-Feld der SALES-Datenquelle für die Filiale 14Z. Bei COMPMISS OFF werden die fehlenden Werte in der Spalte für den neu formatierten Feldwert als Nullen angezeigt. (Hinweis: Sie müssen, bevor Sie dieses Beispiel ausprobieren, sicherstellen, dass die SALEMISS-Prozedur, die der SALES-Datenquelle fehlende Werte hinzufügt, ausgeführt wurde.)
SET COMPMISS = OFF TABLE FILE SALES PRINT RETURNS RETURNS/D12.2 AS 'REFORMATTED,RETURNS' BY STORE_CODE WHERE STORE_CODE EQ '14Z' END
Die Ausgabe ist:
REFORMATTED STORE_CODE RETURNS RETURNS ---------- ------- ----------- 14Z 2 2.00 2 2.00 0 .00 . .00 4 4.00 0 .00 3 3.00 4 4.00 . .00 4 4.00
Bei COMPMISS ON zeigt die Spalte für die neu formatierte Version von RETURNS das Symbol für fehlende Daten an, wenn ein Wert fehlt:
SET COMPMISS = ON TABLE FILE SALES PRINT RETURNS RETURNS/D12.2 AS 'REFORMATTED,RETURNS' BY STORE_CODE WHERE STORE_CODE EQ '14Z' END
Die Ausgabe ist:
REFORMATTED STORE_CODE RETURNS RETURNS ---------- ------- ----------- 14Z 2 2.00 2 2.00 0 .00 . . 4 4.00 0 .00 3 3.00 4 4.00 . . 4 4.00
WebFOCUS |