How to: Reference: |
Use the WHEN clause in a TABLE request to conditionally display summary lines and formatting options for BY fields. The expression in the WHEN clause enables you to control where options such as SUBTOTAL and SUBFOOT appear in the report.
The WHEN clause is an extension of the ON phrase, and must follow the ON phrase to which it applies. One WHEN clause can be specified for each option in the ON phrase. Multiple WHEN clauses are also permitted.
Used with certain formatting options in a TABLE request, the WHEN clause controls when those formatting options are displayed. If a WHEN clause is not used, the formatting options are displayed whenever the sort field value changes.
Syntax for the WHEN clause is:
ON fieldname option WHEN expression[;]
where:
Is any one of the following options for the ON phrase in a TABLE:
|
RECAP |
PAGE-BREAK |
SUBHEAD |
|
RECOMPUTE |
REPAGE |
SUBFOOT |
|
SUBTOTAL |
SKIP-LINE |
SUB-TOTAL |
|
UNDER-LINE |
SUMMARIZE |
|
If the WHEN clause is used with SUBHEAD or SUBFOOT, it must be placed on the line following the text that is enclosed in double quotation marks (see Conditionally Formatting Reports With the WHEN Clause).
Is any Boolean expression that is valid on the right side of a COMPUTE expression (see Using Expressions).
Note:
In the following example, the WHEN clause prints a subfoot at the break for the field STORE_CODE only when the sum of PRODSALES exceeds $500:
DEFINE FILE SALES PRODSALES/D9.2M = UNIT_SOLD * RETAIL_PRICE; END TABLE FILE SALES SUM PRODSALES BY STORE_CODE ON STORE_CODE SUBFOOT "*** SALES FOR STORE <STORE_CODE EXCEED $500 ****" WHEN PRODSALES GT 500 END
The report output looks like this:
STORE_CODE PRODSALES ---------- --------- K1 $56.08 14B $535.34 *** SALES FOR STORE 14B EXCEED $500 **** 14Z $224.88 77F $151.85
You can print a report that selectively displays a SUBTOTAL and a SUBFOOT with two WHEN phrases:
TABLE FILE SALES PRINT UNIT_SOLD RETAIL_PRICE BY PROD_CODE ON PROD_CODE SUBTOTAL WHEN PROD_CODE CONTAINS 'B' SUBFOOT "PLEASE CHECK RECORDS FOR THIS PRODUCT GROUP" WHEN PROD_CODE CONTAINS 'C' END
The relevant parts of the output are:
PROD_CODE UNIT_SOLD RETAIL_PRICE
--------- --------- ------------
B10 60 $.95
30 $.85
13 $.99
*TOTAL B10
103 $2.79
B12 40 $1.29
29 $1.49
*TOTAL B12
69 $2.78
B17 29 $1.89
20 $1.89
*TOTAL B17
49 $3.78
.
.
.
C13 25 $1.99
PLEASE CHECK RECORDS FOR THIS PRODUCT GROUP
C17 12 $2.09
PLEASE CHECK RECORDS FOR THIS PRODUCT GROUP
.
.
.
In the following example, a different subhead is displayed depending on the value of the BY field. If the value of PROD_CODE contains the literal B, C, or E, the subhead CURRENT PRODUCT LINE is displayed. If PROD_CODE contains the literal D, the subhead DISCONTINUED PRODUCT is displayed.
TABLE FILE SALES PRINT UNIT_SOLD RETAIL_PRICE BY PROD_CODE ON PROD_CODE SUBHEAD "CURRENT PRODUCT LINE" WHEN PROD_CODE CONTAINS 'B' OR 'C' OR 'E' SUBHEAD "DISCONTINUED PRODUCT" WHEN PROD_CODE CONTAINS 'D' END
This produces the following report:
PROD_CODE UNIT_SOLD RETAIL_PRICE
--------- --------- ------------
CURRENT PRODUCT LINE
B10 60 $.95
30 $.85
13 $.99
CURRENT PRODUCT LINE
B12 40 $1.29
29 $1.49
CURRENT PRODUCT LINE
B17 29 $1.89
20 $1.89
CURRENT PRODUCT LINE
B20 15 $1.99
25 $2.09
CURRENT PRODUCT LINE
C13 25 $1.99
CURRENT PRODUCT LINE
C17 12 $2.09
CURRENT PRODUCT LINE
C7 45 $2.39
40 $2.49
DISCONTINUED PRODUCT
D12 27 $2.19
20 $2.09
CURRENT PRODUCT LINE
E1 30 $.89
CURRENT PRODUCT LINE
E2 80 $.99
CURRENT PRODUCT LINE
E3 70 $1.09
35 $1.09
In the following example, a subtotal is calculated for each PROD_CODE, but the subfoot is displayed only when PROD_CODE contains the literal B:
SET PAGE-NUM = OFF SET SCREEN = PAPER -RUN TABLE FILE SALES PRINT UNIT_SOLD RETAIL_PRICE BY PROD_CODE ON PROD_CODE SUBTOTAL AND SUBFOOT "PLEASE CHECK RECORDS FOR THIS PRODUCT GROUP" " " WHEN PROD_CODE CONTAINS 'B' END
The partial output is:
PROD_CODE UNIT_SOLD RETAIL_PRICE
--------- --------- ------------
B10 60 $.95
30 $.85
13 $.99
*TOTAL B10
103 $2.79
PLEASE CHECK RECORDS FOR THIS PRODUCT GROUP
B12 40 $1.29
29 $1.49
*TOTAL B12
69 $2.78
PLEASE CHECK RECORDS FOR THIS PRODUCT GROUP
B17 29 $1.89
20 $1.89
*TOTAL B17
49 $3.78
PLEASE CHECK RECORDS FOR THIS PRODUCT GROUP
B20 15 $1.99
25 $2.09
*TOTAL B20
40 $4.08
PLEASE CHECK RECORDS FOR THIS PRODUCT GROUP
C13 25 $1.99
*TOTAL C13
25 $1.99
C17 12 $2.09
*TOTAL C17
12 $2.09
The following request prints a subfoot depending on the sum of the UNIT_SOLD field. Each subfoot displays the subtotal of the UNIT_SOLD field within its sort group:
TABLE FILE SALES SUM UNIT_SOLD BY STORE_CODE BY PROD_CODE ON STORE_CODE SUBFOOT "SELLING ABOVE QUOTA <ST.UNIT_SOLD " " " WHEN UNIT_SOLD GT 100 SUBFOOT "SELLING AT QUOTA <ST.UNIT_SOLD" " " WHEN UNIT_SOLD GE 40 AND UNIT_SOLD LT 100 SUBFOOT "SELLING BELOW QUOTA <ST.UNIT_SOLD" " " WHEN UNIT_SOLD LT 40 END
The output is:
STORE_CODE PROD_CODE UNIT_SOLD
---------- --------- ---------
K1 B10 13
B12 29
SELLING AT QUOTA 42
14B B10 60
B12 40
B17 29
C13 25
C7 45
D12 27
E2 80
E3 70
SELLING ABOVE QUOTA 376
14Z B10 30
B17 20
B20 15
C17 12
D12 20
E1 30
14Z E3 35
SELLING ABOVE QUOTA 162
77F B20 25
C7 40
SELLING AT QUOTA 65
| Information Builders |