Classer les valeurs de critères de tri

Dans cette section :

Comment :

Lorsque vous triez des lignes de rapport avec des phrases BY, vous pouvez indiquer le classement numérique de chaque ligne. Le classement des valeurs de critères de tri est souvent combiné avec la limitation des valeurs de critères de tri par classement.

Remarquez qu'il est possible que plusieurs lignes de rapport aient le même classement s'ils ont des valeurs de critères de tri identiques.

Le titre de colonne par défaut de RANKED BY est RANK. Vous pouvez changer le titre avec une phrase AS. Le champ RANK a le format I7. Alors, la colonne RANK d'un rapport peut comprendre jusqu'à 7 chiffres. Pour plus d'informations, consultez Utilisation d'en-têtes, pieds de page, titres et étiquettes.

Vous pouvez classer des valeurs agrégées en utilisant la syntaxe RANKED BY TOTAL. Pour plus de détails, consultez Trier et agréger des colonnes de rapport.


Haut de page

x
Syntaxe : Classer des valeurs de critères de tri
RANKED [AS 'name'] BY  {HIGHEST|LOWEST} [n]  sortfield [AS 'text']

où :

name

Le nouveau nom du titre de colonne RANK.

sortfield

Est le nom du critère de tri. Le champ peut être numérique ou alphanumérique.

n

Est le numéro des catégories de rang à afficher sur la sortie du rapport.

text

Est l'en-tête de colonne à utiliser pour la colonne du critère de tri dans la sortie de rapport.



Exemple : Classer les valeurs de critères de tri

Lancez la requête suivante pour afficher une liste des noms d'employés dans l'ordre de salaire, indiquant le classement de chaque employé par salaire. Notez que les employés Jones et McCoy ont le même classement car ils ont le même salaire actuel.

TABLE FILE EMPLOYEE
PRINT LAST_NAME
RANKED AS 'Sequence' BY CURR_SAL
END

La sortie est :



Exemple : Classer et limiter les valeurs de critères de tri

Le classement des valeurs de critère de tri est souvent combiné avec la limitation des valeurs de critère de tri par classement, comme le montre l'exemple suivant.

TABLE FILE EMPLOYEE
PRINT LAST_NAME
RANKED BY HIGHEST 5 CURR_SAL
END

La sortie est :

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

Haut de page

x
Classement DENSE et SPARSE

Comment :

Référence :

Les phrases de tri WebFOCUS RANK BY et BY {HIGHEST|LOWEST} n trient la sortie de rapport et attribuent des numéros de catégories à la séquence de valeurs de données. Lors de l'attribution d'un rang à une valeur de données, par défaut WebFOCUS ne saute les numéros de rang. Cela signifie que même si plusieurs valeurs de données sont attribuées au même rang, le numéro de rang pour le prochain groupe de valeurs est le prochain entier séquentiel. Cette méthode d'attribution de numéros de rang est appelé dense.

Certains moteurs relationnels attribuent des numéros de rang en utilisant une méthode appelée éparse. Avec un classement éparse, si plusieurs valeurs de données sont attribuées le même numéro de rang, le prochain numéro de rang sera le numéro de rang précédent, plus le nombre de multiples.

Vous pouvez utiliser le paramètre WebFOCUS RANK pour contrôler le type de classement effectué par WebFOCUS. De plus, si vous accédez à une source de données relationnelle, vous pouvez définir la méthode de classement au type de classement effectué par votre moteur relationnel de façon à ce que le calcul du rang puisse être optimisé. Certains moteurs relationnels ont des fonctions de classement à la fois dense et éparse. Dans ce cas, les deux réglages peuvent être optimisés.



x
Référence : Classement optimisé

Pour passer le processus du classement à un moteur relationnel, votre requête doit :



x
Syntaxe : Contrôler la méthode de classement
SET RANK={DENSE|SPARSE}

où :

DENSE

Spécifie le classement dense. Avec cette méthode, chaque numéro de classement représente le prochain entier séquentiel, et ce même quand le même classement est affecté à plusieurs valeurs de données. DENSE est la valeur par défaut.

SPARSE

Spécifie le classement dispersé. Avec cette méthode, si le même numéro de classement est affecté à plusieurs valeurs de données, le prochain numéro de classement sera le numéro de classement précédent plus le nombre de multiples.

Puis, dans votre requête, utilisez l'une des formes suivantes de la phrase BY :

RANKED BY {HIGHEST|LOWEST} [n] sortfield [AS 'text']

ou

BY {HIGHEST|LOWEST} n sortfield [AS 'text']

où :

n

Elle numéro de classement le plus élevé affiche sur la sortie de rapport quand la phrase RANKED BY est utilisée. Quand RANKED n'est pas utilisé, il s'agit du nombre de valeurs de champ de tri distinctes à afficher sur la sortie du rapport quand SET RANK=DENSE, et le nombre total de lignes en sortie pour le champ de tri quand SET RANK=SPARSE.

sortfield

Est le nom du critère de tri.

text

Est l'en-tête de colonne à utiliser pour le critère de tri dans la sortie du rapport.



x
Référence : Notes d'utilisation pour SET RANK


Exemple : Valeurs de classement dans une source de données FOCUS

La requête suivante, sur la source de données EMPDATA, classe les salaires en ordre décroissant par division. Le paramètre RANK est mis sur DENSE (par défaut).

SET RANK = DENSE           
TABLE FILE EMPDATA         
PRINT LASTNAME FIRSTNAME   
RANKED BY HIGHEST 12 SALARY
BY DIV                     
ON TABLE SET PAGE NOPAGE   
END                        

Sur la sortie, six employés sont inclus dans le numéro de classement 6. Avec un classement dense, le prochain numéro de classement est le prochain entier le plus élevé, 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       

Exécuter la requête avec SET RANK=SPARSE produit la sortie suivante. La catégorie de classement 6 incluant six employés, le prochain numéro de classement est 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    


Exemple : Limitation du nombre de valeurs de champ de tri

La requête suivante, sur la source de données EMPDATA, classe les salaires en ordre décroissant par division et imprime les 12 salaires les plus élevés. Le paramètre RANK est mis sur DENSE (par défaut).

SET RANK = DENSE           
TABLE FILE EMPDATA         
PRINT LASTNAME FIRSTNAME   
BY HIGHEST 12 SALARY
BY DIV                     
ON TABLE SET PAGE NOPAGE   
END                        

Sur la sortie, 12 valeurs de salaire distinctes sont affichées, et ce même si certains employés ont le même salaire.

     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      

Exécuter la requête avec SET RANK=SPARSE produit la sortie suivante. Six employés ayant un salaire de $62,500, cette valeur est comptée de 6 fois de manière à n'afficher que 12 lignes (cette valeur salaire distincte) sur la sortie.

     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