Dynamic Report Sorting

When you wish to provide customers with a generic report offering a limited number of sort options, here is a simple but elegant way to do so. Remember that FOCUS limits you to 32 BY fields.

-DEFAULT &S1=' ', &S2=' ', &S3=' ', &S4=' '
-DEFAULT &BY1=' ', &BY2=' ', &BY3=' ', &BY4=' '

-* USE A SIMPLE CRTFORM TO GET THE DESIRED SORT ORDER FROM YOUR USERS.

-CRTFORM LINE 1
-"ENTER THE NUMBER OF THE ORDER YOU WANT YOUR REPORT SORTED BY:"
-"  "
-"COUNTRY:<&S1>  CAR:<&S2>  MODEL:<&S3>  BODYTYPE:<&S4>"
-"  "
-"PRESS ENTER TO CONTINUE"

-* USE THE SEQUENCE NUMBER ENTERED BY THE USER AS A VARIABLE TO GENERATE
-* THE BY POSITION AND ASSOCIATE THE CORRECT FIELDNAME TO THAT POSITION.

-* THIS IS THE QUICK TIP:
-SET &CTR=0;
-LAB1
-SET &CTR=&CTR+1;
-SET &POSITION=&S.&CTR;
-SET &FLD=DECODE &CTR(1 'COUNTRY' 2 'CAR' 3 'MODEL' 4 'BODYTYPE' ELSE ' ');
-SET &BY.&POSITION=IF &FLD NE ' ' THEN 'BY ' | &FLD  ELSE ' ' ;
-IF &CTR LT 4 GOTO LAB1;

TABLE FILE CAR
SUM SALES AS 'UNITS'
&BY1   &BY2
&BY3   &BY4
WHERE UNITS NE 0
END
-RUN

Back Next