Dans cette section : Comment : |
La notation de colonne attribue un numéro de colonne séquentiel à chaque colonne de la matrice interne créée pour une requête de rapport. Si vous souhaitez contrôler la création des numéros de référence de colonne pour les colonnes utilisées dans votre rapport, utilisez la commande de notation de colonne CNOTATION.
Comme les numéros de colonne font référence aux colonnes dans la matrice interne, ils sont attribués après que la récupération et l'agrégation de données soient terminées. Les colonnes créées et affichées dans un rapport sont stockées dans la matrice interne, et celles qui ne sont pas affichées dans un rapport peuvent aussi être générées et stockées dans la matrice interne. Les colonnes stockées dans la matrice interne comprennent les valeurs calculées, les valeurs de champ recalculées, les champs BY, les champs avec l'option NOPRINT et certains calculs RECAP, tels que FORECAST et REGRESS. On attribue un numéro de colonne par défaut à toutes les deux colonnes dans la matrice interne, ce qui implique de rendre compte de toutes les colonnes générées à l'intérieur si vous souhaitez faire référence à la valeur de colonne appropriée dans votre requête.
Vous pouvez modifier l'attribution par défaut des numéros de référence à l'aide de la commande SET CNOTATION qui ne peut attribuer des numéros de colonnes qu'aux colonnes qui s'affichent dans la sortie du rapport ou à tous les champs référencés dans le requête du rapport. Vous pouvez employer la notation de colonne dans les commandes COMPUTE et RECAP afin de faire référence à ces colonnes dans votre requête.
SET CNOTATION={ALL|PRINTONLY|EXPLICIT}
où :
Référence : |
Pour créer une référence de colonne dans une requête, vous pouvez :
Dans la requête suivante contenant CNOTATION=ALL, le produit de C1 et C2 ne calcule pas TRANSTOT multiplié par QUANTITY car le reformatage génère des colonnes supplémentaires.
SET CNOTATION = ALL TABLE FILE VIDEOTRK SUM TRANSTOT/D12.2 QUANTITY/D12.2 AND COMPUTE PRODUCT = C1 * C2; BY TRANSDATE END
La sortie est :
TRANSDATE TRANSTOT QUANTITY PRODUCT --------- -------- -------- ------- 91/06/17 57.03 12.00 3,252.42 91/06/18 21.25 2.00 451.56 91/06/19 38.17 5.00 1,456.95 91/06/20 14.23 3.00 202.49 91/06/21 44.72 7.00 1,999.88 91/06/24 126.28 12.00 15,946.63 91/06/25 47.74 8.00 2,279.11 91/06/26 40.97 2.00 1,678.54 91/06/27 60.24 9.00 3,628.85 91/06/28 31.00 3.00 961.00
Comme les champs BY n'ont pas de référence de colonne, la première référence de colonne est pour TRANSTOT, à son format d'origine, suivi de la version reformatée. La prochaine référence est pour QUANTITY, à son format d'origine, suivi de la version reformatée. La dernière référence est pour la valeur calculée, PRODUCT.
La définition de CNOTATION=PRINTONLY attribue des références de colonne uniquement aux colonnes de sortie. Dans ce cas, le produit de C1 et C2 calcule TRANSTOT multiplié par QUANTITY.
SET CNOTATION = PRINTONLY TABLE FILE VIDEOTRK SUM TRANSTOT/D12.2 QUANTITY/D12.2 AND COMPUTE PRODUCT = C1 * C2; BY TRANSDATE END
La sortie est :
TRANSDATE TRANSTOT QUANTITY PRODUCT --------- -------- -------- ------- 91/06/17 57.03 12.00 684.36 91/06/18 21.25 2.00 42.50 91/06/19 38.17 5.00 190.85 91/06/20 14.23 3.00 42.69 91/06/21 44.72 7.00 313.04 91/06/24 126.28 12.00 1,515.36 91/06/25 47.74 8.00 381.92 91/06/26 40.97 2.00 81.94 91/06/27 60.24 9.00 542.16 91/06/28 31.00 3.00 93.00
Dans la requête suivante, le reformatage de champs génère des colonnes supplémentaires dans la matrice interne. Dans la deuxième expression RECAP, notez qu'en raison de la définition CNOTATION :
SET CNOTATION=PRINTONLY DEFINE FILE LEDGER CUR_YR/I5C=AMOUNT; LAST_YR/I5C=.87*CUR_YR - 142; END TABLE FILE LEDGER SUM CUR_YR/F9.2 AS 'CURRENT,YEAR' LAST_YR/F9.2 AS 'LAST,YEAR' FOR ACCOUNT 1010 AS 'CASH ON HAND' OVER 1020 AS 'DEMAND DEPOSITS' OVER 1030 AS 'TIME DEPOSITS' OVER BAR OVER RECAP TOTCASH/F9.2C= R1 + R2 + R3; AS 'TOTAL CASH' OVER " " OVER RECAP GROCASH(2)/F9.2C=100*TOTCASH(1)/TOTCASH(2) - 100; AS 'CASH GROWTH(%)' END
La sortie est :
CURRENT
YEAR | LAST
YEAR | |
CASH ON HAND | 8784.00 | 7216.00 |
DEMAND DEPOSITS | 4494.00 | 3483.00 |
TIME DEPOSITS | 7961.00 | 6499.00 |
-------- | -------- | |
TOTAL CASH | 21239.00 | 17198.00 |
CASH GROWTH(%) | 23.50 |
Dans cet exemple, le calcul RECAP pour ATOT s'effectue uniquement pour les colonnes 2 et 3 affichées, comme le spécifie la requête. Aucun calcul ne s'effectue pour la colonne 1.
SET CNOTATION=PRINTONLY DEFINE FILE LEDGER CUR_YR/I5C=AMOUNT; LAST_YR/I5C=.87*CUR_YR - 142; NEXT_YR/I5C=1.13*CUR_YR + 222; END TABLE FILE LEDGER SUM NEXT_YR/F9.2 CUR_YR/F9.2 LAST_YR/F9.2 FOR ACCOUNT 10$$ AS 'CASH' OVER 1100 AS 'ACCOUNTS RECEIVABLE' OVER 1200 AS 'INVENTORY' OVER BAR OVER RECAP ATOT(2,3)/I5C = R1 + R2 + R3; AS 'ASSETS ACTUAL' END
La sortie est :
NEXT_YR | CUR_YR | LAST_YR | |
CASH | 25992.00 | 21239.00 | 17198.00 |
ACCOUNTS RECEIVABLE | 21941.00 | 18829.00 | 15954.00 |
INVENTORY | 31522.00 | 27307.00 | 23329.00 |
-------- | -------- | -------- | |
ASSETS ACTUAL | 67,375 | 56,478 |
Cet exemple calcule le changement d'argent liquide (CHGCASH) pour les colonnes 1 et 2.
SET CNOTATION=PRINTONLY DEFINE FILE LEDGER CUR_YR/I5C=AMOUNT; LAST_YR/I5C=.87*CUR_YR - 142; NEXT_YR/I5C=1.13*CUR_YR + 222; END TABLE FILE LEDGER SUM NEXT_YR/F9.2 CUR_YR/F9.2 LAST_YR/F9.2 FOR ACCOUNT 10$$ AS 'TOTAL CASH' LABEL TOTCASH OVER " " OVER RECAP CHGCASH(1,2)/I5SC = TOTCASH(*) - TOTCASH(*+1); AS 'CHANGE IN CASH' END
La sortie est :
NEXT_YR | CUR_YR | LAST_YR | |
TOTAL CASH | 25992.00 | 21239.00 | 17198.00 |
CHANGE IN CASH | 4,752 | 4,044 |
Dans cette requête, deux expressions RECAP tirent des variances (EVAR et WVAR) en soustrayant des valeurs de quatre colonnes affichées (1, 2, 3, 4) sur la ligne 3 (PROFIT) ; ces valeurs sont identifiées en utilisant la notation de cellule (r,c).
SET CNOTATION=PRINTONLY TABLE FILE REGION SUM E_ACTUAL/F9.2 E_BUDGET/F9.2 W_ACTUAL/F9.2 W_BUDGET/F9.2 FOR ACCOUNT 3000 AS 'SALES' OVER 3100 AS 'COST' OVER BAR OVER RECAP PROFIT/I5C = R1 - R2; OVER " " OVER RECAP EVAR(1)/I5C = E(3,1) - E(3,2); AS 'EAST VARIANCE' OVER RECAP WVAR(3)/I5C = E(3,3) - E(3,4); AS 'WEST VARIANCE' END
La sortie est :
La requête suivante comprend un champ non imprimé, plusieurs champs reformatés et trois valeurs calculées. Où SET CNOTATION=PRINTONLY, les références de colonne produisent la sortie correcte.
SET CNOTATION = PRINTONLY DEFINE FILE LEDGER CUR_YR/I5C=AMOUNT; LAST_YR/I5C=.87*CUR_YR - 142; NEXT_YR/I5C=1.13*CUR_YR + 222; END TABLE FILE LEDGER SUM NEXT_YR NOPRINT CUR_YR COMPUTE AMT2/D6 = AMOUNT *2; LAST_YR/D5 AMOUNT NEXT_YR COMPUTE AMT3/D6 = AMOUNT*3; COMPUTE AMT4/D6 = AMOUNT*4; FOR ACCOUNT 10$$ AS 'CASH' OVER 1100 AS 'ACCTS. REC.' OVER 1200 AS 'INVENTORY' OVER BAR OVER RECAP ATOT/I8C = R1 + R2 + R3; AS 'TOTAL' OVER RECAP DIFF(2,10,2)/D8 = ATOT(*) - ATOT(*-1); END
La sortie est :
La requête suivante, totalise TRANSTOT, QUANTITY et TRANSCODE par TRANSDATE. TRANSTOT dispose de l'option NOPRINT, donc TRANSTOT ne s'affiche pas dans la sortie de rapport. La requête calcule également les champs suivants grâce aux commandes COMPUTE :
SET CNOTATION = ALL TABLE FILE VIDEOTRK SUM TRANSTOT/D7.2 NOPRINT QUANTITY/D7.2 TRANSCODE COMPUTE TTOT2/D7.2 = C1; COMPUTE UNIT_COST1/D7.2 = C1/C2; COMPUTE UNIT_COST2/D7.2 = C1/QUANTITY; BY TRANSDATE END
Dans cette requête, seule CNOTATION=EXPLICIT crée la sortie correcte. L'explication suivante illustre pourquoi le paramètre EXPLICIT est nécessaire.
Avec CNOTATION=ALL, tous les champs dans la matrice interne ont des numéros de colonnes qui leur sont attribué. La requête crée les références de colonnes en particulier :
UNIT_COST1 est C1/C2. Ces numéros de colonne ont tous deux été attribués à TRANSTOT, de sorte que UNIT_COST1 soit toujours égal à 1. UNIT_COST2 est C1 (TRANSTOT) divisé par QUANTITY. La sortie est :
TRANSDATE QUANTITY TRANSCODE TTOT2 UNIT_COST1 UNIT_COST2 --------- -------- --------- ----- ---------- ---------- 91/06/17 12.00 10 57.03 1.00 4.75 91/06/18 2.00 2 21.25 1.00 10.63 91/06/19 5.00 4 38.17 1.00 7.63 91/06/20 3.00 3 14.23 1.00 4.74 91/06/21 7.00 6 44.72 1.00 6.39 91/06/24 12.00 9 126.28 1.00 10.52 91/06/25 8.00 7 47.74 1.00 5.97 91/06/26 2.00 2 40.97 1.00 20.48 91/06/27 9.00 7 60.24 1.00 6.69 91/06/28 3.00 3 31.00 1.00 10.33
Avec CNOTATION = PRINTONLY, le champ TRANSTOT, qui contient l'option NOPRINT, n'a aucun numéro de colonne qui lui est attribué. Aucun numéro de colonne n'est affecté à QUANTITY avec son format original car il ne s'affiche pas dans la sortie de rapport. Le champ reformaté QUANTITY s'affiche et un numéro de colonne lui est attribué. Donc, la requête crée les références de colonnes suivantes :
UNIT_COST1 est C1/C2, QUANTITY/TRANSCODE. UNIT_COST2 est C1 (QUANTITY) divisé par QUANTITY. Donc UNIT_COST2 est toujours égal à 1. La sortie est :
TRANSDATE QUANTITY TRANSCODE TTOT2 UNIT_COST1 UNIT_COST2 --------- -------- --------- ----- ---------- ---------- 91/06/17 12.00 10 12.00 1.20 1.00 91/06/18 2.00 2 2.00 1.00 1.00 91/06/19 5.00 4 5.00 1.25 1.00 91/06/20 3.00 3 3.00 1.00 1.00 91/06/21 7.00 6 7.00 1.17 1.00 91/06/24 12.00 9 12.00 1.33 1.00 91/06/25 8.00 7 8.00 1.14 1.00 91/06/26 2.00 2 2.00 1.00 1.00 91/06/27 9.00 7 9.00 1.29 1.00 91/06/28 3.00 3 3.00 1.00 1.00
Comme CNOTATION = EXPLICIT, le champ TRANSTOT reformaté est explicitement référencé dans la requête, un numéro de colonne lui est donc attribué bien qu'il ne s'affiche pas. Toutefois, aucun numéro de colonne n'est attribué au champ TRANSTOT avec son format original. Aucun numéro de colonne n'est attribué au champ QUANTITY avec son format orignal car il n'est pas explicitement référencé dans la requête. Un numéro de colonne est attribué au champ QUANTITY reformaté. Donc, la requête crée les références de colonnes suivantes :
UNIT_COST1 est C1/C2, TRANSTOT/QUANTITY. UNIT_COST2 est C1 (TRANSTOT) divisé par QUANTITY. Donc UNIT_COST2 est toujours égal à 1. La sortie est :
TRANSDATE QUANTITY TRANSCODE TTOT2 UNIT_COST1 UNIT_COST2 --------- -------- --------- ----- ---------- ---------- 91/06/17 12.00 10 57.03 4.75 4.75 91/06/18 2.00 2 21.25 10.63 10.63 91/06/19 5.00 4 38.17 7.63 7.63 91/06/20 3.00 3 14.23 4.74 4.74 91/06/21 7.00 6 44.72 6.39 6.39 91/06/24 12.00 9 126.28 10.52 10.52 91/06/25 8.00 7 47.74 5.97 5.97 91/06/26 2.00 2 40.97 20.48 20.48 91/06/27 9.00 7 60.24 6.69 6.69 91/06/28 3.00 3 31.00 10.33 10.33
Dans la requête suivante, CUR_YR dispose de l'option NOPRINT. L'expression CHGCASH RECAP est supposée soustraire CUR_YR de LAST_YR et NEXT_YR.
SET CNOTATION = ALL DEFINE FILE LEDGER CUR_YR/I7C = AMOUNT; LAST_YR/I5C = .87*CUR_YR - 142; NEXT_YR/I5C = 1.13*CUR_YR + 222; END TABLE FILE LEDGER SUM CUR_YR/I5C NOPRINT LAST_YR NEXT_YR FOR ACCOUNT 10$$ AS 'TOTAL CASH ' LABEL TOTCASH OVER " " OVER RECAP CHGCASH(1,3)/I5SC=(TOTCASH(*) - TOTCASH(1)); AS 'CHANGE FROM CURRENT' END
Lorsque CNOTATION = ALL, C1 désigne le champ CUR_YR avec son format original, C2 désigne la valeur reformatée, C3 est LAST_YR et C4 est NEXT_YR. Comme il y a une colonne supplémentaire et que RECAP fait référence uniquement aux colonnes 1 et 3, le calcul pour NEXT_YR - CUR_YR n'est pas effectué. La sortie est :
LAST_YR NEXT_YR ------- ------- TOTAL CASH 17,195 25,991 CHANGE FROM CURRENT -4,044
Lorsque CNOTATION = PRINTONLY, aucun numéro de colonne n'est attribué au champ CUR_YR. Il n'y a donc pas de colonne 3. Aucun calcul n'est donc effectué. La sortie est :
LAST_YR NEXT_YR ------- ------- TOTAL CASH 17,195 25,991 CHANGE FROM CURRENT
Lorsque CNOTATION = EXPLICIT, la version reformatée du champ CUR_YR est C1 parce qu'elle est référencée dans la requête, bien qu'elle ne soit pas affichée. Les deux calculs sont effectués correctement. La sortie est :
LAST_YR NEXT_YR ------- ------- TOTAL CASH 17,195 25,991 CHANGE FROM CURRENT -4,044 4,752
Dans ces cas, il est impossible de savoir à l'avance combien de colonnes sont générées par la syntaxe. Utiliser un numéro de colonne en dehors de la plage dans un tout autre contexte génère le message suivant :
(FOC258) FIELDNAME OR COMPUTATIONAL ELEMENT NOT RECOGNIZED: column
WebFOCUS |