Sortierfeldwerte einordnen

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.


Nach oben

x
Syntax: Sortierfeldwerten einen Rang zuweisen
RANKED [AS 'name'] BY  {HIGHEST|LOWEST} [n]  sortfield [AS 'text']

Hierbei gilt:

name

Ist der neue Name für den RANK-Spaltentitel.

sortfield

Ist der Name des Sortierfeldes. Das Feld kann numerisch oder alphanumerisch sein.

n

Ist die Anzahl der Rangkategorien, die in der Reportausgabe angezeigt werden sollen.

Text

Ist die Spaltenkopfzeile, die für die Sortierfeldspalte in der Reportausgabe verwendet werden soll.



Beispiel: Sortierfeldwerte einordnen

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:



Beispiel: Sortierfeldwerten Ränge hinzufügen und sie beschränken

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

Nach oben

x
DENSE- und SPARSE-Rangfolge

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.



x
Referenz: Rangfolge optimieren

Um Rangverarbeitung an eine relationale Engine weitergeben zu können, muss Folgendes in Ihrer Anfrage gewährleistet sein:



x
Syntax: Die Rangmethode steuern
SET RANK={DENSE|SPARSE}

Hierbei gilt:

DENSE

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.

SPARSE

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:

n

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.

sortfield

Ist der Name des Sortierfeldes.

Text

Ist die Spaltenkopfzeile, die für die Sortierfeldspalte in der Reportausgabe verwendet werden soll.



x
Referenz: Verwendungshinweise für SET RANK


Beispiel: Werten in einer FOCUS-Datenquelle Ränge zuweisen

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    


Beispiel: Die Anzahl der Sortierfeldwerte beschränken

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