37: p_dim_set varchar2,
38: p_parameters BIS_PMV_PAGE_PARAMETER_TBL
39: ) is
40: --
41: l_short_name dbms_sql.varchar2_table;
42: l_dim dbms_sql.varchar2_table;
43: l_measure dbms_sql.varchar2_table;
44: l_parameters BIS_PMV_PAGE_PARAMETER_TBL;
45: j integer;
38: p_parameters BIS_PMV_PAGE_PARAMETER_TBL
39: ) is
40: --
41: l_short_name dbms_sql.varchar2_table;
42: l_dim dbms_sql.varchar2_table;
43: l_measure dbms_sql.varchar2_table;
44: l_parameters BIS_PMV_PAGE_PARAMETER_TBL;
45: j integer;
46: Begin
39: ) is
40: --
41: l_short_name dbms_sql.varchar2_table;
42: l_dim dbms_sql.varchar2_table;
43: l_measure dbms_sql.varchar2_table;
44: l_parameters BIS_PMV_PAGE_PARAMETER_TBL;
45: j integer;
46: Begin
47: l_parameters:=p_parameters;
332: --
333: l_level_name varchar2(300);
334: l_flag boolean;
335: --l_olap_object_relation bsc_aw_md_wrapper.bsc_olap_object_relation_tb;
336: l_child_levels dbms_sql.varchar2_table;
337: l_rel_level_name dbms_sql.varchar2_table;
338: Begin
339: --we need to drill down only if aggregated is N
340: --first see if a dim has any levels with aggregated=N
333: l_level_name varchar2(300);
334: l_flag boolean;
335: --l_olap_object_relation bsc_aw_md_wrapper.bsc_olap_object_relation_tb;
336: l_child_levels dbms_sql.varchar2_table;
337: l_rel_level_name dbms_sql.varchar2_table;
338: Begin
339: --we need to drill down only if aggregated is N
340: --first see if a dim has any levels with aggregated=N
341: for i in 1..p_dim_set.dim_set.dim.count loop
391: procedure get_child_level(
392: p_level varchar2,
393: p_level_dim level_dim_tv,
394: p_parent_child bsc_aw_adapter_kpi.parent_child_tb,
395: p_child_levels in out nocopy dbms_sql.varchar2_table,
396: p_rel_level_name in out nocopy dbms_sql.varchar2_table
397: ) is
398: l_child_levels dbms_sql.varchar2_table;
399: Begin
392: p_level varchar2,
393: p_level_dim level_dim_tv,
394: p_parent_child bsc_aw_adapter_kpi.parent_child_tb,
395: p_child_levels in out nocopy dbms_sql.varchar2_table,
396: p_rel_level_name in out nocopy dbms_sql.varchar2_table
397: ) is
398: l_child_levels dbms_sql.varchar2_table;
399: Begin
400: --get immedate children if the position is > p_agg_level
394: p_parent_child bsc_aw_adapter_kpi.parent_child_tb,
395: p_child_levels in out nocopy dbms_sql.varchar2_table,
396: p_rel_level_name in out nocopy dbms_sql.varchar2_table
397: ) is
398: l_child_levels dbms_sql.varchar2_table;
399: Begin
400: --get immedate children if the position is > p_agg_level
401: if p_level_dim(p_level).aggregated='N' then
402: for i in 1..p_parent_child.count loop
416: raise;
417: End;
418:
419: procedure load_periodicity_drilldown(p_dim_set in out nocopy dim_set_r) is
420: l_child_levels dbms_sql.varchar2_table;
421: l_rel_level_name dbms_sql.varchar2_table;
422: Begin
423: for i in 1..p_dim_set.dim_set.calendar.periodicity.count loop
424: if p_dim_set.dim_set.calendar.periodicity(i).aggregated='N' then
417: End;
418:
419: procedure load_periodicity_drilldown(p_dim_set in out nocopy dim_set_r) is
420: l_child_levels dbms_sql.varchar2_table;
421: l_rel_level_name dbms_sql.varchar2_table;
422: Begin
423: for i in 1..p_dim_set.dim_set.calendar.periodicity.count loop
424: if p_dim_set.dim_set.calendar.periodicity(i).aggregated='N' then
425: l_child_levels.delete;
436: End;
437:
438: /*called recursively */
439: procedure get_child_periodicity(p_periodicity varchar2,p_cal_periodicity periodicity_tv,p_parent_child bsc_aw_adapter_kpi.cal_parent_child_tb,
440: p_child_levels in out nocopy dbms_sql.varchar2_table,p_rel_level_name in out nocopy dbms_sql.varchar2_table) is
441: l_child_levels dbms_sql.varchar2_table;
442: Begin
443: if p_cal_periodicity(p_periodicity).aggregated='N' then
444: for i in 1..p_parent_child.count loop
437:
438: /*called recursively */
439: procedure get_child_periodicity(p_periodicity varchar2,p_cal_periodicity periodicity_tv,p_parent_child bsc_aw_adapter_kpi.cal_parent_child_tb,
440: p_child_levels in out nocopy dbms_sql.varchar2_table,p_rel_level_name in out nocopy dbms_sql.varchar2_table) is
441: l_child_levels dbms_sql.varchar2_table;
442: Begin
443: if p_cal_periodicity(p_periodicity).aggregated='N' then
444: for i in 1..p_parent_child.count loop
445: if p_parent_child(i).parent_dim_name=p_cal_periodicity(p_periodicity).aw_dim then
478: /*5155595 there can be cases where a formula measure alone is being looked at. formula measures are represented as on-line agg . this means
479: if a formula measure alone is specified, no base measures get limited and nothing gets copied into display cube. we have to add relevant measures
480: to l_parameters */
481: procedure add_relevant_measures(p_dim_set dim_set_r,p_parameters in out nocopy BIS_PMV_PAGE_PARAMETER_TBL) is
482: l_measures dbms_sql.varchar2_table;
483: add_measures dbms_sql.varchar2_table;
484: add_all_measures boolean;
485: Begin
486: add_measures.delete;
479: if a formula measure alone is specified, no base measures get limited and nothing gets copied into display cube. we have to add relevant measures
480: to l_parameters */
481: procedure add_relevant_measures(p_dim_set dim_set_r,p_parameters in out nocopy BIS_PMV_PAGE_PARAMETER_TBL) is
482: l_measures dbms_sql.varchar2_table;
483: add_measures dbms_sql.varchar2_table;
484: add_all_measures boolean;
485: Begin
486: add_measures.delete;
487: add_all_measures:=false;
605: p_parameters BIS_PMV_PAGE_PARAMETER_TBL,
606: p_limit_track in out nocopy limit_track_r
607: ) is
608: l_flag boolean;
609: l_dim_cache dbms_sql.varchar2_table;
610: Begin
611: for i in 1..p_limit_track.limit_dim.count loop
612: l_dim_cache(l_dim_cache.count+1):=p_limit_track.limit_dim(i).dim_name;
613: end loop;
647: --
648: l_count number;
649: l_xtd_keys_table varchar2(100);
650: l_xtd_session_id number;
651: l_xtd_report_date dbms_sql.varchar2_table;
652: TYPE CurTyp IS REF CURSOR;
653: cv CurTyp;
654: --
655: l_periodicity_id dbms_sql.varchar2_table;
651: l_xtd_report_date dbms_sql.varchar2_table;
652: TYPE CurTyp IS REF CURSOR;
653: cv CurTyp;
654: --
655: l_periodicity_id dbms_sql.varchar2_table;
656: l_period dbms_sql.varchar2_table;
657: Begin
658: l_count:=p_dim_set.limit_track.count;
659: for i in 1..p_parameters.count loop
652: TYPE CurTyp IS REF CURSOR;
653: cv CurTyp;
654: --
655: l_periodicity_id dbms_sql.varchar2_table;
656: l_period dbms_sql.varchar2_table;
657: Begin
658: l_count:=p_dim_set.limit_track.count;
659: for i in 1..p_parameters.count loop
660: if p_parameters(i).dimension='XTD KEYS TABLE' then
869: --
870: l_count number;
871: l_dim varchar2(300);
872: l_cube varchar2(200);
873: l_measures dbms_sql.varchar2_table;
874: l_composite varchar2(300);
875: l_comp_type varchar2(300);
876: l_dim_cache dbms_sql.varchar2_table;
877: Begin
872: l_cube varchar2(200);
873: l_measures dbms_sql.varchar2_table;
874: l_composite varchar2(300);
875: l_comp_type varchar2(300);
876: l_dim_cache dbms_sql.varchar2_table;
877: Begin
878: /*we cannot limit dim to a composite for compressed composite */
879: if p_dim_set.dim_set.compressed='Y' then
880: return;
925: p_dim_set dim_set_r,
926: p_parameters BIS_PMV_PAGE_PARAMETER_TBL
927: ) is
928: --
929: l_measures dbms_sql.varchar2_table;
930: l_agg_measures dbms_sql.varchar2_table;
931: l_zero_specified boolean;
932: l_dim_aggregate dbms_sql.varchar2_table;
933: l_level dbms_sql.varchar2_table;
926: p_parameters BIS_PMV_PAGE_PARAMETER_TBL
927: ) is
928: --
929: l_measures dbms_sql.varchar2_table;
930: l_agg_measures dbms_sql.varchar2_table;
931: l_zero_specified boolean;
932: l_dim_aggregate dbms_sql.varchar2_table;
933: l_level dbms_sql.varchar2_table;
934: --
928: --
929: l_measures dbms_sql.varchar2_table;
930: l_agg_measures dbms_sql.varchar2_table;
931: l_zero_specified boolean;
932: l_dim_aggregate dbms_sql.varchar2_table;
933: l_level dbms_sql.varchar2_table;
934: --
935: l_LT_index number;
936: l_periodicity dbms_sql.varchar2_table;
929: l_measures dbms_sql.varchar2_table;
930: l_agg_measures dbms_sql.varchar2_table;
931: l_zero_specified boolean;
932: l_dim_aggregate dbms_sql.varchar2_table;
933: l_level dbms_sql.varchar2_table;
934: --
935: l_LT_index number;
936: l_periodicity dbms_sql.varchar2_table;
937: agg_cal_flag boolean;
932: l_dim_aggregate dbms_sql.varchar2_table;
933: l_level dbms_sql.varchar2_table;
934: --
935: l_LT_index number;
936: l_periodicity dbms_sql.varchar2_table;
937: agg_cal_flag boolean;
938: agg_dim_flag boolean;
939: Begin
940: /*
1081: End;
1082:
1083: /*forecast correction done for projected measures only
1084: Q:In this procedure, if display_cube is not null, we correct it and not the main cube*/
1085: procedure correct_forecast(p_dim_set dim_set_r,p_measures dbms_sql.varchar2_table,p_periodicity dbms_sql.varchar2_table) is
1086: l_cubes dbms_sql.varchar2_table;
1087: l_display_cubes dbms_sql.varchar2_table;
1088: l_pt_comp varchar2(80);
1089: l_stmt varchar2(4000);
1082:
1083: /*forecast correction done for projected measures only
1084: Q:In this procedure, if display_cube is not null, we correct it and not the main cube*/
1085: procedure correct_forecast(p_dim_set dim_set_r,p_measures dbms_sql.varchar2_table,p_periodicity dbms_sql.varchar2_table) is
1086: l_cubes dbms_sql.varchar2_table;
1087: l_display_cubes dbms_sql.varchar2_table;
1088: l_pt_comp varchar2(80);
1089: l_stmt varchar2(4000);
1090: l_projection_dim varchar2(80);
1083: /*forecast correction done for projected measures only
1084: Q:In this procedure, if display_cube is not null, we correct it and not the main cube*/
1085: procedure correct_forecast(p_dim_set dim_set_r,p_measures dbms_sql.varchar2_table,p_periodicity dbms_sql.varchar2_table) is
1086: l_cubes dbms_sql.varchar2_table;
1087: l_display_cubes dbms_sql.varchar2_table;
1088: l_pt_comp varchar2(80);
1089: l_stmt varchar2(4000);
1090: l_projection_dim varchar2(80);
1091: l_measures dbms_sql.varchar2_table;
1087: l_display_cubes dbms_sql.varchar2_table;
1088: l_pt_comp varchar2(80);
1089: l_stmt varchar2(4000);
1090: l_projection_dim varchar2(80);
1091: l_measures dbms_sql.varchar2_table;
1092: l_pt_comp_type varchar2(80);
1093: Begin
1094: for i in 1..p_measures.count loop
1095: if p_dim_set.measure(upper(p_measures(i))).forecast='Y' then
1149: End;
1150:
1151: procedure get_measures(
1152: p_parameters BIS_PMV_PAGE_PARAMETER_TBL,
1153: p_measures out nocopy dbms_sql.varchar2_table
1154: ) is
1155: Begin
1156: for i in 1..p_parameters.count loop
1157: if p_parameters(i).dimension='MEASURE' then
1178: to the requested level
1179: */
1180: procedure aggregate_cubes_dim(
1181: p_dim_set dim_set_r,
1182: p_measures dbms_sql.varchar2_table,
1183: p_dim varchar2) is
1184: l_std_measures dbms_sql.varchar2_table;
1185: l_agg_map varchar2(80);
1186: Begin
1180: procedure aggregate_cubes_dim(
1181: p_dim_set dim_set_r,
1182: p_measures dbms_sql.varchar2_table,
1183: p_dim varchar2) is
1184: l_std_measures dbms_sql.varchar2_table;
1185: l_agg_map varchar2(80);
1186: Begin
1187: for i in 1..p_measures.count loop
1188: if p_dim_set.measure(upper(p_measures(i))).agg_formula.std_aggregation='Y' then
1206: raise;
1207: End;
1208:
1209: /*only aggregate non bal measures on time */
1210: procedure aggregate_cubes_calendar(p_dim_set dim_set_r,p_measures dbms_sql.varchar2_table) is
1211: l_std_measures dbms_sql.varchar2_table;
1212: l_nonbal_measures dbms_sql.varchar2_table;
1213: l_agg_map varchar2(80);
1214: Begin
1207: End;
1208:
1209: /*only aggregate non bal measures on time */
1210: procedure aggregate_cubes_calendar(p_dim_set dim_set_r,p_measures dbms_sql.varchar2_table) is
1211: l_std_measures dbms_sql.varchar2_table;
1212: l_nonbal_measures dbms_sql.varchar2_table;
1213: l_agg_map varchar2(80);
1214: Begin
1215: for i in 1..p_measures.count loop
1208:
1209: /*only aggregate non bal measures on time */
1210: procedure aggregate_cubes_calendar(p_dim_set dim_set_r,p_measures dbms_sql.varchar2_table) is
1211: l_std_measures dbms_sql.varchar2_table;
1212: l_nonbal_measures dbms_sql.varchar2_table;
1213: l_agg_map varchar2(80);
1214: Begin
1215: for i in 1..p_measures.count loop
1216: /*5458597. measurename dim has mixed case.earlier it was l_std_measures(l_std_measures.count+1):=p_measures(i) */
1236: raise;
1237: End;
1238:
1239: /*Q:In this procesure, we aggregate display_cube is its not null */
1240: procedure aggregate_cubes(p_dim_set dim_set_r,p_std_measures dbms_sql.varchar2_table,p_agg_map varchar2) is
1241: l_stmt varchar2(4000);
1242: flag boolean;
1243: l_cubes dbms_sql.varchar2_table;
1244: l_countvar_cubes dbms_sql.varchar2_table;
1239: /*Q:In this procesure, we aggregate display_cube is its not null */
1240: procedure aggregate_cubes(p_dim_set dim_set_r,p_std_measures dbms_sql.varchar2_table,p_agg_map varchar2) is
1241: l_stmt varchar2(4000);
1242: flag boolean;
1243: l_cubes dbms_sql.varchar2_table;
1244: l_countvar_cubes dbms_sql.varchar2_table;
1245: l_display_cubes dbms_sql.varchar2_table;
1246: Begin
1247: for i in 1..p_std_measures.count loop
1240: procedure aggregate_cubes(p_dim_set dim_set_r,p_std_measures dbms_sql.varchar2_table,p_agg_map varchar2) is
1241: l_stmt varchar2(4000);
1242: flag boolean;
1243: l_cubes dbms_sql.varchar2_table;
1244: l_countvar_cubes dbms_sql.varchar2_table;
1245: l_display_cubes dbms_sql.varchar2_table;
1246: Begin
1247: for i in 1..p_std_measures.count loop
1248: if bsc_aw_utility.in_array(l_cubes,p_dim_set.measure(upper(p_std_measures(i))).cube)=false then
1241: l_stmt varchar2(4000);
1242: flag boolean;
1243: l_cubes dbms_sql.varchar2_table;
1244: l_countvar_cubes dbms_sql.varchar2_table;
1245: l_display_cubes dbms_sql.varchar2_table;
1246: Begin
1247: for i in 1..p_std_measures.count loop
1248: if bsc_aw_utility.in_array(l_cubes,p_dim_set.measure(upper(p_std_measures(i))).cube)=false then
1249: l_cubes(l_cubes.count+1):=p_dim_set.measure(upper(p_std_measures(i))).cube;
1316: raise;
1317: End;
1318:
1319: /*Q:here also, if the display_cube is not null, its calculated */
1320: procedure aggregate_formula(p_dim_set dim_set_r,p_measures dbms_sql.varchar2_table) is
1321: l_cube varchar2(100);
1322: Begin
1323: --if there are non std agg, (agg formula), do them now. the dim have been brought back to the higher levels
1324: for i in 1..p_measures.count loop
1341: log_n('Exception in aggregate_formula '||sqlerrm);
1342: raise;
1343: End;
1344:
1345: procedure get_measures_aggregate(p_dim_set dim_set_r,p_measures dbms_sql.varchar2_table,p_agg_measures out nocopy dbms_sql.varchar2_table) is
1346: l_cubes dbms_sql.varchar2_table;
1347: Begin
1348: for i in 1..p_measures.count loop
1349: if p_dim_set.measure(upper(p_measures(i))).agg_formula.std_aggregation='N' and p_dim_set.measure(upper(p_measures(i))).sql_aggregated='N' then
1342: raise;
1343: End;
1344:
1345: procedure get_measures_aggregate(p_dim_set dim_set_r,p_measures dbms_sql.varchar2_table,p_agg_measures out nocopy dbms_sql.varchar2_table) is
1346: l_cubes dbms_sql.varchar2_table;
1347: Begin
1348: for i in 1..p_measures.count loop
1349: if p_dim_set.measure(upper(p_measures(i))).agg_formula.std_aggregation='N' and p_dim_set.measure(upper(p_measures(i))).sql_aggregated='N' then
1350: --
1532: /*when there are partitions and CC, we need display cubes to handle aggregations on the fly. CC cubes cannot be aggregated on the fly
1533: if there are balance measures that are already aggregated in time, these have to be copied too. so we should not lose the data at the
1534: specified dim levels*/
1535: procedure copy_data_display_cubes(p_dim_set dim_set_r,p_parameters BIS_PMV_PAGE_PARAMETER_TBL) is
1536: l_measures dbms_sql.varchar2_table;
1537: Begin
1538: get_measures(p_parameters,l_measures);
1539: copy_data_display_cubes(p_dim_set,l_measures);
1540: Exception when others then
1541: log_n('Exception in copy_data_display_cubes '||sqlerrm);
1542: raise;
1543: End;
1544:
1545: procedure copy_data_display_cubes(p_dim_set dim_set_r,p_measures dbms_sql.varchar2_table) is
1546: l_cubes dbms_sql.varchar2_table;
1547: l_display_cubes dbms_sql.varchar2_table;
1548: Begin
1549: for i in 1..p_measures.count loop
1542: raise;
1543: End;
1544:
1545: procedure copy_data_display_cubes(p_dim_set dim_set_r,p_measures dbms_sql.varchar2_table) is
1546: l_cubes dbms_sql.varchar2_table;
1547: l_display_cubes dbms_sql.varchar2_table;
1548: Begin
1549: for i in 1..p_measures.count loop
1550: if p_dim_set.measure(upper(p_measures(i))).sql_aggregated='N'
1543: End;
1544:
1545: procedure copy_data_display_cubes(p_dim_set dim_set_r,p_measures dbms_sql.varchar2_table) is
1546: l_cubes dbms_sql.varchar2_table;
1547: l_display_cubes dbms_sql.varchar2_table;
1548: Begin
1549: for i in 1..p_measures.count loop
1550: if p_dim_set.measure(upper(p_measures(i))).sql_aggregated='N'
1551: and bsc_aw_utility.in_array(l_cubes,p_dim_set.measure(upper(p_measures(i))).cube)=false then