158: end if;
159: if g_workspace_attached is null or g_workspace_attached=false then
160: attach_workspace;
161: end if;
162: bsc_aw_dbms_aw.execute('allstat');
163: if l_kpi_in_cache then
164: --check to make sure that the kpi has not been modified. this will detach and attach workdspace if reqd. remove cache
165: if check_kpi_change(l_kpi) then
166: detach_workspace;
751: Begin
752: l_count:=p_dim_set.limit_track.count;
753: for i in 1..p_dim_set.limit_track(l_count).limit_dim.count loop
754: if l_cache.exists(p_dim_set.limit_track(l_count).limit_dim(i).level_name)=false then
755: bsc_aw_dbms_aw.execute('limit '||p_dim_set.limit_track(l_count).limit_dim(i).level_name||' to NULL');
756: l_cache(p_dim_set.limit_track(l_count).limit_dim(i).level_name):=true;
757: end if;
758: --limit_track.limit_dim.dim_name CAN BE NULL!!!
759: if p_dim_set.limit_track(l_count).limit_dim(i).dim_name is not null then
759: if p_dim_set.limit_track(l_count).limit_dim(i).dim_name is not null then
760: --this if clause eliminates dim with no concat dim like TYPE
761: if p_dim_set.limit_track(l_count).limit_dim(i).dim_name <> p_dim_set.limit_track(l_count).limit_dim(i).level_name then
762: if l_cache.exists(p_dim_set.limit_track(l_count).limit_dim(i).dim_name)=false then
763: bsc_aw_dbms_aw.execute('limit '||p_dim_set.limit_track(l_count).limit_dim(i).dim_name||' to NULL');
764: l_cache(p_dim_set.limit_track(l_count).limit_dim(i).dim_name):=true;
765: end if;
766: end if;
767: end if;
781: - limit CC dim to cube
782: */
783: for i in 1..p_dim_set.limit_track(l_count).limit_dim.count loop
784: if p_dim_set.limit_track(l_count).limit_dim(i).value='^ALL' then
785: bsc_aw_dbms_aw.execute('limit '||p_dim_set.limit_track(l_count).limit_dim(i).level_name||' TO ALL');
786: else
787: --we need to handle time or any dim limited with the TO option. ie limit month_5_cal_1 to ''1.2004'' TO ''12.2004''
788: --input in BIS_PMV_PAGE_PARAMETER_TBL will be '1.2004 TO 12.2004'. we need to convert it to ''1.2004'' TO ''12.2004''
789: --when limiting, we use execute_ne so that even if the user has not loaded the kpi or is specifying unloaded values, we do not
797: l_upper_period:=l_parse_values(2).parameter;
798:
799: if substr(l_lower_period,1,instr(l_lower_period,'.') -1) = substr(l_lower_period,instr(l_lower_period,'.')+1) then
800: validate_limit_range(l_lower_period,l_upper_period,p_parameters);
801: bsc_aw_dbms_aw.execute_ne('limit '||p_dim_set.limit_track(l_count).limit_dim(i).level_name||' ADD '||
802: ''''||l_lower_period||''' TO '''||l_upper_period||'''');
803: else
804: bsc_aw_dbms_aw.execute_ne('limit '||p_dim_set.limit_track(l_count).limit_dim(i).level_name||' ADD '||
805: ''''||l_parse_values(1).parameter||''' TO '''||l_parse_values(2).parameter||'''');
800: validate_limit_range(l_lower_period,l_upper_period,p_parameters);
801: bsc_aw_dbms_aw.execute_ne('limit '||p_dim_set.limit_track(l_count).limit_dim(i).level_name||' ADD '||
802: ''''||l_lower_period||''' TO '''||l_upper_period||'''');
803: else
804: bsc_aw_dbms_aw.execute_ne('limit '||p_dim_set.limit_track(l_count).limit_dim(i).level_name||' ADD '||
805: ''''||l_parse_values(1).parameter||''' TO '''||l_parse_values(2).parameter||'''');
806: end if;
807:
808: else
805: ''''||l_parse_values(1).parameter||''' TO '''||l_parse_values(2).parameter||'''');
806: end if;
807:
808: else
809: bsc_aw_dbms_aw.execute_ne('limit '||p_dim_set.limit_track(l_count).limit_dim(i).level_name||' ADD '||
810: ''''||p_dim_set.limit_track(l_count).limit_dim(i).value||'''');
811: end if;
812: end if;
813: if p_dim_set.limit_track(l_count).limit_dim(i).dim_name is not null then
811: end if;
812: end if;
813: if p_dim_set.limit_track(l_count).limit_dim(i).dim_name is not null then
814: if p_dim_set.limit_track(l_count).limit_dim(i).dim_name <> p_dim_set.limit_track(l_count).limit_dim(i).level_name then
815: bsc_aw_dbms_aw.execute('limit '||p_dim_set.limit_track(l_count).limit_dim(i).dim_name||' ADD '||
816: p_dim_set.limit_track(l_count).limit_dim(i).level_name);
817: end if;
818: end if;
819: end loop;
893: l_dim:=p_dim_set.limit_track(l_count).limit_dim(i).level_name;
894: end if;
895: --
896: if bsc_aw_utility.in_array(l_dim_cache,l_dim)=false then
897: bsc_aw_dbms_aw.execute_ne('delete '||l_cube);
898: bsc_aw_dbms_aw.execute('dfn '||l_cube||' boolean <'||l_dim||'>');
899: bsc_aw_dbms_aw.execute(l_cube||' = true across '||l_composite);
900: bsc_aw_dbms_aw.execute('limit '||l_dim||' to '||l_cube);
901: l_dim_cache(l_dim_cache.count+1):=l_dim;
894: end if;
895: --
896: if bsc_aw_utility.in_array(l_dim_cache,l_dim)=false then
897: bsc_aw_dbms_aw.execute_ne('delete '||l_cube);
898: bsc_aw_dbms_aw.execute('dfn '||l_cube||' boolean <'||l_dim||'>');
899: bsc_aw_dbms_aw.execute(l_cube||' = true across '||l_composite);
900: bsc_aw_dbms_aw.execute('limit '||l_dim||' to '||l_cube);
901: l_dim_cache(l_dim_cache.count+1):=l_dim;
902: end if;
895: --
896: if bsc_aw_utility.in_array(l_dim_cache,l_dim)=false then
897: bsc_aw_dbms_aw.execute_ne('delete '||l_cube);
898: bsc_aw_dbms_aw.execute('dfn '||l_cube||' boolean <'||l_dim||'>');
899: bsc_aw_dbms_aw.execute(l_cube||' = true across '||l_composite);
900: bsc_aw_dbms_aw.execute('limit '||l_dim||' to '||l_cube);
901: l_dim_cache(l_dim_cache.count+1):=l_dim;
902: end if;
903: --
896: if bsc_aw_utility.in_array(l_dim_cache,l_dim)=false then
897: bsc_aw_dbms_aw.execute_ne('delete '||l_cube);
898: bsc_aw_dbms_aw.execute('dfn '||l_cube||' boolean <'||l_dim||'>');
899: bsc_aw_dbms_aw.execute(l_cube||' = true across '||l_composite);
900: bsc_aw_dbms_aw.execute('limit '||l_dim||' to '||l_cube);
901: l_dim_cache(l_dim_cache.count+1):=l_dim;
902: end if;
903: --
904: end if;
904: end if;
905: end loop;
906: end if;
907: Exception when others then
908: bsc_aw_dbms_aw.execute_ne('delete '||l_cube);
909: log_n('Exception in limit_dim_to_composite '||sqlerrm);
910: raise;
911: End;
912:
958: agg_dim_flag:=true;
959: end if;
960: if agg_dim_flag then
961: if bsc_aw_utility.in_array(l_dim_aggregate,p_dim_set.levels(p_parameters(i).parameter_name).dim_name)=false then
962: bsc_aw_dbms_aw.execute('push '||p_dim_set.levels(p_parameters(i).parameter_name).dim_name);
963: bsc_aw_dbms_aw.execute('limit '||p_dim_set.levels(p_parameters(i).parameter_name).level_name_dim||' TO NULL');
964: l_dim_aggregate(l_dim_aggregate.count+1):=p_dim_set.levels(p_parameters(i).parameter_name).dim_name;
965: end if;
966: --if this level at which aggregatino is sought has zero code, and the value requested is zero then we need to limit
959: end if;
960: if agg_dim_flag then
961: if bsc_aw_utility.in_array(l_dim_aggregate,p_dim_set.levels(p_parameters(i).parameter_name).dim_name)=false then
962: bsc_aw_dbms_aw.execute('push '||p_dim_set.levels(p_parameters(i).parameter_name).dim_name);
963: bsc_aw_dbms_aw.execute('limit '||p_dim_set.levels(p_parameters(i).parameter_name).level_name_dim||' TO NULL');
964: l_dim_aggregate(l_dim_aggregate.count+1):=p_dim_set.levels(p_parameters(i).parameter_name).dim_name;
965: end if;
966: --if this level at which aggregatino is sought has zero code, and the value requested is zero then we need to limit
967: --the level name dim to include zero code level also
966: --if this level at which aggregatino is sought has zero code, and the value requested is zero then we need to limit
967: --the level name dim to include zero code level also
968: if l_zero_specified then
969: if p_dim_set.levels(p_parameters(i).parameter_name).zero_level is not null then
970: bsc_aw_dbms_aw.execute('limit '||p_dim_set.levels(p_parameters(i).parameter_name).level_name_dim||' ADD '''||
971: p_dim_set.levels(p_parameters(i).parameter_name).zero_level||'.'||p_dim_set.levels(p_parameters(i).parameter_name).level_name||'''');
972: end if;
973: end if;
974: if p_dim_set.levels(p_parameters(i).parameter_name).aggregated='N' then
972: end if;
973: end if;
974: if p_dim_set.levels(p_parameters(i).parameter_name).aggregated='N' then
975: for j in 1..p_dim_set.drill_down_levels(p_parameters(i).parameter_name).child_level.count loop
976: bsc_aw_dbms_aw.execute('limit '||p_dim_set.levels(p_parameters(i).parameter_name).level_name_dim||' ADD '''||
977: p_dim_set.drill_down_levels(p_parameters(i).parameter_name).rel_level_name(j)||'''');
978: /*rel_level_name will contain only those where there is no pre-aggregation. if agg is at city level and country data is asked, then
979: rel_level_name contains country.state and state.city so data can rollup from city to country */
980: /*
993: Q:what about precalculated indicators where users specify aggregated data for all the levels. they also specify data for
994: 0. does this mean we dont aggregate these kpis?
995: */
996: if l_zero_specified then
997: bsc_aw_dbms_aw.execute(p_dim_set.levels(p_parameters(i).parameter_name).relation_name||'('||
998: p_dim_set.drill_down_levels(p_parameters(i).parameter_name).child_level(j)||' ''0'')=NA');
999: end if;
1000: end loop;
1001: --
998: p_dim_set.drill_down_levels(p_parameters(i).parameter_name).child_level(j)||' ''0'')=NA');
999: end if;
1000: end loop;
1001: --
1002: bsc_aw_dbms_aw.execute('limit '||p_dim_set.levels(p_parameters(i).parameter_name).dim_name||' ADD DESCENDANTS using '||
1003: p_dim_set.levels(p_parameters(i).parameter_name).relation_name);
1004: /*to be on the safe side, we keep only those levels where there is data aggregated. we should not go lower
1005: for now, lets assume that parent.child is limited correctly so that drill down to descendants will come down only to the point where top most
1006: agg data is available*/
1029: agg_cal_flag:=false;
1030: for i in 1..l_periodicity.count loop
1031: if p_dim_set.calendar.periodicity(l_periodicity(i)).aggregated='N' then
1032: if agg_cal_flag=false then
1033: bsc_aw_dbms_aw.execute('push '||p_dim_set.calendar.aw_dim);
1034: bsc_aw_dbms_aw.execute('limit '||p_dim_set.dim_set.calendar.level_name_dim||' TO NULL');
1035: agg_cal_flag:=true;
1036: end if;
1037: for j in 1..p_dim_set.calendar.drill_down_levels(l_periodicity(i)).child_level.count loop
1030: for i in 1..l_periodicity.count loop
1031: if p_dim_set.calendar.periodicity(l_periodicity(i)).aggregated='N' then
1032: if agg_cal_flag=false then
1033: bsc_aw_dbms_aw.execute('push '||p_dim_set.calendar.aw_dim);
1034: bsc_aw_dbms_aw.execute('limit '||p_dim_set.dim_set.calendar.level_name_dim||' TO NULL');
1035: agg_cal_flag:=true;
1036: end if;
1037: for j in 1..p_dim_set.calendar.drill_down_levels(l_periodicity(i)).child_level.count loop
1038: bsc_aw_dbms_aw.execute('limit '||p_dim_set.dim_set.calendar.level_name_dim||' ADD '''||
1034: bsc_aw_dbms_aw.execute('limit '||p_dim_set.dim_set.calendar.level_name_dim||' TO NULL');
1035: agg_cal_flag:=true;
1036: end if;
1037: for j in 1..p_dim_set.calendar.drill_down_levels(l_periodicity(i)).child_level.count loop
1038: bsc_aw_dbms_aw.execute('limit '||p_dim_set.dim_set.calendar.level_name_dim||' ADD '''||
1039: p_dim_set.calendar.drill_down_levels(l_periodicity(i)).rel_level_name(j)||'''');
1040: end loop;
1041: bsc_aw_dbms_aw.execute('limit '||p_dim_set.calendar.aw_dim||' ADD DESCENDANTS using '||p_dim_set.dim_set.calendar.relation_name);
1042: end if;
1037: for j in 1..p_dim_set.calendar.drill_down_levels(l_periodicity(i)).child_level.count loop
1038: bsc_aw_dbms_aw.execute('limit '||p_dim_set.dim_set.calendar.level_name_dim||' ADD '''||
1039: p_dim_set.calendar.drill_down_levels(l_periodicity(i)).rel_level_name(j)||'''');
1040: end loop;
1041: bsc_aw_dbms_aw.execute('limit '||p_dim_set.calendar.aw_dim||' ADD DESCENDANTS using '||p_dim_set.dim_set.calendar.relation_name);
1042: end if;
1043: end loop;
1044: --now, limit the dim to the values in the composite. this is for performance
1045: --earlier, we had a call here : limit_dim_to_composite(p_dim_set,p_parameters);
1059: /*aggregate on dim */
1060: if l_dim_aggregate.count>0 then
1061: for i in 1..l_dim_aggregate.count loop
1062: aggregate_cubes_dim(p_dim_set,l_agg_measures,l_dim_aggregate(i));
1063: bsc_aw_dbms_aw.execute('pop '||l_dim_aggregate(i));
1064: end loop;
1065: end if;
1066: /*now aggregate on time if needed */
1067: if agg_cal_flag then
1065: end if;
1066: /*now aggregate on time if needed */
1067: if agg_cal_flag then
1068: aggregate_cubes_calendar(p_dim_set,l_agg_measures);
1069: bsc_aw_dbms_aw.execute('pop '||p_dim_set.calendar.aw_dim);
1070: end if;
1071: --if there are non std agg, (agg formula), do them now. the dim have been brought back to the higher levels
1072: aggregate_formula(p_dim_set,l_measures);
1073: /*correct forecast */
1104: l_display_cubes(l_display_cubes.count+1):=p_dim_set.measure(upper(l_measures(i))).display_cube;
1105: end if;
1106: end loop;
1107: l_projection_dim:=bsc_aw_adapter_kpi.get_projection_dim(p_dim_set.dim_set);
1108: bsc_aw_dbms_aw.execute('push '||p_dim_set.dim_set.measurename_dim);
1109: bsc_aw_dbms_aw.execute('push '||l_projection_dim);
1110: bsc_aw_dbms_aw.execute('push '||p_dim_set.calendar.aw_dim);
1111: bsc_aw_dbms_aw.execute('limit '||l_projection_dim||' TO ''Y''');
1112: bsc_aw_dbms_aw.execute('limit '||p_dim_set.calendar.aw_dim||' TO NULL');
1105: end if;
1106: end loop;
1107: l_projection_dim:=bsc_aw_adapter_kpi.get_projection_dim(p_dim_set.dim_set);
1108: bsc_aw_dbms_aw.execute('push '||p_dim_set.dim_set.measurename_dim);
1109: bsc_aw_dbms_aw.execute('push '||l_projection_dim);
1110: bsc_aw_dbms_aw.execute('push '||p_dim_set.calendar.aw_dim);
1111: bsc_aw_dbms_aw.execute('limit '||l_projection_dim||' TO ''Y''');
1112: bsc_aw_dbms_aw.execute('limit '||p_dim_set.calendar.aw_dim||' TO NULL');
1113: --bug:5954342 changed the dbms_aw.execute api to dbms_aw.execute_ne to shadow errors thrown in case of
1106: end loop;
1107: l_projection_dim:=bsc_aw_adapter_kpi.get_projection_dim(p_dim_set.dim_set);
1108: bsc_aw_dbms_aw.execute('push '||p_dim_set.dim_set.measurename_dim);
1109: bsc_aw_dbms_aw.execute('push '||l_projection_dim);
1110: bsc_aw_dbms_aw.execute('push '||p_dim_set.calendar.aw_dim);
1111: bsc_aw_dbms_aw.execute('limit '||l_projection_dim||' TO ''Y''');
1112: bsc_aw_dbms_aw.execute('limit '||p_dim_set.calendar.aw_dim||' TO NULL');
1113: --bug:5954342 changed the dbms_aw.execute api to dbms_aw.execute_ne to shadow errors thrown in case of
1114: --non existing values
1107: l_projection_dim:=bsc_aw_adapter_kpi.get_projection_dim(p_dim_set.dim_set);
1108: bsc_aw_dbms_aw.execute('push '||p_dim_set.dim_set.measurename_dim);
1109: bsc_aw_dbms_aw.execute('push '||l_projection_dim);
1110: bsc_aw_dbms_aw.execute('push '||p_dim_set.calendar.aw_dim);
1111: bsc_aw_dbms_aw.execute('limit '||l_projection_dim||' TO ''Y''');
1112: bsc_aw_dbms_aw.execute('limit '||p_dim_set.calendar.aw_dim||' TO NULL');
1113: --bug:5954342 changed the dbms_aw.execute api to dbms_aw.execute_ne to shadow errors thrown in case of
1114: --non existing values
1115: for i in 1..p_periodicity.count loop
1108: bsc_aw_dbms_aw.execute('push '||p_dim_set.dim_set.measurename_dim);
1109: bsc_aw_dbms_aw.execute('push '||l_projection_dim);
1110: bsc_aw_dbms_aw.execute('push '||p_dim_set.calendar.aw_dim);
1111: bsc_aw_dbms_aw.execute('limit '||l_projection_dim||' TO ''Y''');
1112: bsc_aw_dbms_aw.execute('limit '||p_dim_set.calendar.aw_dim||' TO NULL');
1113: --bug:5954342 changed the dbms_aw.execute api to dbms_aw.execute_ne to shadow errors thrown in case of
1114: --non existing values
1115: for i in 1..p_periodicity.count loop
1116: if p_dim_set.calendar.periodicity(p_periodicity(i)).aggregated='N' then
1113: --bug:5954342 changed the dbms_aw.execute api to dbms_aw.execute_ne to shadow errors thrown in case of
1114: --non existing values
1115: for i in 1..p_periodicity.count loop
1116: if p_dim_set.calendar.periodicity(p_periodicity(i)).aggregated='N' then
1117: bsc_aw_dbms_aw.execute_ne('limit '||p_dim_set.calendar.periodicity(p_periodicity(i)).aw_dim||' TO '''||
1118: p_dim_set.calendar.periodicity(p_periodicity(i)).current_period||'''');
1119: bsc_aw_dbms_aw.execute_ne('limit '||p_dim_set.calendar.aw_dim||' ADD '||p_dim_set.calendar.periodicity(p_periodicity(i)).aw_dim);
1120: end if;
1121: end loop;
1115: for i in 1..p_periodicity.count loop
1116: if p_dim_set.calendar.periodicity(p_periodicity(i)).aggregated='N' then
1117: bsc_aw_dbms_aw.execute_ne('limit '||p_dim_set.calendar.periodicity(p_periodicity(i)).aw_dim||' TO '''||
1118: p_dim_set.calendar.periodicity(p_periodicity(i)).current_period||'''');
1119: bsc_aw_dbms_aw.execute_ne('limit '||p_dim_set.calendar.aw_dim||' ADD '||p_dim_set.calendar.periodicity(p_periodicity(i)).aw_dim);
1120: end if;
1121: end loop;
1122: if p_dim_set.dim_set.cube_design='datacube' then
1123: bsc_aw_dbms_aw.execute('limit '||p_dim_set.dim_set.measurename_dim||' to NULL');
1119: bsc_aw_dbms_aw.execute_ne('limit '||p_dim_set.calendar.aw_dim||' ADD '||p_dim_set.calendar.periodicity(p_periodicity(i)).aw_dim);
1120: end if;
1121: end loop;
1122: if p_dim_set.dim_set.cube_design='datacube' then
1123: bsc_aw_dbms_aw.execute('limit '||p_dim_set.dim_set.measurename_dim||' to NULL');
1124: for i in 1..l_measures.count loop
1125: bsc_aw_dbms_aw.execute_ne('limit '||p_dim_set.dim_set.measurename_dim||' ADD '''||l_measures(i)||'''');
1126: end loop;
1127: end if;
1121: end loop;
1122: if p_dim_set.dim_set.cube_design='datacube' then
1123: bsc_aw_dbms_aw.execute('limit '||p_dim_set.dim_set.measurename_dim||' to NULL');
1124: for i in 1..l_measures.count loop
1125: bsc_aw_dbms_aw.execute_ne('limit '||p_dim_set.dim_set.measurename_dim||' ADD '''||l_measures(i)||'''');
1126: end loop;
1127: end if;
1128: for i in 1..l_cubes.count loop
1129: l_pt_comp:=null;
1136: end if;
1137: if l_pt_comp is not null then
1138: l_stmt:=l_stmt||' across '||l_pt_comp;
1139: end if;
1140: bsc_aw_dbms_aw.execute(l_stmt);
1141: end loop;
1142: bsc_aw_dbms_aw.execute('pop '||p_dim_set.dim_set.measurename_dim);
1143: bsc_aw_dbms_aw.execute('pop '||l_projection_dim);
1144: bsc_aw_dbms_aw.execute('pop '||p_dim_set.calendar.aw_dim);
1138: l_stmt:=l_stmt||' across '||l_pt_comp;
1139: end if;
1140: bsc_aw_dbms_aw.execute(l_stmt);
1141: end loop;
1142: bsc_aw_dbms_aw.execute('pop '||p_dim_set.dim_set.measurename_dim);
1143: bsc_aw_dbms_aw.execute('pop '||l_projection_dim);
1144: bsc_aw_dbms_aw.execute('pop '||p_dim_set.calendar.aw_dim);
1145: end if;
1146: Exception when others then
1139: end if;
1140: bsc_aw_dbms_aw.execute(l_stmt);
1141: end loop;
1142: bsc_aw_dbms_aw.execute('pop '||p_dim_set.dim_set.measurename_dim);
1143: bsc_aw_dbms_aw.execute('pop '||l_projection_dim);
1144: bsc_aw_dbms_aw.execute('pop '||p_dim_set.calendar.aw_dim);
1145: end if;
1146: Exception when others then
1147: log_n('Exception in correct_forecast '||sqlerrm);
1140: bsc_aw_dbms_aw.execute(l_stmt);
1141: end loop;
1142: bsc_aw_dbms_aw.execute('pop '||p_dim_set.dim_set.measurename_dim);
1143: bsc_aw_dbms_aw.execute('pop '||l_projection_dim);
1144: bsc_aw_dbms_aw.execute('pop '||p_dim_set.calendar.aw_dim);
1145: end if;
1146: Exception when others then
1147: log_n('Exception in correct_forecast '||sqlerrm);
1148: raise;
1250: l_countvar_cubes(l_countvar_cubes.count+1):=p_dim_set.measure(upper(p_std_measures(i))).countvar_cube;
1251: l_display_cubes(l_display_cubes.count+1):=p_dim_set.measure(upper(p_std_measures(i))).display_cube;
1252: end if;
1253: end loop;
1254: bsc_aw_dbms_aw.execute('limit '||p_dim_set.dim_set.aggmap_operator.measure_dim||' to NULL');
1255: /*Q:can we assume that if there is display cube, it alone needs to be aggregated
1256: Q: here, we do not worry about partitions because we aggregate all partitions*/
1257: for i in 1..p_std_measures.count loop
1258: if p_dim_set.measure(upper(p_std_measures(i))).display_cube is null then
1255: /*Q:can we assume that if there is display cube, it alone needs to be aggregated
1256: Q: here, we do not worry about partitions because we aggregate all partitions*/
1257: for i in 1..p_std_measures.count loop
1258: if p_dim_set.measure(upper(p_std_measures(i))).display_cube is null then
1259: bsc_aw_dbms_aw.execute('limit '||p_dim_set.dim_set.aggmap_operator.measure_dim||' ADD '''||
1260: p_dim_set.measure(upper(p_std_measures(i))).cube||'''');
1261: else
1262: bsc_aw_dbms_aw.execute('limit '||p_dim_set.dim_set.aggmap_operator.measure_dim||' ADD '''||
1263: p_dim_set.measure(upper(p_std_measures(i))).display_cube||'''');
1258: if p_dim_set.measure(upper(p_std_measures(i))).display_cube is null then
1259: bsc_aw_dbms_aw.execute('limit '||p_dim_set.dim_set.aggmap_operator.measure_dim||' ADD '''||
1260: p_dim_set.measure(upper(p_std_measures(i))).cube||'''');
1261: else
1262: bsc_aw_dbms_aw.execute('limit '||p_dim_set.dim_set.aggmap_operator.measure_dim||' ADD '''||
1263: p_dim_set.measure(upper(p_std_measures(i))).display_cube||'''');
1264: end if;
1265: end loop;
1266: bsc_aw_dbms_aw.execute('push '||p_dim_set.dim_set.measurename_dim);
1262: bsc_aw_dbms_aw.execute('limit '||p_dim_set.dim_set.aggmap_operator.measure_dim||' ADD '''||
1263: p_dim_set.measure(upper(p_std_measures(i))).display_cube||'''');
1264: end if;
1265: end loop;
1266: bsc_aw_dbms_aw.execute('push '||p_dim_set.dim_set.measurename_dim);
1267: /*if datacube, we need to limit measurename dim */
1268: if p_dim_set.dim_set.cube_design='datacube' then
1269: bsc_aw_dbms_aw.execute('limit '||p_dim_set.dim_set.measurename_dim||' to NULL');
1270: for i in 1..p_std_measures.count loop
1265: end loop;
1266: bsc_aw_dbms_aw.execute('push '||p_dim_set.dim_set.measurename_dim);
1267: /*if datacube, we need to limit measurename dim */
1268: if p_dim_set.dim_set.cube_design='datacube' then
1269: bsc_aw_dbms_aw.execute('limit '||p_dim_set.dim_set.measurename_dim||' to NULL');
1270: for i in 1..p_std_measures.count loop
1271: bsc_aw_dbms_aw.execute('limit '||p_dim_set.dim_set.measurename_dim||' ADD '''||p_std_measures(i)||'''');
1272: end loop;
1273: end if;
1267: /*if datacube, we need to limit measurename dim */
1268: if p_dim_set.dim_set.cube_design='datacube' then
1269: bsc_aw_dbms_aw.execute('limit '||p_dim_set.dim_set.measurename_dim||' to NULL');
1270: for i in 1..p_std_measures.count loop
1271: bsc_aw_dbms_aw.execute('limit '||p_dim_set.dim_set.measurename_dim||' ADD '''||p_std_measures(i)||'''');
1272: end loop;
1273: end if;
1274: --aggregate cubes with countvar cubes
1275: flag:=false;
1290: l_stmt:=l_stmt||l_countvar_cubes(i)||' ';
1291: end if;
1292: end loop;
1293: if flag then
1294: bsc_aw_dbms_aw.execute(l_stmt);
1295: end if;
1296: /*no countvar cubes */
1297: flag:=false;
1298: l_stmt:='aggregate ';
1307: end if;
1308: end loop;
1309: l_stmt:=l_stmt||' using '||p_agg_map;
1310: if flag then
1311: bsc_aw_dbms_aw.execute(l_stmt);
1312: end if;
1313: bsc_aw_dbms_aw.execute('pop '||p_dim_set.dim_set.measurename_dim);
1314: Exception when others then
1315: log_n('Exception in aggregate_cubes '||sqlerrm);
1309: l_stmt:=l_stmt||' using '||p_agg_map;
1310: if flag then
1311: bsc_aw_dbms_aw.execute(l_stmt);
1312: end if;
1313: bsc_aw_dbms_aw.execute('pop '||p_dim_set.dim_set.measurename_dim);
1314: Exception when others then
1315: log_n('Exception in aggregate_cubes '||sqlerrm);
1316: raise;
1317: End;
1329: l_cube:=p_dim_set.measure(upper(p_measures(i))).display_cube;
1330: end if;
1331: if p_dim_set.dim_set.cube_design='datacube' then
1332: /*5458597. measurename dim has mixed case. earlier it was p_dim_set.dim_set.measurename_dim||' '''||p_measures(i)||''')=*/
1333: bsc_aw_dbms_aw.execute(l_cube||'('||p_dim_set.dim_set.measurename_dim||' '''||
1334: p_dim_set.measure(upper(p_measures(i))).measure||''')='||p_dim_set.measure(upper(p_measures(i))).agg_formula.agg_formula);
1335: else
1336: bsc_aw_dbms_aw.execute(l_cube||'='||p_dim_set.measure(upper(p_measures(i))).agg_formula.agg_formula);
1337: end if;
1332: /*5458597. measurename dim has mixed case. earlier it was p_dim_set.dim_set.measurename_dim||' '''||p_measures(i)||''')=*/
1333: bsc_aw_dbms_aw.execute(l_cube||'('||p_dim_set.dim_set.measurename_dim||' '''||
1334: p_dim_set.measure(upper(p_measures(i))).measure||''')='||p_dim_set.measure(upper(p_measures(i))).agg_formula.agg_formula);
1335: else
1336: bsc_aw_dbms_aw.execute(l_cube||'='||p_dim_set.measure(upper(p_measures(i))).agg_formula.agg_formula);
1337: end if;
1338: end if;
1339: end loop;
1340: Exception when others then
1573: l_stmt:=p_display_cube||'='||p_cube;
1574: if l_pt_comp is not null then
1575: l_stmt:=l_stmt||' across '||l_pt_comp;
1576: end if;
1577: bsc_aw_dbms_aw.execute(l_stmt);
1578: Exception when others then
1579: log_n('Exception in copy_data_display_cubes '||sqlerrm);
1580: raise;
1581: End;
1590: g_debug:=false;
1591: end if;
1592: bsc_aw_utility.init_all(g_debug);
1593: BSC_AW_MD_API.init_all;
1594: bsc_aw_dbms_aw.init_all;
1595: bsc_aw_management.init_all;
1596: g_std_dim:=bsc_aw_adapter_dim.get_std_dim_list;
1597: if nvl(bsc_aw_utility.get_parameter_value('FILE LOG'),'N')='Y' then
1598: g_log_type:='file log';