Vous pouvez utiliser les opérateurs préfixes pour effectuer des calculs directement sur la valeur des champs.
Remarque : à moins que vous ne modifiez une colonne ou un titre ACROSS avec une phrase AS, l'opérateur préfixe est ajouté automatiquement au titre. Sans une phrase AS, le titre de colonne est construit à l'aide de l'opérateur de préfixe, du nom de champ ou l'attribut TITLE dans le fichier maître (s'il a été créé) :
Pour consulter une liste des opérateurs préfixes et leurs fonctions, consultez Fonctions à effectuer avec les opérateurs préfixes.
Comment : Référence : |
Cette rubrique décrit la syntaxe et les notes de base pour l'utilisation des opérateurs préfixes.
Chaque opérateur préfixe s'applique à un seul champ, et influence uniquement ce champ-là.
{SUM|COUNT} prefix.fieldname AS 'coltitle'
{PRINT|COMPUTE} RNK.byfield
où :
La table suivante liste des opérateurs préfixe et en décrit leur fonctionnalité.
Préfixe |
Fonction |
---|---|
ASQ. |
Calcule la somme moyenne des carrés pour l'écart type dans les analyses statistiques. |
AVE. |
Calcule la valeur moyenne du champ. |
CNT. |
Compte le nombre d'instance d'un champ. Le type de données du résultat est toujours un nombre entier. |
CNT.DST. |
Compte le nombre de valeurs distinctes dans un champ. |
CT. |
Produit un total cumulatif du champ spécifié. Cet opérateur n'est valable qu'avec les en-têtes secondaires et les pieds de page secondaires. Pour plus d'informations, consultez Utilisation d'en-têtes, pieds de page, titres et étiquettes. |
DST. |
Détermine le nombre total de valeurs distinctes en un seul passage d'une source de données. |
FST. |
Génère la première instance physique du champ. Peut être utilisé avec des champs numériques ou de texte. |
LST. |
Génère la dernière instance physique du champ. Peut être utilisé avec des champs numériques ou de texte. |
MAX. |
Génère la valeur maximale du champ. |
MDE. |
Calcul le mode des valeurs de champ. |
MDN. |
Calcul la médiane des valeurs de champ. |
MIN. |
Génère la valeur minimale du champ. |
PCT. |
Calcule le pourcentage d'un champ en fonction du total des valeurs du champ. L'opérateur PCT peut être utilisé avec des champs détailés ou récapitulatifs. |
PCT.CNT. |
Calcule le pourcentage d'un champ en fonction du nombre d'instances trouvées. Le résultat est toujours au format F6.2 et ne peut pas être reformaté. |
RNK. |
Classe les instances d'un critère de tri BY dans la requête. Peut être utilisé dans les commandes PRINT, les commandes COMPUTE et les tests IF ou WHERE TOTAL. |
RPCT. |
Calcule le pourcentage d'un champ en fonction du total des valeurs du champ sur une ligne. |
ST. |
Produit un sous-total d'un champ spécifié à un saut de tri dans le rapport. Cet opérateur n'est valable qu'avec les en-têtes secondaires et les pieds de page secondaires. Pour plus d'informations, consultez Utilisation d'en-têtes, pieds de page, titres et étiquettes. |
SUM. |
Cumule les valeurs des champs. |
TOT. |
Compte les valeurs de champ à utiliser dans un en-tête (y compris les pieds de page, les en-têtes secondaires et les pieds de page secondaires). |
Le préfixe AVE. calcule la valeur moyenne d'un champ donné. Le calcul s'effectue au niveau le plus bas de la commande d'affichage. C'est le total des valeurs de champ dans un groupe divisé par le nombre d'enregistrements du groupe de tri. Si la requête ne comprend pas de phrase de tri, AVE. calcule la moyenne pour le rapport entier.
Cette requête calcule le nombre moyen d'heures de formation allouées à chaque département.
TABLE FILE EMPLOYEE SUM AVE.ED_HRS BY DEPARTMENT END
L'image suivante montre les résultats de la procédure de rapport.
AVE DEPARTMENT ED_HRS ---------- ------ MIS 38.50 PRODUCTION 20.00
Le préfixe ASQ. calcule la somme des carrés, qui sert de composant de l'écart type dans les analyses statistiques (présenté comme formule à l'image suivante).
Si le champ est au format de nombre entier et que vous recevez un ensemble de chiffres important, le résultat ASQ. peut être négatif par conséquent d'un dépassement de capacité de champs.
Cette requête calcule la somme et la somme des champs carrés pour le champ DELIVER_AMT.
TABLE FILE SALES SUM DELIVER_AMT AND ASQ.DELIVER_AMT BY CITY END
L'image suivante montre les résultats de la procédure de rapport.
ASQ CITY DELIVER_AMT DELIVER_AMT ---- ----------- ----------- NEW YORK 300 980 NEWARK 60 900 STAMFORD 430 3637 UNIONDALE 80 1600
Les préfixes MAX. et MIN. produissent les valeurs maximales et minimales, respectivement, dans un groupe de tri. Si une requête ne comprend pas de phrase de tri, MAX. et MIN. produisent les valeurs maximales et minimales pour le rapport complet.
Cette requête de rapport calcule les valeurs maximales et minimales du champ SALARY.
TABLE FILE EMPLOYEE SUM MAX.SALARY AND MIN.SALARY END
L'image suivante montre les résultats de la procédure de rapport.
MAX MIN SALARY SALARY ------ ------ $29,700.00 $8,650.00
Vous pouvez utiliser MDN. (médiane) et MDE. opérateurs de préfixe (mode), en conjonction avec une commande d'affichage d'agrégation (SUM, WRITE) est un champ de date intelligente ou numérique, afin de calculer le mode et la médiane statistiques des valeurs dans le champ.
Ces calculs ne sont pas supportés dans une commande DEFINE, avec les expressions WHERE ou IF, ni dans une commande de résumé. S'ils sont utilisés dans une requête multi-verbe, ils doivent être utilisés au plus bas niveau de l'agrégation.
La médiane est la valeur de milieux (50ème centile). S'il y a un nombre égal de valeurs, la médiane représente la moyenne du milieu des deux valeurs. Le mode est la valeur existant le plus fréquemment au sein d'un jeu de valeurs donné. Si aucune valeur n'existe plus fréquemment que les autres, MDE. renvoie la plus petite valeur.
La requête suivante sur la source de données EMPLOYEE affiche les salaires en cours et calcule la moyenne (moyen), la médiane, et le mode au sein de chaque département.
TABLE FILE EMPLOYEE SUM CURR_SAL AS 'INDIVIDUAL,SALARIES' AVE.CURR_SAL WITHIN DEPARTMENT AS 'DEPARTMENT,AVERAGE' MDN.CURR_SAL WITHIN DEPARTMENT AS 'DEPARTMENT,MEDIAN' MDE.CURR_SAL WITHIN DEPARTMENT AS 'DEPARTMENT,MODE' BY DEPARTMENT BY CURR_SAL NOPRINT BY LAST_NAME NOPRINT BY FIRST_NAME NOPRINT ON TABLE SET PAGE NOPAGE END
Les deux départements ont un nombre égal d'employés. Pour le département MIS, les deux valeurs de milieux sont les mêmes, faisant de cette valeur ($18,480.00) à la fois la médiane et le mode. Pour le département PRODUCTION, la médiane est représentée par la moyenne de deux valeurs de milieu ($16,100.00 et $21,120.00) et, puisqu'il n'existe pas de valeur dupliquées, le mode est la valeur la plus petite ($9,500.00).
Pour chaque valeur individuelle d'une colonne, PCT. calcule sa part de pourcentage dans la valeur totale de la colonne. Vous pouvez contrôler la façon dont les valeurs sont distribuées dans la colonne en utilisant la phrase BY pour trier la colonne. La nouvelle colonne de pourcentages est au même format que le champ original.
Vous pouvez aussi déterminer les pourcentages des valeurs de champ. Pour chaque valeur individuelle dans une ligne triée par la phrase ACROSS, l'opératuer RPCT. L'opérateur calcule quel pourcentage il crée pour la valeur totale de la ligne. Les valeurs de pourcentage sont au même format que le champ original.
Pour calculer la part des heures de formation de chaque employé, lancez la requête suivante :
TABLE FILE EMPLOYEE SUM ED_HRS PCT.ED_HRS BY LAST_NAME ON TABLE COLUMN-TOTAL END
La sortie est :
PCT LAST_NAME ED_HRS ED_HRS --------- ------ ------ BANNING .00 .00 BLACKWOOD 75.00 21.37 CROSS 45.00 12.82 GREENSPAN 25.00 7.12 IRVING 30.00 8.55 JONES 50.00 14.25 MCCOY .00 .00 MCKNIGHT 50.00 14.25 ROMANS 5.00 1.42 SMITH 46.00 13.11 STEVENS 25.00 7.12 TOTAL 351.00 100.00
Puisque PCT. et RPCT sont au même format que le champ, il est possible que la colonne ne totalise pas exactement 100 en raison de la nature de l'arithmétique de point flottant.
Cette requête calcule le total des unités vendues de chaque produit (la colonne UNIT_SOLD), ainsi que le pourcentage que compose le total par rapport à la somme de tous les produits vendus (la colonne RPCT.UNIT_SOLD) dans chaque ville.
TABLE FILE SALES SUM UNIT_SOLD RPCT.UNIT_SOLD ROW-TOTAL BY PROD_CODE ACROSS CITY WHERE CITY EQ 'NEW YORK' OR 'STAMFORD' END
La sortie est :
Comme la colonne UNIT_SOLD est au format de nombre entier, les colonnes créées par RPCT. sont aussi aux formats de nombre entier (I). Par conséquent, les pourcentages individuels peuvent être tronqués et le pourcentage total peut être inférieur à 100%. Si vous avez besoin des totaux précis, attribuez au champ un format utilisant les points de la décimale (D, F).
Lorsque vous comptez les occurences dans un fichier, un rapport commun doit déterminer le pourcentage relatif de chaque décompte de rangée dans le nombre total d'instances. Vous pouvez ce faire, uniquement pour les colonnes, en utilisant la syntaxe suivante :
PCT.CNT.fieldname
Le format est une valeur décimale à six chiffres avec deux décimales (F6.2).
Cette requête illustre le pourcentage relatif des valeurs du champ EMP_ID pour chaque département.
TABLE FILE EMPLOYEE SUM PCT.CNT.EMP_ID BY DEPARTMENT END
La sortie est :
PCT.CNT | |
DEPARTMENT ---------- | EMP_ID ------ |
MIS | 50.00 |
PRODUCTION | 50.00 |
Comment : Référence : |
L'opérateur préfixe distince (DST.). peut être utilisé pour agréger et lister des valeurs uniques de tout champ de source de données. Comparable aux opérateurs préfixe SQL COUNT, SUM, et AVG (la colonne DISTINCT) en ce qui est de fonctionnalité, l'opérateur .DST vous permet de déterminer le nombre total de valeurs individuelles en un seul passage de la source de données.
L'opérateur préfixe .DST peut être utilisé avec les commandes SUM, PRINT ou COUNT, et conjointement avec les opérateurs préfixe agrégés SUM., CNT. et AVE. Les opérateurs préfixe DST. multiples. ne sont pas pris en charge dans les requêtes TABLE et TABLEF. Ils sont pris en charge dans les requêtes qui utilisent les phrases BY, ACROSS, et FOR.
Notez que dans une requête qui utilise la commande PRINT et les opérateurs préfixe DST. multiples, vous devriez lancer la commande SET PRINTDST=NEW. Pour plus d'informations, consultez le guide DévelopperReportingApplications.
command DST.fieldname
ou
SUM [operator].DST.fieldname
où :
Le procédure demandant un compte des valeurs uniques ED_HRS est :
TABLE FILE EMPLOYEE SUM CNT.DST.ED_HRS END
ou
TABLE FILE EMPLOYEE COUNT DST.ED_HRS END
La sortie est :
COUNT DISTINCT ED_HRS -------- 9
Notez que le compte comprend des enregistrements pour les deux employés avec le nom de famille SMITH, mais exclut les seconds enregistrements pour les valeurs 50.00, 25.00, et .0, qui ont pour résultat neuf valeurs ED_HRS uniques.
La requête suivante contre la source de données GGSALES compte le nombre total d'enregistrements par région, puis le nombre d'enregistrements, de catégories distinctes, et de produits distincts par région et par état. L'opérateur .DST ou CNT.DST peut être utilisé qu'avec la dernière commande d'affichage :
TABLE FILE GGSALES COUNT CATEGORY AS 'TOTAL,COUNT' BY REGION SUM CNT.CATEGORY AS 'STATE,COUNT' CNT.DST.CATEGORY CNT.DST.PRODUCT BY REGION BY ST END
La sortie est :
COUNT COUNT TOTAL STATE DISTINCT DISTINCT Region COUNT State COUNT CATEGORY PRODUCT ------ ----- ----- ----- -------- -------- Midwest 1085 IL 362 3 9 MO 361 3 9 TX 362 3 9 Northeast 1084 CT 361 3 10 MA 360 3 10 NY 363 3 10 Southeast 1082 FL 361 3 10 GA 361 3 10 TN 360 3 10 West 1080 CA 721 3 10 WA 359 3 10
(FOC950) INVALID REFORMAT OPTION WITH COUNT OR CNT.
(FOC1853) CNT/SUM/AVE.DST CAN ONLY BE USED WITH AGGREGATION VERBS
(FOC1854) THE DST OPERATOR IS ONLY SUPPORTED IN TABLE REQUESTS
(FOC1862) REFORMAT DST.FIELD IS NOT SUPPORTED WITH PRINT
(FOC1864) THE DST OPERATOR IS NOT SUPPORTED WITH NOSPLIT
(FOC1867) DST OPERATOR MUST BE AT THE LOWEST LEVEL OF AGGREGATION
FST. est un préfixe qui affiche le premier des enregistrements récupérés sélectionné pour un champ donné. LST. affiche le dernier des enregistrements récupérés sélectionné pour un champ donné.
Lors de l'utilisation des opérateurs préfixes FST. et LST., il est indispensable que vous compreniez la structure de votre source de données.
Pour plus d'informations sur les types de segment et la conception de fichier, consultez Description de données en langage WebFOCUS . Si vous souhaitez réorganiser les données dans la source de données ou restructurer la source de données lors du reporting, consultez Amélioration du traitement de rapports.
La requête suivante récupère le premier enregistrement logique du champ EMP_ID :
TABLE FILE EMPLOYEE SUM FST.EMP_ID END
La sortie est :
FST EMP_ID ------ 071382660
La source de données EMPLOYEE contient le segment DEDUCT, qui met les champs DED_CODE et DED_AMT dans l'ordre croissant (type de segment S1). Le champ DED_CODE indique le type de déduction, telle que CITY, STATE, FED, et FICA. La requête suivante extrait le premier enregistrement logique du champ SALARY pour chaque employé :
TABLE FILE EMPLOYEE SUM FST.DED_CODE BY EMP_ID END
La sortie est :
FST EMP_ID DED_CODE ------ -------- 071382660 CITY 112847612 CITY 117593129 CITY 119265415 CITY 119329144 CITY 123764317 CITY 126724188 CITY 219984371 CITY 326179357 CITY 451123478 CITY 543729165 CITY 818692173 CITY
Il est important, cependant, de noter que la commande SUM LST.DED_CODE aurait récupéré le dernier enregistrement logique du champ DED_CODE pour chaque employé.
Si l'enregistrement est dans un segment dont les valeurs sont organisées dans l'ordre décroissant (type de segment SH1), le premier enregistrement logique récupéré par l'opérateur préfixe FST. est la plus grande valeur de l'ensemble de valeurs. L'opérateur préfixe LST. récupère donc la plus petite valeur de l'ensemble de valeurs.
Par exemple, la source de données EMPLOYEE contient le segment PAYINFO, qui met les champs JOBCODE, SALARY, PCT_INC et DAT_INC dans l'ordre décroissant (type de segment SH1). La requête suivante récupère le premier enregistrement logique du champ SALARY pour chaque employé :
TABLEF FILE EMPLOYEE SUM FST.SALARY BY EMP_ID END
La sortie est :
FST EMP_ID SALARY ------ ------ 071382660 $11,000.00 112847612 $13,200.00 117593129 $18,480.00 119265415 $9,500.00 119329144 $29,700.00 123764317 $26,862.00 126724188 $21,120.00 219984371 $18,480.00 326179357 $21,780.00 451123478 $16,100.00 543729165 $9,000.00 818692173 $27,062.00
Cependant, la commande SUM LST.SALARY aurait récupéré le dernier enregistrement logique du champ SALARY pour chaque employé.
Vous pouvez compter des instances et résumer des valeurs avec une seule commande d'affichage à l'aide des opérateurs préfixe CNT., SUM. et TOT. De la même façon que la commande COUNT, CNT. compte les instances du champ qu'il préfixe. De la même façon que la commande SUM, l'opérateur préfixe SUM. totalise les valeurs du champ qu'il précède. TOT. additionne les valeurs du champ qu'il précède lorsqu'il est utilisé dans un en-tête (y compris les pieds de page, les en-têtes secondaires et les pieds de page secondaires).
La requête suivante compte les instances du champ PRODUCT_ID, et additionne la valeur de UNIT_PRICE.
TABLE FILE GGPRODS SUM CNT.PRODUCT_ID AND UNIT_PRICE END
La sortie est :
Product Code Unit COUNT Price ------- ----- 10 660.00
La requête suivante compte les instances du champ PRODUCT_ID, et additionne la valeur de UNIT_PRICE.
TABLE FILE GGPRODS COUNT PRODUCT_ID AND SUM.UNIT_PRICE END
La sortie est :
Product Code Unit COUNT Price ------- ----- 10 660.00
La requête suivante utilise l'opérateur préfixe TOT pour montrer le total des salaires actuels pour tous les employés.
TABLE FILE EMPLOYEE PRINT LAST_NAME BY DEPARTMENT ON TABLE SUBFOOT "Total salaries equal: <TOT.CURR_SAL" END
La sortie est :
DEPARTMENT LAST_NAME ---------- --------- MIS SMITH JONES MCCOY BLACKWOOD GREENSPAN CROSS PRODUCTION STEVENS SMITH BANNING IRVING ROMANS MCKNIGHT Total salaries equal: $222,284.00
Comment : |
RANKED BY fieldname, utilisé dans une expression de tri d'une requête TABLE, trie non seulement les données par le champ spécifié, mais affecte une valeur RANK aux instances. L'opérateur préfixe RNK détermine également le classement tout en autorisant l'impression de la valeur RANK n'importe où sur la page. Vous utilisez cet opérateur en spécifiant RNK.fieldname, où fieldname est un champ BY dans la requête.
Le processus de classement a lieu après la sélection des enregistrements de tri. Donc, l'opérateur de préfixe RNK ne peut être utilisé dans un test de sélection WHERE ou IF ou dans un champ virtuel (DEFINE). Toutefois, RNK.fieldname peut être utilisé dans un test WHERE TOTAL ou TOTAL ou dans une valeur calculée (COMPUTE). Vous pouvez modifier le titre de colonne par défaut du champ de classement grâce à une phrase AS.
Vous pouvez appliquer l'opérateur RNK à des champs de tri multiples, auquel cas le classement de chaque champ BY est déterminé au sein de son champ BY de niveau supérieur.
Dans une commande PRINT, l'expression COMPUTE ou l'expression IF/WHERE TOTAL :
RNK.field ...
où :
La requête suivante classe les années de service dans un département et classe le salaire par année de service et département. Notez que la valeur Années de service dépend de la valeur de TODAY. La sortie pour cet exemple était valide lorsqu'il était exécuté en Septembre 2006 :
DEFINE FILE EMPDATA TODAY/YYMD = &YYMD; YRS_SERVICE/I9 = DATEDIF(HIREDATE,TODAY,'Y'); END TABLE FILE EMPDATA PRINT SALARY RNK.YRS_SERVICE AS 'RANKING,BY,SERVICE' RNK.SALARY AS 'SALARY,RANK' BY DEPT BY HIGHEST YRS_SERVICE BY HIGHEST SALARY NOPRINT WHERE DEPT EQ 'MARKETING' OR 'SALES' ON TABLE SET PAGE NOPAGE END
La sortie est :
RANKING BY SALARY DEPT YRS_SERVICE SALARY SERVICE RANK ---- ----------- ------ ------- ------ MARKETING 17 $55,500.00 1 1 $55,500.00 1 1 16 $62,500.00 2 1 $62,500.00 2 1 $62,500.00 2 1 $58,800.00 2 2 $52,000.00 2 3 $35,200.00 2 4 $32,300.00 2 5 15 $50,500.00 3 1 $43,400.00 3 2 SALES 17 $115,000.00 1 1 $54,100.00 1 2 16 $70,000.00 2 1 $43,000.00 2 2 15 $43,600.00 3 1 $39,000.00 3 2 15 $30,500.00 3 3
La requête affiche uniquement les lignes dont les deux salaires les plus élevés sont classés au sein de la catégorie années de service : Notez que la valeur Années de service dépend de la valeur de TODAY. La sortie pour cet exemple était valide lorsqu'il était exécuté en Septembre 2006 :
DEFINE FILE EMPDATA TODAY/YYMD = &YYMD; YRS_SERVICE/I9 = DATEDIF(HIREDATE,TODAY,'Y'); END TABLE FILE EMPDATA PRINT LASTNAME FIRSTNAME RNK.SALARY BY HIGHEST YRS_SERVICE BY HIGHEST SALARY WHERE TOTAL RNK.SALARY LE 2 END
La sortie est :
RANK YRS_SERVICE SALARY LASTNAME FIRSTNAME SALARY ----------- ------ -------- --------- ------ 17 $115,000.00 LASTRA KAREN 1 $80,500.00 NOZAWA JIM 2 16 $83,000.00 SANCHEZ EVELYN 1 $70,000.00 CASSANOVA LOIS 2 15 $62,500.00 HIRSCHMAN ROSE 1 WANG JOHN 1 $50,500.00 LEWIS CASSANDRA 2
La requête suivante affecte un indicateur Y aux enregistrements dont le classement de salaire de département est inférieur ou égal à 5 et dont le classement des années de service au sein du salaire et du département est inférieur ou égal à 6. Dans le cas contraire, l'indicateur a la valeur N. Notez que la valeur « années de service » dépend de la valeur de TODAY. La sortie pour cet exemple était valide lorsqu'il était exécuté en Septembre 2006 :
DEFINE FILE EMPDATA TODAY/YYMD = &YYMD; YRS_SERVICE/I9 = DATEDIF(HIREDATE,TODAY,'Y'); END TABLE FILE EMPDATA PRINT RNK.SALARY RNK.YRS_SERVICE COMPUTE FLAG/A1 = IF RNK.SALARY LE 5 AND RNK.YRS_SERVICE LE 6 THEN 'Y' ELSE 'N'; BY DEPT BY SALARY BY YRS_SERVICE WHERE DEPT EQ 'MARKETING' OR 'SALES' ON TABLE SET PAGE NOPAGE END
La sortie est :
RANK RANK DEPT SALARY YRS_SERVICE SALARY YRS_SERVICE FLAG ---- ------ ----------- ------ ----------- ---- MARKETING $32,300.00 16 1 1 Y $35,200.00 16 2 1 Y $43,400.00 15 3 1 Y $50,500.00 15 4 1 Y $52,000.00 16 5 1 Y $55,500.00 17 6 1 N 6 1 N $58,800.00 16 7 1 N $62,500.00 16 8 1 N 8 1 N 8 1 N SALES $30,500.00 15 1 1 Y $39,000.00 15 2 1 Y $43,000.00 16 3 1 Y $43,600.00 15 4 1 Y $54,100.00 17 5 1 Y $70,000.00 16 6 1 N $115,000.00 17 7 1 N
WebFOCUS |