In diesem Abschnitt: Vorgehensweise: |
Wenn Sie Reportzeilen mit der BY-Phrase sortieren, können Sie den numerischen Rang jeder Zeile angeben. Das Zuweisen von Rängen zu Sortierfeldwerten wird häufig kombiniert mit dem Beschränken der Sortierfeldwerte nach Rang.
Beachten Sie, dass es möglich ist, dass mehrere Reportzeilen denselben Rang haben, wenn sie identische Sortierfeldwerte haben.
Der Default-Spaltentitel für RANKED BY ist RANK. Sie können den Titel mit einer AS-Phrase ändern. Das Feld RANK hat das Format I7. Es kann daher die RANK-Spalte in einem Report bis zu sieben Stellen haben. Weitere Informationen finden Sie unter Kopfzeilen, Fußzeilen, Titel und Labels verwenden.
Sie können aggregierten Werten mit der Syntax RANKED BY TOTAL Ränge zuweisen. Genaueres finden Sie unter Reportspalten sortieren und aggregieren.
RANKED [AS 'name'] BY {HIGHEST|LOWEST} [n] sortfield [AS 'text']
Hierbei gilt:
Ist der neue Name für den RANK-Spaltentitel.
Ist der Name des Sortierfeldes. Das Feld kann numerisch oder alphanumerisch sein.
Ist die Anzahl der Rangkategorien, die in der Reportausgabe angezeigt werden sollen.
Ist die Spaltenkopfzeile, die für die Sortierfeldspalte in der Reportausgabe verwendet werden soll.
Geben Sie die folgende Anfrage aus, um eine Liste mit Angestelltennamen in der Reihenfolge des Gehalts anzuzeigen, die den Rang jedes Angestellten nach Gehalt angibt. Beachten Sie, dass die Angestellten Jones und McCoy denselben Rang haben, da ihr aktuelles Gehalt identisch ist.
TABLE FILE EMPLOYEE PRINT LAST_NAME RANKED AS 'Sequence' BY CURR_SAL END
Die Ausgabe ist:
Das Zuweisen von Rängen zu Sortierfeldwerten wird häufig kombiniert mit dem Beschränken der Sortierfeldwerte nach Rang, wie es im folgenden Beispiel zu sehen ist.
TABLE FILE EMPLOYEE PRINT LAST_NAME RANKED BY HIGHEST 5 CURR_SAL END
Die Ausgabe ist:
RANK CURR_SAL LAST_NAME ---- -------- --------- 1 $29,700.00 BANNING 2 $27,062.00 CROSS 3 $26,862.00 IRVING 4 $21,780.00 BLACKWOOD 5 $21,120.00 ROMANS
Vorgehensweise: Referenz: |
Die WebFOCUS-Sortierphrasen RANK BY und BY {HIGHEST|LOWEST} n sortieren die Reportausgabe und weisen den Datenwerten Rangnummern zu. Wenn Wie einem Datenwert einen Rang hinzufügen, überspringt WebFOCUS per Default Rangnummern nicht. Dies bedeutet, dass, selbst wenn mehreren Datenwerten derselbe Rang zugewiesen wird, die Rangnummer für die nächste Wertegruppe die nächste sequenzielle ganze Zahl ist. Diese Methode für die Zuweisung von Rängen wird als dicht bezeichnet.
Manche relationalen Engines weisen Rangnummern mit einer Methode namens geringe Dichte zu. Wenn bei Rangzuweisung mit geringer Dichte mehreren Datenwerten dieselbe Rangnummer zugewiesen wird, ist die nächste Rangnummer die vorherige Rangnummer plus die Anzahl der Vielfachen.
Sie können den WebFOCUS RANK-Parameter verwenden, um zu steuern, welche Art der Rangzuweisung von WebFOCUS durchgeführt wird. Sie können zusätzlich, wenn Sie auf eine relationale Datenquelle zugreifen, die Rangmethode auf den Rangtyp einstellen, den Ihre relationale Engine durchführt, so dass die Rangberechnung optimiert werden kann. Manche relationalen Engines haben Funktionen sowohl für dichte Rangzuweisung als auch für Rangzuweisung mit geringer Dichte. Es können in diesem Fall beide Einstellungen optimiert werden.
Um Rangverarbeitung an eine relationale Engine weitergeben zu können, muss Folgendes in Ihrer Anfrage gewährleistet sein:
[RANKED] BY [HIGHEST] n
SET RANK={DENSE|SPARSE}
Hierbei gilt:
Gibt dichte Rangzuweisung an. Bei dieser Methode ist jede Rangnummer die nächste sequentielle ganze Zahl, selbst wenn mehreren Datenwerten derselbe Rang zugewiesen wird. DENSE ist der Defaultwert.
Gibt Rangzuweisung mit geringer Dichte an. Bei dieser Methode ist, wenn dieselbe Rangnummer mehreren Datenwerten zugewiesen wird, die nächste Rangnummer die vorherige Rangnummer plus die Anzahl der Vielfachen.
Verwenden Sie dann in Ihrer Anfrage eine der folgenden Formen der BY-Phrase:
RANKED BY {HIGHEST|LOWEST} [n] sortfield [AS 'text']
oder
BY {HIGHEST|LOWEST} n sortfield [AS 'text']
Hierbei gilt:
Ist die höchste Rangnummer, die in der Reportausgabe angezeigt werden soll, wenn die Phrase RANKED BY verwendet wird. Wenn RANKED nicht verwendet wird, ist dies die Anzahl der eindeutigen Sortierfeldwerte, die in der Reportausgabe angezeigt wereden sollen, wenn SET RANK=DENSE, und die Gesamtanzahl der Ausgabezeilen für das Sortierfeld, wenn SET RANK=SPARSE.
Ist der Name des Sortierfeldes.
Ist die Spaltenkopfzeile, die für die Sortierfeldspalte in der Reportausgabe verwendet werden soll.
Die folgende Anfrage mit der EMPDATA-Datenquelle weist Gehältern Ränge in absteigender Reihenfolge nach Abteilung zu. Der Parameter RANK ist auf DENSE eingestellt (der Default).
SET RANK = DENSE TABLE FILE EMPDATA PRINT LASTNAME FIRSTNAME RANKED BY HIGHEST 12 SALARY BY DIV ON TABLE SET PAGE NOPAGE END
In der Ausgabe sind sechs Angestellte in der Rangnummer 6 enthalten. Bei dichter Rangzuweisung ist die nächste Rangnummer die nächsthöchste ganze Zahl (7).
RANK SALARY DIV LASTNAME FIRSTNAME ---- ------ --- -------- --------- 1 $115,000.00 CE LASTRA KAREN 2 $83,000.00 CORP SANCHEZ EVELYN 3 $80,500.00 SE NOZAWA JIM 4 $79,000.00 CORP SOPENA BEN 5 $70,000.00 WE CASSANOVA LOIS 6 $62,500.00 CE ADAMS RUTH CORP CVEK MARCUS WANG JOHN NE WHITE VERONICA SE BELLA MICHAEL HIRSCHMAN ROSE 7 $58,800.00 WE GOTLIEB CHRIS 8 $55,500.00 CORP VALINO DANIEL NE PATEL DORINA 9 $54,100.00 CE ADDAMS PETER WE FERNSTEIN ERWIN 10 $52,000.00 NE LIEBER JEFF 11 $50,500.00 SE LEWIS CASSANDRA 12 $49,500.00 CE ROSENTHAL KATRINA SE WANG KATE
Wenn Sie dieselbe Anfrage mit SET RANK=SPARSE ausführen, wird die folgende Ausgabe erzeugt. Da die Rangkategorie 6 sechs Angestellte enthält, lautet die nächste Rangnummer 6 + 6.
RANK SALARY DIV LASTNAME FIRSTNAME ---- ------ --- -------- --------- 1 $115,000.00 CE LASTRA KAREN 2 $83,000.00 CORP SANCHEZ EVELYN 3 $80,500.00 SE NOZAWA JIM 4 $79,000.00 CORP SOPENA BEN 5 $70,000.00 WE CASSANOVA LOIS 6 $62,500.00 CE ADAMS RUTH CORP CVEK MARCUS WANG JOHN NE WHITE VERONICA SE BELLA MICHAEL HIRSCHMAN ROSE 12 $58,800.00 WE GOTLIEB CHRIS
Die folgende Anfrage mit der EMPDATA-Datenquelle sortiert Gehälter in absteigender Reihenfolge nach Abteilung und druckt die 12 höchsten Gehälter. Der Parameter RANK ist auf DENSE eingestellt (der Default).
SET RANK = DENSE TABLE FILE EMPDATA PRINT LASTNAME FIRSTNAME BY HIGHEST 12 SALARY BY DIV ON TABLE SET PAGE NOPAGE END
In der Ausgabe werden 12 eindeutige Gehaltswerte angezeigt, obwohl manche der Angestellten dasselbe Gehalt haben.
SALARY DIV LASTNAME FIRSTNAME ------ --- -------- --------- $115,000.00 CE LASTRA KAREN $83,000.00 CORP SANCHEZ EVELYN $80,500.00 SE NOZAWA JIM $79,000.00 CORP SOPENA BEN $70,000.00 WE CASSANOVA LOIS $62,500.00 CE ADAMS RUTH CORP CVEK MARCUS WANG JOHN NE WHITE VERONICA SE BELLA MICHAEL HIRSCHMAN ROSE $58,800.00 WE GOTLIEB CHRIS $55,500.00 CORP VALINO DANIEL NE PATEL DORINA $54,100.00 CE ADDAMS PETER WE FERNSTEIN ERWIN $52,000.00 NE LIEBER JEFF $50,500.00 SE LEWIS CASSANDRA $49,500.00 CE ROSENTHAL KATRINA SE WANG KATE
Wenn Sie dieselbe Anfrage mit SET RANK=SPARSE ausführen, wird die folgende Ausgabe erzeugt. Da sechs Angestellte ein Gehalt von $62.500 haben, wird dieser Wert sechsmal gezählt, so dass nur 12 Zeilen (sieben eindeutige Gehaltswerte) in der Ausgabe angezeigt werden.
SALARY DIV LASTNAME FIRSTNAME ------ --- -------- --------- $115,000.00 CE LASTRA KAREN $83,000.00 CORP SANCHEZ EVELYN $80,500.00 SE NOZAWA JIM $79,000.00 CORP SOPENA BEN $70,000.00 WE CASSANOVA LOIS $62,500.00 CE ADAMS RUTH CORP CVEK MARCUS WANG JOHN NE WHITE VERONICA SE BELLA MICHAEL HIRSCHMAN ROSE $58,800.00 WE GOTLIEB CHRIS
WebFOCUS |