Lets say you have Year to Year Current Month / Year to Date Comparison reporting requirement. Calculation View should take Month as an input parameter and calculate Current Month, Last Year Current Month, Year to Date and Last Year to Date Net Sales on Country level.
Using Table Functions makes modeling for this requirement easy. Calculation Model uses 4 Table Functions e.g. one for each measure (CM, LYCM, CYTD and LYTD Net Sales). Each Table Functions takes IP_CALMONTH as an input and returns a set of dates. Table Functions are used in Join Nodes to limit sales data respectively to CM, LYCM, CYTD or LYTD Net Sales.
Most important modeling aspect are listed below:
- Generate Time Data with Day Granularity
- Define Table Functions
- Use Table Functions in Joins Nodes to limit data
- Map Calculation View Input Parameter into Table Functions Input Parameters
Generate Time Data with Day Granularity
In our case from 2013 to 2014
CM:
FUNCTION"WORKSHOP"."workshop.00::CM" ( IN_CALMONTHVARCHAR(6) )
RETURNSTABLE ( DATE_SQLDATE )
LANGUAGESQLSCRIPT
SQLSECURITYINVOKERAS
BEGIN
RETURNSELECTDATE_SQLFROM"_SYS_BI"."M_TIME_DIMENSION"WHERECALMONTH = :IN_CALMONTH;
END;
LYCM:
FUNCTION"WORKSHOP"."workshop.00::LYCM" ( IN_CALMONTHVARCHAR(6) )
RETURNSTABLE( DATE_SQLDATE )
LANGUAGESQLSCRIPT
SQLSECURITYINVOKERAS
BEGIN
DECLARECALMONTHVARCHAR(6);
DECLAREMONTHVARCHAR(2);
DECLAREYEARVARCHAR(4);
YEAR :=LEFT(IN_CALMONTH,4);
YEAR :=YEAR - 1;
MONTH :=RIGHT(IN_CALMONTH,2);
CALMONTH :=CONCAT(:YEAR,:MONTH);
RETURNSELECTDATE_SQLFROM"_SYS_BI"."M_TIME_DIMENSION"WHERECALMONTH= :CALMONTH;
END;
CYTD:
FUNCTION"WORKSHOP"."workshop.00::CYTD" ( IN_CALMONTHVARCHAR(6) )
RETURNSTABLE ( DATE_SQLDATE )
LANGUAGESQLSCRIPT
SQLSECURITYINVOKERAS
BEGIN
DECLARECALMONTHVARCHAR(6);
DECLAREYEARVARCHAR(4);
YEAR := LEFT(IN_CALMONTH,4);
CALMONTH := CONCAT(:YEAR,'01');
RETURNSELECTDATE_SQLFROM"_SYS_BI"."M_TIME_DIMENSION"WHERECALMONTHBETWEEN :CALMONTHAND :IN_CALMONTH;
END;
LYTD:
FUNCTION"WORKSHOP"."workshop.00::LYTD" ( IN_CALMONTHVARCHAR(6) )
RETURNSTABLE( DATE_SQLDATE )
LANGUAGESQLSCRIPT
SQLSECURITYINVOKERAS
BEGIN
DECLARECALMONTH_FROMVARCHAR(6);
DECLARECALMONTH_TOVARCHAR(6);
DECLAREYEARVARCHAR(4);
DECLAREMONTHVARCHAR(2);
YEAR :=LEFT(IN_CALMONTH,4);
YEAR :=YEAR - 1;
MONTH :=RIGHT(IN_CALMONTH,2);
CALMONTH_FROM := CONCAT(:YEAR,'01');
CALMONTH_TO := CONCAT(:YEAR,:MONTH);
RETURNSELECTDATE_SQLFROM"_SYS_BI"."M_TIME_DIMENSION"WHERECALMONTHBETWEEN :CALMONTH_FROMAND :CALMONTH_TO;
END;
Use Table Functions in Joins Nodes to limit data
Similary defined Join Nodes for LYCM, CYTD and LYTD Measures
Map Calculation View Input Parameter into Table Functions Input Parameters