Can anyone explain why the "FRANCE_MAX_RTL_COST2" defined field does not generate properly when you try to specify a value?
TABLE FILE CAR
SUM MAX.RETAIL_COST AS MAX_RETAIL_COST
MIN.RETAIL_COST AS MIN_RETAIL_COST
MAX.DEALER_COST AS MAX_DEALER_COST
MIN.DEALER_COST AS MIN_DEALER_COST
RETAIL_COST AS SUM_RETAIL_COST
BY COUNTRY
ON TABLE SET ASNAMES ON
ON TABLE HOLD AS HCNTRYSUM
END
-RUN
TABLE FILE HCNTRYSUM
PRINT *
END
DEFINE FUNCTION MAX_RETAIL_COST (CNTRY/A10)
MAX_RETAIL_COST/D20.2 = DB_LOOKUP(HCNTRYSUM, CNTRY, COUNTRY, MAX_RETAIL_COST);
END
DEFINE FILE CAR
LOOKUP/A10 = 'FRANCE';
FRANCE_MAX_RTL_COST2/D20.1 = MAX_RETAIL_COST (LOOKUP);
MAX_RTL_COST/D20.1 = MAX_RETAIL_COST (COUNTRY);
END
TABLE FILE CAR
PRINT CAR
MODEL
COUNTRY
MAX_RTL_COST
FRANCE_MAX_RTL_COST2
BY COUNTRY
END
DEFINE FILE CAR CLEAR
This message has been edited. Last edited by: Joey Sandoval,
Prod/Dev: WebFOCUS 8.0.08 on Windows Server 2008/Tomcat , WebFOCUS DevStudio 8.0.08 on Windows 7 Pro
June 16, 2014, 01:11 PM
Francis Mariani
Joey, it looks like the constant "virtual column" LOOKUP needs to be associated with a real column, so adding WITH COUNTRY makes it work:
TABLE FILE CAR
SUM MAX.RETAIL_COST AS MAX_RETAIL_COST
MIN.RETAIL_COST AS MIN_RETAIL_COST
MAX.DEALER_COST AS MAX_DEALER_COST
MIN.DEALER_COST AS MIN_DEALER_COST
RETAIL_COST AS SUM_RETAIL_COST
BY COUNTRY
ON TABLE SET ASNAMES ON
ON TABLE HOLD AS HCNTRYSUM
END
-RUN
TABLE FILE HCNTRYSUM
PRINT *
END
DEFINE FUNCTION MAX_RETAIL_COST (CNTRY/A10)
MAX_RETAIL_COST/D20.2 = DB_LOOKUP(HCNTRYSUM, CNTRY, COUNTRY, MAX_RETAIL_COST);
END
DEFINE FILE CAR
LOOKUP/A10 WITH COUNTRY = 'FRANCE';
FRANCE_MAX_RTL_COST2/D20.1 = MAX_RETAIL_COST (LOOKUP);
MAX_RTL_COST/D20.1 = MAX_RETAIL_COST (COUNTRY);
END
TABLE FILE CAR
PRINT CAR
MODEL
COUNTRY
MAX_RTL_COST
FRANCE_MAX_RTL_COST2
BY COUNTRY
END
Francis
Give me code, or give me retirement. In FOCUS since 1991
Production: WF 7.7.05M, Dev Studio, BID, MRE, WebSphere, DB2 / Test: WF 8.1.05M, App Studio, BI Portal, Report Caster, jQuery, HighCharts, Apache Tomcat, MS SQL Server
June 16, 2014, 02:10 PM
Joey Sandoval
Shouldn't the output be 5,610 for France for every row though?
Prod/Dev: WebFOCUS 8.0.08 on Windows Server 2008/Tomcat , WebFOCUS DevStudio 8.0.08 on Windows 7 Pro
June 16, 2014, 03:57 PM
Francis Mariani
Yup, you're right, I cannot get this to work. In the example below, only the last COMPUTE works:
TABLE FILE CAR
SUM
MAX.RETAIL_COST AS MAX_RETAIL_COST
MIN.RETAIL_COST AS MIN_RETAIL_COST
MAX.DEALER_COST AS MAX_DEALER_COST
MIN.DEALER_COST AS MIN_DEALER_COST
RETAIL_COST AS SUM_RETAIL_COST
BY COUNTRY
ON TABLE SET ASNAMES ON
ON TABLE HOLD AS HCNTRYSUM
END
DEFINE FUNCTION MAX_RETAIL_COST_OUT(COUNTRY_IN/A10)
MAX_RETAIL_COST_OUT/D20.2 = DB_LOOKUP(HCNTRYSUM, COUNTRY_IN, COUNTRY, MAX_RETAIL_COST);
END
TABLE FILE HCNTRYSUM
PRINT *
END
DEFINE FILE CAR
LOOKUP1/A10 WITH CAR = 'FRANCE';
MAX_RTL_COST/D20.2 = MAX_RETAIL_COST_OUT(COUNTRY);
FRANCE_MAX_RTL_COST2/D20.2 = MAX_RETAIL_COST_OUT(LOOKUP1);
END
TABLE FILE CAR
PRINT
COUNTRY
CAR
MODEL
MAX_RTL_COST
FRANCE_MAX_RTL_COST2
COMPUTE FRANCE_MAX_RTL_COST3/D20.2 = MAX_RETAIL_COST_OUT(LOOKUP1);
COMPUTE FRANCE_MAX_RTL_COST4/D20.2 = DB_LOOKUP(HCNTRYSUM, LOOKUP1, COUNTRY, MAX_RETAIL_COST);
END
Francis
Give me code, or give me retirement. In FOCUS since 1991
Production: WF 7.7.05M, Dev Studio, BID, MRE, WebSphere, DB2 / Test: WF 8.1.05M, App Studio, BI Portal, Report Caster, jQuery, HighCharts, Apache Tomcat, MS SQL Server
June 16, 2014, 04:14 PM
Francis Mariani
I would open a case with IBI Tech Support, attaching this program. They may have an explanation why DB_LOOKUP does not work in a DEFINE FUNCTION.
Francis
Give me code, or give me retirement. In FOCUS since 1991
Production: WF 7.7.05M, Dev Studio, BID, MRE, WebSphere, DB2 / Test: WF 8.1.05M, App Studio, BI Portal, Report Caster, jQuery, HighCharts, Apache Tomcat, MS SQL Server
June 16, 2014, 04:36 PM
j.gross
quote:
DEFINE FUNCTION MAX_RETAIL_COST (CNTRY/A10) MAX_RETAIL_COST/D20.2 = DB_LOOKUP(HCNTRYSUM, CNTRY, COUNTRY, MAX_RETAIL_COST); END
In the DEFINE FUNCTION context, CNTRY is a formal argument, not a database variable. I don't think that conforms to the syntax requirements of DB_LOKUP.
June 16, 2014, 04:43 PM
Francis Mariani
Jack,
Yes, I think you're right. DB_LOOKUP doc:
Syntax: How to Retrieve a Value From a Lookup Data Source DB_LOOKUP(look_mf, srcfld1, lookfld1, srcfld2, lookfld2, ..., returnfld); where:
look_mf Is the lookup Master File.
srcfld1, srcfld2 ... Are fields from the source file used to locate a matching record in the lookup file.
lookfld1, lookfld2 ... Are columns from the lookup file that share values with the source fields. Only columns in the table or file can be used; columns created with DEFINE cannot be used. For multi-segment synonyms, only columns in the top segment can be used.
returnfld Is the name of a column in the lookup file whose value is returned from the matching lookup record. Only columns in the table or file can be used; columns created with DEFINE cannot be used.
Francis
Give me code, or give me retirement. In FOCUS since 1991
Production: WF 7.7.05M, Dev Studio, BID, MRE, WebSphere, DB2 / Test: WF 8.1.05M, App Studio, BI Portal, Report Caster, jQuery, HighCharts, Apache Tomcat, MS SQL Server
June 16, 2014, 05:39 PM
Waz
That how I understood it to be as well. Has to be DB fields.