[Home] [Help]
298: /*
299: gets
300: calendar kpi belongs to
301: */
302: procedure get_kpi_properties(p_kpi in out nocopy bsc_aw_adapter_kpi.kpi_r) is
303: l_calendar number;
304: Begin
305: bsc_metadata.get_kpi_calendar(p_kpi.kpi,l_calendar);
306: p_kpi.calendar:=l_calendar;
312: /*
313: given a kpi find out
314: 1. dim sets
315: */
316: procedure get_kpi_dim_sets(p_kpi in out nocopy bsc_aw_adapter_kpi.kpi_r) is
317: l_dim_set dbms_sql.varchar2_table;
318: Begin
319: bsc_metadata.get_kpi_dim_sets(p_kpi.kpi,l_dim_set);
320: --l_dim_set will be numbers like 1,2 etc to make the name unique, append with kpi
354: */
355: procedure get_dim_set_measures(
356: p_kpi varchar2,
357: p_dim_set varchar2,
358: p_measure in out nocopy bsc_aw_adapter_kpi.measure_tb
359: ) is
360: l_measure dbms_sql.varchar2_table;
361: l_measure_type dbms_sql.varchar2_table;
362: l_data_type dbms_sql.varchar2_table;
390: /*
391: given a dimset, get all the S views and their properties
392: gets both ZMV and regular MV
393: */
394: procedure get_s_views(p_kpi varchar2,p_dim_set in out nocopy bsc_aw_adapter_kpi.dim_set_r) is
395: l_s_views dbms_sql.varchar2_table;
396: l_levels dbms_sql.varchar2_table;
397: l_sview_level bsc_aw_adapter_kpi.level_r;
398: Begin
393: */
394: procedure get_s_views(p_kpi varchar2,p_dim_set in out nocopy bsc_aw_adapter_kpi.dim_set_r) is
395: l_s_views dbms_sql.varchar2_table;
396: l_levels dbms_sql.varchar2_table;
397: l_sview_level bsc_aw_adapter_kpi.level_r;
398: Begin
399: --get_s_views will return only regular MV not ZMV
400: bsc_metadata.get_s_views(p_kpi,p_dim_set.dim_set,l_s_views);
401: --for each s view get the level info
405: p_dim_set.s_view(p_dim_set.s_view.count+1).s_view:=l_s_views(i);
406: p_dim_set.s_view(p_dim_set.s_view.count).id:='MV_'||i;
407: for j in 1..l_levels.count loop
408: --note>>>a level can be in 1 dim only, even in the case of standalone levels
409: p_dim_set.s_view(p_dim_set.s_view.count).dim(j):=bsc_aw_adapter_kpi.get_kpi_level_dim_r(p_dim_set,l_levels(j));
410: l_sview_level:=bsc_aw_adapter_kpi.get_dim_level_r(p_dim_set.s_view(p_dim_set.s_view.count).dim(j),l_levels(j));
411: p_dim_set.s_view(p_dim_set.s_view.count).dim(j).levels.delete; --only hold the s view level info
412: p_dim_set.s_view(p_dim_set.s_view.count).dim(j).levels(1):=l_sview_level;
413: end loop;
406: p_dim_set.s_view(p_dim_set.s_view.count).id:='MV_'||i;
407: for j in 1..l_levels.count loop
408: --note>>>a level can be in 1 dim only, even in the case of standalone levels
409: p_dim_set.s_view(p_dim_set.s_view.count).dim(j):=bsc_aw_adapter_kpi.get_kpi_level_dim_r(p_dim_set,l_levels(j));
410: l_sview_level:=bsc_aw_adapter_kpi.get_dim_level_r(p_dim_set.s_view(p_dim_set.s_view.count).dim(j),l_levels(j));
411: p_dim_set.s_view(p_dim_set.s_view.count).dim(j).levels.delete; --only hold the s view level info
412: p_dim_set.s_view(p_dim_set.s_view.count).dim(j).levels(1):=l_sview_level;
413: end loop;
414: end loop;
420: bsc_metadata.get_s_view_levels(l_s_views(i),l_levels);
421: p_dim_set.z_s_view(p_dim_set.z_s_view.count+1).s_view:=l_s_views(i);
422: p_dim_set.z_s_view(p_dim_set.z_s_view.count).id:='ZMV_'||i;
423: for j in 1..l_levels.count loop
424: p_dim_set.z_s_view(p_dim_set.z_s_view.count).dim(j):=bsc_aw_adapter_kpi.get_kpi_level_dim_r(p_dim_set,l_levels(j));
425: l_sview_level:=bsc_aw_adapter_kpi.get_dim_level_r(p_dim_set.z_s_view(p_dim_set.z_s_view.count).dim(j),l_levels(j));
426: p_dim_set.z_s_view(p_dim_set.z_s_view.count).dim(j).levels.delete;
427: p_dim_set.z_s_view(p_dim_set.z_s_view.count).dim(j).levels(1):=l_sview_level;
428: end loop;
421: p_dim_set.z_s_view(p_dim_set.z_s_view.count+1).s_view:=l_s_views(i);
422: p_dim_set.z_s_view(p_dim_set.z_s_view.count).id:='ZMV_'||i;
423: for j in 1..l_levels.count loop
424: p_dim_set.z_s_view(p_dim_set.z_s_view.count).dim(j):=bsc_aw_adapter_kpi.get_kpi_level_dim_r(p_dim_set,l_levels(j));
425: l_sview_level:=bsc_aw_adapter_kpi.get_dim_level_r(p_dim_set.z_s_view(p_dim_set.z_s_view.count).dim(j),l_levels(j));
426: p_dim_set.z_s_view(p_dim_set.z_s_view.count).dim(j).levels.delete;
427: p_dim_set.z_s_view(p_dim_set.z_s_view.count).dim(j).levels(1):=l_sview_level;
428: end loop;
429: end loop;
440: raise;
441: End;
442:
443: --this api called only when there are targets at higher levels
444: procedure get_target_dim_levels(p_kpi varchar2,p_target_dim_set in out nocopy bsc_aw_adapter_kpi.dim_set_r) is
445: l_levels dbms_sql.varchar2_table;
446: l_dim bsc_aw_adapter_kpi.dim_tb;--just temp backup
447: Begin
448: --backup dim and level info
442:
443: --this api called only when there are targets at higher levels
444: procedure get_target_dim_levels(p_kpi varchar2,p_target_dim_set in out nocopy bsc_aw_adapter_kpi.dim_set_r) is
445: l_levels dbms_sql.varchar2_table;
446: l_dim bsc_aw_adapter_kpi.dim_tb;--just temp backup
447: Begin
448: --backup dim and level info
449: l_dim:=p_target_dim_set.dim;
450: --delete all level info
469: log_n('Exception in get_target_dim_levels '||sqlerrm);
470: raise;
471: End;
472:
473: procedure get_target_dim_periodicity(p_kpi varchar2,p_target_dim_set in out nocopy bsc_aw_adapter_kpi.dim_set_r) is
474: --
475: l_periodicities dbms_sql.number_table;
476: l_calendar bsc_aw_adapter_kpi.calendar_r;
477: Begin
472:
473: procedure get_target_dim_periodicity(p_kpi varchar2,p_target_dim_set in out nocopy bsc_aw_adapter_kpi.dim_set_r) is
474: --
475: l_periodicities dbms_sql.number_table;
476: l_calendar bsc_aw_adapter_kpi.calendar_r;
477: Begin
478: --backup
479: l_calendar:=p_target_dim_set.calendar;
480: p_target_dim_set.calendar.periodicity.delete;
499: /*
500: fill in higher periodicities for targets
501: */
502: procedure fill_in_target_periodicity(
503: p_target_calendar in out nocopy bsc_aw_adapter_kpi.calendar_r,
504: p_source_calendar bsc_aw_adapter_kpi.calendar_r,
505: p_periodicity varchar2
506: ) is
507: --
500: fill in higher periodicities for targets
501: */
502: procedure fill_in_target_periodicity(
503: p_target_calendar in out nocopy bsc_aw_adapter_kpi.calendar_r,
504: p_source_calendar bsc_aw_adapter_kpi.calendar_r,
505: p_periodicity varchar2
506: ) is
507: --
508: l_flag boolean;
505: p_periodicity varchar2
506: ) is
507: --
508: l_flag boolean;
509: l_periodicity bsc_aw_adapter_kpi.periodicity_r;
510: Begin
511: if p_periodicity is not null then
512: l_flag:=false;
513: for i in 1..p_target_calendar.periodicity.count loop
515: l_flag:=true;
516: end if;
517: end loop;
518: if l_flag=false then
519: p_target_calendar.periodicity(p_target_calendar.periodicity.count+1):=bsc_aw_adapter_kpi.get_periodicity_r(p_source_calendar.periodicity,
520: p_periodicity);
521: end if;
522: for i in 1..p_source_calendar.parent_child.count loop
523: if p_source_calendar.parent_child(i).child_dim_name=p_periodicity then
543:
544: /*
545: given a kpi and the dim set, find out the levels and their dim where there is zero code
546: */
547: procedure check_dim_zero_code(p_kpi varchar2,p_dim_set in out nocopy bsc_aw_adapter_kpi.dim_set_r) is
548: l_levels dbms_sql.varchar2_table;
549: Begin
550: bsc_metadata.get_zero_code_levels(p_kpi,p_dim_set.dim_set,l_levels);
551: for i in 1..p_dim_set.dim.count loop
551: for i in 1..p_dim_set.dim.count loop
552: for j in 1..p_dim_set.dim(i).levels.count loop
553: if bsc_aw_utility.in_array(l_levels,p_dim_set.dim(i).levels(j).level_name) then
554: --we can say there is zero code only if there is zero code level for this level
555: --we can do this since check_dim_zero_code comes after get_dim_properties in bsc_aw_adapter_kpi
556: if p_dim_set.dim(i).levels(j).zero_code_level is not null then
557: p_dim_set.dim(i).levels(j).zero_code:='Y';
558: p_dim_set.dim(i).zero_code:='Y';
559: end if;
567:
568: /*
569: for each level get the pk,fk, datatype info
570: */
571: procedure get_dim_level_properties(p_kpi varchar2,p_dim in out nocopy bsc_aw_adapter_kpi.dim_r) is
572: Begin
573: for i in 1..p_dim.levels.count loop
574: p_dim.levels(i).level_type:=p_dim.property; --normal or time
575: bsc_metadata.get_dim_level_properties(p_dim.levels(i).level_name,
581: log_n('Exception in get_dim_level_properties '||sqlerrm);
582: raise;
583: End;
584:
585: procedure get_dim_level_filter(p_kpi varchar2,p_level in out nocopy bsc_aw_adapter_kpi.level_r) is
586: Begin
587: bsc_metadata.get_dim_level_filter(p_kpi,p_level.level_name,p_level.filter);
588: Exception when others then
589: log_n('Exception in get_dim_level_filter '||sqlerrm);
609: more correction. in bsc, B table to S table mapping is stored. this means a day level B table may feed only week and another
610: day level B table feeds month.
611: if the B table is at a lower periodicity, we need to check which periodicity it feeds
612: */
613: procedure get_dim_set_data_source(p_kpi varchar2,p_dim_set in out nocopy bsc_aw_adapter_kpi.dim_set_r) is
614: l_base_tables dbms_sql.varchar2_table;
615: l_data_source bsc_aw_adapter_kpi.data_source_r;
616: l_ds_periodicity bsc_aw_adapter_kpi.periodicity_tb;
617: l_ds_copy bsc_aw_adapter_kpi.data_source_r;
611: if the B table is at a lower periodicity, we need to check which periodicity it feeds
612: */
613: procedure get_dim_set_data_source(p_kpi varchar2,p_dim_set in out nocopy bsc_aw_adapter_kpi.dim_set_r) is
614: l_base_tables dbms_sql.varchar2_table;
615: l_data_source bsc_aw_adapter_kpi.data_source_r;
616: l_ds_periodicity bsc_aw_adapter_kpi.periodicity_tb;
617: l_ds_copy bsc_aw_adapter_kpi.data_source_r;
618: l_feed_periodicity dbms_sql.number_table;
619: Begin
612: */
613: procedure get_dim_set_data_source(p_kpi varchar2,p_dim_set in out nocopy bsc_aw_adapter_kpi.dim_set_r) is
614: l_base_tables dbms_sql.varchar2_table;
615: l_data_source bsc_aw_adapter_kpi.data_source_r;
616: l_ds_periodicity bsc_aw_adapter_kpi.periodicity_tb;
617: l_ds_copy bsc_aw_adapter_kpi.data_source_r;
618: l_feed_periodicity dbms_sql.number_table;
619: Begin
620: if p_dim_set.dim_set_type='actual' then
613: procedure get_dim_set_data_source(p_kpi varchar2,p_dim_set in out nocopy bsc_aw_adapter_kpi.dim_set_r) is
614: l_base_tables dbms_sql.varchar2_table;
615: l_data_source bsc_aw_adapter_kpi.data_source_r;
616: l_ds_periodicity bsc_aw_adapter_kpi.periodicity_tb;
617: l_ds_copy bsc_aw_adapter_kpi.data_source_r;
618: l_feed_periodicity dbms_sql.number_table;
619: Begin
620: if p_dim_set.dim_set_type='actual' then
621: bsc_metadata.get_dim_set_base_tables(p_kpi,p_dim_set.dim_set,l_base_tables);
684: raise;
685: End;
686:
687: /*set the measure properties from dimset into datasource (In get_base_table_data_source only the measure name is set)*/
688: procedure set_measure_properties(p_dim_set bsc_aw_adapter_kpi.dim_set_r,p_data_source in out nocopy bsc_aw_adapter_kpi.data_source_r) is
689: Begin
690: for i in 1..p_data_source.measure.count loop
691: for j in 1..p_dim_set.measure.count loop
692: if lower(p_dim_set.measure(j).measure)=lower(p_data_source.measure(i).measure) then
708: raise;
709: End;
710:
711: /*the DS is at some higher level. get just the upper part of the cal hier */
712: procedure get_ds_relevant_cal_hier(p_calendar in out nocopy bsc_aw_adapter_kpi.calendar_r) is
713: l_upper_hier bsc_aw_adapter_kpi.cal_parent_child_tb;
714: Begin
715: bsc_aw_adapter_kpi.get_upper_cal_hier(p_calendar.parent_child,p_calendar.periodicity(1).aw_dim,l_upper_hier);
716: p_calendar.parent_child.delete;
709: End;
710:
711: /*the DS is at some higher level. get just the upper part of the cal hier */
712: procedure get_ds_relevant_cal_hier(p_calendar in out nocopy bsc_aw_adapter_kpi.calendar_r) is
713: l_upper_hier bsc_aw_adapter_kpi.cal_parent_child_tb;
714: Begin
715: bsc_aw_adapter_kpi.get_upper_cal_hier(p_calendar.parent_child,p_calendar.periodicity(1).aw_dim,l_upper_hier);
716: p_calendar.parent_child.delete;
717: for i in 1..l_upper_hier.count loop
711: /*the DS is at some higher level. get just the upper part of the cal hier */
712: procedure get_ds_relevant_cal_hier(p_calendar in out nocopy bsc_aw_adapter_kpi.calendar_r) is
713: l_upper_hier bsc_aw_adapter_kpi.cal_parent_child_tb;
714: Begin
715: bsc_aw_adapter_kpi.get_upper_cal_hier(p_calendar.parent_child,p_calendar.periodicity(1).aw_dim,l_upper_hier);
716: p_calendar.parent_child.delete;
717: for i in 1..l_upper_hier.count loop
718: p_calendar.parent_child(p_calendar.parent_child.count+1):=l_upper_hier(i);
719: end loop;
739: procedure get_base_table_data_source(
740: p_kpi varchar2,
741: p_dim_set varchar2,
742: p_base_table varchar2,
743: p_data_source in out nocopy bsc_aw_adapter_kpi.data_source_r) is
744: --
745: l_bt_levels dbms_sql.varchar2_table;
746: l_bt_feed_levels dbms_sql.varchar2_table;
747: l_bt_level_fks dbms_sql.varchar2_table; --contains the fk like city_code etc from the base table
747: l_bt_level_fks dbms_sql.varchar2_table; --contains the fk like city_code etc from the base table
748: l_bt_level_pks dbms_sql.varchar2_table;
749: l_ds_measures dbms_sql.varchar2_table;--data source measures , same as dim set measures
750: l_formula dbms_sql.varchar2_table;
751: l_level bsc_aw_adapter_kpi.level_r;
752: l_prj_table varchar2(100);
753: l_partition bsc_aw_utility.object_partition_r;
754: l_bt_copy bsc_aw_adapter_kpi.base_table_r;
755: Begin
750: l_formula dbms_sql.varchar2_table;
751: l_level bsc_aw_adapter_kpi.level_r;
752: l_prj_table varchar2(100);
753: l_partition bsc_aw_utility.object_partition_r;
754: l_bt_copy bsc_aw_adapter_kpi.base_table_r;
755: Begin
756: bsc_metadata.get_base_table_levels(p_kpi,p_dim_set,p_base_table,l_bt_levels,l_bt_level_fks,l_bt_level_pks,l_bt_feed_levels);
757: bsc_metadata.get_base_table_measures(p_kpi,p_dim_set,p_base_table,l_ds_measures,l_formula);
758: bsc_metadata.get_base_table_periodicity(p_base_table,p_data_source.base_tables(1).periodicity.periodicity);
783: log_n('Exception in get_base_table_data_source '||sqlerrm);
784: raise;
785: End;
786:
787: procedure get_dim_set_calendar(p_kpi varchar2,p_dim_set in out nocopy bsc_aw_adapter_kpi.dim_set_r) is
788: l_periodicity dbms_sql.number_table;
789: Begin
790: bsc_metadata.get_kpi_periodicities(p_kpi,p_dim_set.dim_set,l_periodicity);
791: for i in 1..l_periodicity.count loop