As of December 1, 2020, Focal Point is retired and repurposed as a reference repository. We value the wealth of knowledge that's been shared here over the years. You'll continue to have access to this treasure trove of knowledge, for search purposes only.

Join the TIBCO Community TIBCO Community is a collaborative space for users to share knowledge and support one another in making the best use of TIBCO products and services. There are several TIBCO WebFOCUS resources in the community.

From the Home page, select Predict: WebFOCUS to view articles, questions, and trending articles.

Select Products from the top navigation bar, scroll, and then select the TIBCO WebFOCUS product page to view product overview, articles, and discussions.

Request access to the private WebFOCUS User Group (login required) to network with fellow members.

Former myibi community members should have received an email on 8/3/22 to activate their user accounts to join the community. Check your Spam folder for the email. Please get in touch with us at community@tibco.com for further assistance. Reference the community FAQ to learn more about the community.

Currently my procedure masks values less than 5, and it works great in my printed table. However, the point of masking the cells is so no one who accesses our public-facing portal can deduce the masked value. Therefore, I need a secondary suppression. Here is how the data looks right now:

If someone looks at the data for the first, fifth or sixth columns, all the person would have to do is subtract the other numbers from the total and the masked value is known. I need a way to place a secondary suppression on the columns.

Does anyone have any ideas as to the best way to accomplish this objective?

Basically, in this example I need to mask the 6 in the first column, the five in fifth column and the 7 in the sixth column.

So, I'd like a way to look at the next minimum number in the column and mask it but only when there is only one data point that is masked. The second through fourth columns work fine with the current suppression technique as listed below in the code like this:

DEFINE FILE EXTDATA
SALES/D20 MISSING ON NEEDS ALL DATA = IF SALES LE 15 THEN MISSING ELSE SALES;
END

Below is my code. I'd appreciate any suggestions.

DEFINE FILE CAR
SALESSET/I4 = EDIT(SALES_YEAR);
YR /YY = SALESSET;
END
-SET &MAXYR = &YR;
-SET &MINYR = &MAXYR-5;
TABLE FILE CAR
-* SET values for small protect processing and -INCLUDE.
-* Some choices are optional.
-*INCLUDE small_cell_protect_5
-*-----------------------------------------------------------------------------------------------
SUM
SUM.CAR.SALES
BY CAR.COUNTRY
BY CAR.DEALERSHIP
BY CAR.SALES_YEAR
BY CAR.YR
BY LOWEST CAR.CAR.SALES
WHERE ( CAR.SALES_QTR EQ 'First' )
WHERE CAR.DEALERSHIP EQ &DEALERSHIP.(FIND CAR.DEALERSHIP IN CAR|FORMAT=A66V).DEALERSHIP:.QUOTEDSTRING;
WHERE (CAR.YR GE &MINYR);
WHERE (CAR.YR LE &MAXYR);
ON TABLE HOLD AS EXTDATA FORMAT FOCUS
-*ON TABLE PCHOLD FORMAT HTML
END
-RUN
-* EXTRACT MAXIMUM YEAR IN A VARIABLE
-DEFAULTH &YRMAX = 0
TABLE FILE EXTDATA
SUM MAX.YR/I4 AS 'YRMAX'
ON TABLE HOLD AS MAXYR FORMAT BINARY
END
-RUN
-READFILE MAXYR
-SET &YRMAX = &YRMAX;
-TYPE &YRMAX
-* EXTRACT ALL INDIVIDUAL YEARS IN A VARIABLE
-DEFAULTH &EXTYR = 0
TABLE FILE EXTDATA
BY YR/I4 AS 'EXTYR'
ON TABLE HOLD AS YRLIST FORMAT BINARY
END
-RUN
-SET &NBYR = &LINES;
-REPEAT READYR FOR &I FROM 1 TO &NBYR STEP 1
-DEFAULTH &YR.&I = 0
-READFILE YRLIST
-SET &YR.&I = &EXTYR;
-TYPE &YR.&I
-READYR
DEFINE FILE EXTDATA
SALES/D20 MISSING ON NEEDS ALL DATA = IF SALES LE 15 THEN MISSING ELSE SALES;
END
-*Below is where I need to figure out how to do a secondary suppression if the value is less than 10
-* CALCULATE INCREASE PCT FOR DETAILED ROWS
TABLE FILE EXTDATA
SUM
SALES/D20
COMPUTE LAG_A1/P9C MISSING ON = IF SALES EQ LAST SALES THEN LAST SALES ELSE MISSING;
COMPUTE LAG_A2/P9C MISSING ON = IF SALES EQ LAST SALES THEN LAST LAG_A1 ELSE MISSING;
COMPUTE LAG_A3/P9C MISSING ON = IF SALES EQ LAST SALES THEN LAST LAG_A2 ELSE MISSING;
COMPUTE LAG_A4/P9C MISSING ON = IF SALES EQ LAST SALES THEN LAST LAG_A3 ELSE MISSING;
COMPUTE LAG_A5/P9C MISSING ON = IF SALES EQ LAST SALES THEN LAST LAG_A4 ELSE MISSING;
COMPUTE ONEPCTCHG/P6% MISSING ON = IF LAG_A1 GT 0 AND SALES GT 0 THEN (SALES - LAG_A1)/ LAG_A1 * 100 ELSE MISSING;
COMPUTE FIVEPCTCHG/P6% MISSING ON = IF LAG_A5 GT 0 AND SALES GT 0 THEN (SALES - LAG_A5)/ LAG_A5 * 100 ELSE MISSING;
BY COUNTRY
BY DEALERSHIP
BY TOTAL COMPUTE ROWID/I2 = 1;
BY SALES/A46V
BY YR
ON TABLE HOLD AS DETDATA FORMAT FOCUS
-*ON TABLE PCHOLD FORMAT HTML
END
-RUN
END
-* CALCULATE INCREASE PCT FOR DETAILED ROWS
TABLE FILE EXTDATA
SUM
SALES/D20
COMPUTE LAG_A1/P9C MISSING ON = IF SALES EQ LAST SALES THEN LAST SALES ELSE MISSING;
COMPUTE LAG_A2/P9C MISSING ON = IF SALES EQ LAST SALES THEN LAST LAG_A1 ELSE MISSING;
COMPUTE LAG_A3/P9C MISSING ON = IF SALES EQ LAST SALES THEN LAST LAG_A2 ELSE MISSING;
COMPUTE LAG_A4/P9C MISSING ON = IF SALES EQ LAST SALES THEN LAST LAG_A3 ELSE MISSING;
COMPUTE LAG_A5/P9C MISSING ON = IF SALES EQ LAST SALES THEN LAST LAG_A4 ELSE MISSING;
COMPUTE ONEPCTCHG/P6% MISSING ON = IF LAG_A1 GT 0 AND SALES GT 0 THEN (SALES - LAG_A1)/ LAG_A1 * 100 ELSE MISSING;
COMPUTE FIVEPCTCHG/P6% MISSING ON = IF LAG_A5 GT 0 AND SALES GT 0 THEN (SALES - LAG_A5)/ LAG_A5 * 100 ELSE MISSING;
BY COUNTRY
BY DEALERSHIP
BY TOTAL COMPUTE ROWID/I2 = 5;
BY TOTAL COMPUTE SORT/A66V = 'Total';
BY TOTAL COMPUTE SALES/A46V = 'Total';
BY YR
ON TABLE HOLD AS TOTDATA FORMAT FOCUS
-*ON TABLE PCHOLD FORMAT HTML
END
-RUN
END
TABLE FILE DETDATA
PRINT
SALES
LAG_A1
LAG_A2
LAG_A3
LAG_A4
LAG_A5
ONEPCTCHG
FIVEPCTCHG
BY COUNTRY
BY DEALERSHIP
BY ROWID
BY SORT
BY SALES
BY YR
ON TABLE HOLD AS RPTDATA FORMAT FOCUS
-*ON TABLE PCHOLD FORMAT HTML
MORE
FILE TOTDATA
END
-RUN
-GOTO LBL_PRINT;
-******PRINT SECTION BEGINS HERE ******
-LBL_PRINT
-DEFAULTH &YR1 = 0, &YR2 = 0, &YR3 = 0, &YR4 = 0, &YR5 = 0, &YR6 = 0;
DEFINE FILE RPTDATA
COL1/D12C MISSING ON = IF YR EQ &YR1.EVAL THEN SALES ELSE MISSING;
COL2/D12C MISSING ON = IF YR EQ &YR2.EVAL THEN SALES ELSE MISSING;
COL3/D12C MISSING ON = IF YR EQ &YR3.EVAL THEN SALES ELSE MISSING;
COL4/D12C MISSING ON = IF YR EQ &YR4.EVAL THEN SALES ELSE MISSING;
COL5/D12C MISSING ON = IF YR EQ &YR5.EVAL THEN SALES ELSE MISSING;
COL6/D12C MISSING ON = IF YR EQ &YR6.EVAL THEN SALES ELSE MISSING;
COL7/P6C% MISSING ON = IF YR EQ &YR6.EVAL THEN ONEPCTCHG ELSE MISSING;
COL8/P6C% MISSING ON = IF YR EQ &YR6.EVAL THEN FIVEPCTCHG ELSE MISSING;
END
TABLE FILE RPTDATA
SUM
COL1 AS '&YR1.EVAL'
COL2 AS '&YR2.EVAL'
COL3 AS '&YR3.EVAL'
COL4 AS '&YR4.EVAL'
COL5 AS '&YR5.EVAL'
COL6 AS '&YR6.EVAL'
COL7 AS '1 Year Chg'
COL8 AS '5 Year Chg'
BY COUNTRY NOPRINT
BY DEALERSHIP AS 'Dealer'
BY ROWID NOPRINT
BY SALES/A46V AS 'SALES'
ON TABLE SUBHEAD
"Sales Summary"
"Years &MINYR - &MAXYR"
"&DEALERSHIP"
FOOTING
" Source Notes"
ON TABLE SET PAGE-NUM NOLEAD
ON TABLE NOTOTAL
ON TABLE PCHOLD FORMAT HTML
ON TABLE SET HTMLCSS ON
ON TABLE SET STYLE *
ENDSTYLE
END
-RUN
-LBL_END;

This message has been edited. Last edited by: FP Mod Chuck,

Everyone, Over the weekend, I came up with another way to explain this using Excel terminology.

In Excel you can use a combination of min and small to find the minimum and then the next smallest value.

What I'm trying to accomplish is similar. I'm trying to mask cells less or equal to 4. If there is only one such cell in a column, I want to mask the next smallest number.