Remodeling of infocube или добавление недели в инфокуб

Если необходимо добавить в кубик инфообъект (или удалить, заменить и т.д.) можно воспользоваться функцией ремоделинга. В данном случае мы будет добавлять характеристику времени – Календарная неделя в случае, когда в кубе есть только календарный день.

Запускаем транзакцию RSA1 находим нужный куб.
15.01.jpg
Нам нужно создать правило преобразования нашего куба. Вводим любое имя и жмем Create. Затем вводим описание правила.
15.01_1.jpg
Жмакаем кнопочку "добавить".
15.01_2.jpg
Затем вводим имя инфообъекта и измерение, куда мы будем его добавлять.
Поскольку неделю нам нужно будет высчитать из календарного дня выбираем Customer-exit, в котором мы опишем правило заполнения недели для уже имеющихся данных в кубе.
Так же можно выбрать константу или атрибут характеристики..
15.01_3.jpg
Customer-exit нужно сначала создать. Для этого открываем новое окно и запускаем транзакцию SE24.
Пишем имя класса в жмем Create.
В первом окошке выбираем, что создавать будет класс, а не интерфейс, затем заполняем описание класса.
15.01_4.jpg
Интерфейс у нашего класса будет IF_RSCNV_EXIT.
Переходим на вкладку методов и проваливаемся в _RSCNV_EXIT~EXIT.
Нам открывается окошко, в котором мы будем кодить.

  1. method IF_RSCNV_EXIT~EXIT.
  2. field-symbols: <l_s_old> type any, "старая структура куба
  3. <l_week> type any,
  4. <l_day> type any,
  5. <l_month> type any,
  6. <l_dimid> type any,
  7. <l_newfield> type any. "новая структура куба
  8. data: day type datum,
  9. sid_day(10),
  10. week type KWEEK.
  11.  
  12. assign c_r_newfield->* to <l_newfield>.
  13. assign i_r_old->* to <l_s_old>.
  14. "поскольку у нас в кубиках валяются не данные, а их идишники - тут будет некоторая пляска
  15. ASSIGN COMPONENT 'SID_0CALDAY' OF STRUCTURE <l_s_old> TO <l_day>.
  16.  
  17. IF <l_day> IS ASSIGNED.
  18. sid_day = <l_day>.
  19. "по идишнику определяем дату
  20. SELECT SINGLE DATE0 INTO day FROM /BI0/SDATE WHERE SID = sid_day.
  21. UNASSIGN <l_day>.
  22.  
  23. "по дате определяем неделю
  24. CALL FUNCTION 'DATE_GET_WEEK'
  25. EXPORTING
  26. date = day
  27. IMPORTING
  28. week = week
  29. EXCEPTIONS
  30. date_invalid = 1
  31. OTHERS = 2.
  32. "а теперь ищем идишник для недели
  33. CALL FUNCTION 'RRSI_VAL_SID_SINGLE_CONVERT'
  34. EXPORTING
  35. i_iobjnm = '0CALWEEK'
  36. i_chavl = WEEK
  37. IMPORTING
  38. e_sid = <l_newfield>
  39. EXCEPTIONS
  40. no_sid = 1
  41. chavl_not_allowed = 2
  42. chavl_not_figure = 3
  43. chavl_not_plausible = 4
  44. x_message = 5
  45. interval_not_found = 6
  46. foreign_lock = 7
  47. inherited_error = 8
  48. OTHERS = 9.
  49. IF <l_s_old> IS ASSIGNED.
  50. UNASSIGN <l_s_old>.

Сохраняем метод и активируем класс. Все, наш Customer-exit готов.
Возвращаемся в предыдущее окно и пишем имя класса в поле Customer-exit.
15.01_5.jpg
Жмем ОК и сохраняем нашего правило преобразования.
Далее жмем кнопку Schedule и планируем преобразование куба. После отработки джоба наш куб будет преобразован.

Комментарии