четверг, 11 октября 2012 г.

BI InfoProviders and InfoObjects naming



Infoproviders
<Project><Object type><Meaningful description>

<Project> - 1 symbol
Y – Internal projects
E – External projects
<Object type> - 1 symbol
M – MultiProvider
S – InfoSet
C – InfoCube
O – DSO
V - Virtual provider
H - Open Hub
DS - DataSourse
IA - InfoArea

<Meaningful description> - 7 symbols
Free text

 Infoobjects
<Object type><Meaningful description>
I – Characteristics
K – Key figure

Проблемы с кодировкой? SAP_CODEPAGE!

Отчет из Аналайзера 3.5, вместо русских символов выводит иероглифы.

Добавляем в переменную среду на локальной машине пользовательскую переменную:

SAP_CODEPAGE = 1504.


Upload from Exel File

form compute_flat_file_filename
  using    p_infopackage  type rslogdpid
           p_datasource   type rsoltpsourcer
           p_logsys       type rsslogsys
  changing p_filename     type RSFILENM
           p_subrc        like sy-subrc.
*$*$ begin of routine - insert your code only below this line        *-*
* This routine will be called by the adapter,
* when the infopackage is executed.
  DATAls_pc_exec TYPE /bic/pz_pc_exec,
        po_appfile TYPE rsfilenm
        .

  DATAlv_chavl    TYPE rschavl
        .

  lv_chavl 'STOCK_TARGET_DAY'.
  CALL FUNCTION 'RSAU_READ_MASTER_DATA'
    EXPORTING
      i_iobjnm                'Z_PC_EXEC'
      i_chavl                 lv_chavl
    IMPORTING
      e_structure             ls_pc_exec
    EXCEPTIONS
      read_error              1
      no_such_attribute       2
      wrong_import_parameters 3
      chavl_not_found         4
      OTHERS                  5.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  CONCATENATE ls_pc_exec-/bic/z_pcpath ls_pc_exec-tctprcschn INTO
  po_appfile.

  p_filename po_appfile.
*....
  p_subrc 0.
*$*$ end of routine - insert your code only before this line         *-*
endform.


вторник, 25 сентября 2012 г.

четверг, 13 сентября 2012 г.

Ускоряем запросы за счет кэша?


В BI включаем использование «нового» режима работы OLAP кэша. Новый в кавычках, так как настройка доступна с  прошлого года в SP 16.
SAP обещает лучшую производительность и отсутствие взаимных блокировок, с которыми мы с недавнего времени постоянно сталкиваемся в BI.

Активация заключается в добавлении параметра в RSADMIN RSR_CACHE_ACTIVATE_NEW = X.
После этого новый режим кэша нужно выбрать в свойствах провайдера RSDIPROP. Либо BEX-запроса в RSRT






вторник, 4 сентября 2012 г.

Заблокируем доступ пользователям к отчетам

Может понадобиться функционал блокировки пользователей, в момент загрузки данных. Например, если хранилищ несколько и загружаются они параллельно, или когда удаляем индексы с кубов, а пользователь запускает в этот момент отчет.

Для начала в CMOD добавляем include:

Ссылка
Большой и длинный текст :)

*&---------------------------------------------------------------------*
*&  Include           Z_LOCKDATA
*&---------------------------------------------------------------------*

"$ Region BREAK Session when load SO
DATA:
           l_uploadstatus   TYPE VALUE lx
         l_cubelist       TYPE RANGE OF rsinfocube
         ls_cubelist      LIKE LINE OF l_cubelist
         lt_tmplist       TYPE STANDARD TABLE OF rsinfocube
         l_so_report      TYPE VALUE space
         l_itmp1          TYPE i
         l_itmp2          TYPE i
         .

FIELD-SYMBOLS:
           <ls_tmplist>     TYPE rsinfocube
         .

CONSTANTS:
           lso_infoarea     TYPE string VALUE 'YIA_SO_REP'
         .

CALL FUNCTION 'Z_GET_CUSTOMER_PARAMETER'
  EXPORTING
    constant_name          'ZBW_SO_UPLOADSTATUS'
    default_value          lx
*   SOURCE_TABLE           = 'TVARVC'
  IMPORTING
   result_parameter       l_uploadstatus
          .

IF l_uploadstatus lx.
  "Get user list for SO
  GET PARAMETER ID 'ZSO_REPORT' FIELD l_so_report.

  IF l_so_report space.

*     prepare structure
    CLEAR ls_cubelist.
    ls_cubelist-sign   'I'.
    ls_cubelist-option 'EQ'.

*      "get cube list for SO
*      CALL FUNCTION 'Z_GET_CUSTOMER_SELECT_OPTION'
*        EXPORTING
*          constant_name       = 'ZBW_SO_CUBELIST'
*         "DEFAULT_VALUE       = 'DUMMY'
*         "source_table        = 'TVARVC'
*        TABLES
*          result_range        = l_cubelist.

    SELECT DISTINCT infocube
      FROM rsdcube
      INTO TABLE lt_tmplist
     WHERE infoarea lso_infoarea.

    IF lt_tmplist[] IS NOT INITIAL.
      LOOP AT lt_tmplist
         ASSIGNING <ls_tmplist>.
        ls_cubelist-low <ls_tmplist>.
        COLLECT ls_cubelist INTO l_cubelist.
      ENDLOOP.
    ENDIF.

    SELECT DISTINCT odsobject
      FROM rsdodso
      INTO TABLE lt_tmplist
      WHERE infoarea lso_infoarea.

    IF lt_tmplist[] IS NOT INITIAL.
      LOOP AT lt_tmplist
         ASSIGNING <ls_tmplist>.
        ls_cubelist-low <ls_tmplist>.
        COLLECT ls_cubelist INTO l_cubelist.
      ENDLOOP.
    ENDIF.

    SELECT DISTINCT infoset
      FROM rsqiset
      INTO TABLE lt_tmplist
      WHERE infoarea lso_infoarea.

    IF lt_tmplist[] IS NOT INITIAL.
      LOOP AT lt_tmplist
         ASSIGNING <ls_tmplist>.
        ls_cubelist-low <ls_tmplist>.
        COLLECT ls_cubelist INTO l_cubelist.
      ENDLOOP.
    ENDIF.

    IF i_s_rkb1d-infocube IN l_cubelist.
      IF sy-langu 'R'.
        MESSAGE ID 'ZDBW_MESS' TYPE 'E' NUMBER '003'
        WITH 'Data load have not finished, yet!' 'Your session is been interrupt!' 'Support Team.'.
        "          WITH 'Загрузка ещё не закончена!' 'Ваша сессия будет прервана!' 'СП.'.
      ELSE.
        MESSAGE ID 'ZDBW_MESS' TYPE 'E' NUMBER '003'
        WITH 'Data load have not finished, yet!' 'Your session is been interrupt!' 'Support Team.'.
      ENDIF.
    ENDIF"IF I_S_RKB1D IN l_cubelist.
  ENDIF.
ENDIF"IF l_uploadstatus = 'X'.
"$ Endregion BREAK Session when load SO


Не забываем про ФМ:

FUNCTION z_get_customer_parameter.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(CONSTANT_NAME)
*"     VALUE(DEFAULT_VALUE) DEFAULT 'DUMMY'
*"     VALUE(SOURCE_TABLE) DEFAULT 'TVARVC'
*"  EXPORTING
*"     VALUE(RESULT_PARAMETER)
*"----------------------------------------------------------------------

  DATA:
        l_low         TYPE tvarv_val

      l_dummy_type  TYPE rsscr_kind
      l_dummy_numb  TYPE tvarv_numb
      .

  SELECT low
         type numb UP TO ROWS
           INTO (l_low,
                 l_dummy_typel_dummy_numb)
           FROM (source_table)
          WHERE    name constant_name
            AND (  type c_selection_type_parameter        "'P'
                OR type c_selection_type_sel_option )     "'S'
       ORDER BY type     "Type of selection: 'P'/'S'
                numb     "Current selection number
              .
*   EXIT.
  ENDSELECT.

  IF sy-subrc 0.
    result_parameter l_low.
  ELSE.          "Nothing found in the source table...
    result_parameter default_value.
  ENDIF.

ENDFUNCTION.


Включить ФМ в вашу функциональную группу Z-овских ФМ.

В STVARV реагируем на значение переменноq ZBW_SO_UPLOADSTATUS = Х или пусто.

В профиль пользователя, в параметры, добавляем ZSO_REPORT = Х, если пользователь должен все равно иметь доступ к отчетам. (http://scn.sap.com/thread/142631)


Смысл - ограничиваем доступ к инфо-провайдерам из указанной Info-area. 
Но нам ничего не мешает скопировать мультик в другую область и запускать отчеты с него, при блокировке.

вторник, 10 июля 2012 г.

четверг, 3 мая 2012 г.

Удаление красных пакетов во время прогона цепочки


1.       В таблице RSADMIN поставить флаг X для параметра DTP_AUTO_RESTART. Это можно сделать через программу SAP_RSADMIN_MAINTAIN.

2.       В DTP на вкладке Execute появится опция Automatically Repeat Red Requests in Process chains. Ставим галочку и, о чудо, цепочка сама теперь удаляет красный пакет и грузит новый.


вторник, 27 марта 2012 г.

Integrated Planning. Развертка отчета.

В развертке отчета для планирования, обязательно должны быть все признаки, которые содержатся в агрегационном уровне.

Как исключение, можно допустить скрытие признака, если сделаем на нем фильтр с конкретным значением.

четверг, 22 марта 2012 г.

Активация всех активных структур переноса к исходной системе

Хорошая вещь, слов нет:

RS_TRANSTRU_ACTIVATE_ALL

Для старых систем 3.х.

Не забываем в поле ввода исходной системы без пробела сразу и мандант дописать.

вторник, 20 марта 2012 г.

Скрытие нулевых строк\столбцов в отчетах. Bex 3.5

Попался нам отчет с двумя структурами. Для которого не работало подавление нулевых строк\столбцов из свойств отчета.

Уже стали грешить на отсутствие свежих патчей или на простые глюки (что порой случалось, главный виновник оказывался тут КЭШ).

Но оказалось все просто, до банальности:

И эта галка должна быть проставлена для каждой структуры.

вторник, 14 февраля 2012 г.

Only MultiCube!

Всегда, всегда, когда будешь строить отчет на инфо-провайдере, заворачивай его в мультикуб. Даже если он пока один.

четверг, 9 февраля 2012 г.

Немного о некумулятивах.

Все мы про них знаем и все мы их любим.
Некумулятив можно сделать кумулятивом, если на ссылочный его признак создадим переменную-формулу и будем использовать их в конечном показателе вместе.

вторник, 31 января 2012 г.

Workbook. *.xlsx to *.xls

Медленно, но верно переходим на 2010 MS Office. Но консерватизм преобладает сильно. Часть пользователей не может открыть рабочие книги, сохраненные через 2010 Excel в ролях.

После небольшого замешательства нашли галочку, на панели BEx-инструментов, которая нам поможет:


понедельник, 23 января 2012 г.

ABAP. Визуализация кода.

Рекомендации по названиям объектов в коде:


                               l_*         - локальная переменная с единственным значением
                               lt_*        - локальная таблица
                               ls_*       - локальная структура
                               lr_*        - локальная переменная типа Range
                               lty_*     - локальный тип
                               p_*        - параметр
                               so_*      - selection option
                               <ls_*>  - field symbol на структуру (все остальное по аналогии)
                               lcl_*      - локальный класс
                               lo_*       - объект

RECORDMODE. Первое знакомство.

Как оказалось, RECORDMODE будет работать довольно хитро, если вы надумали уменьшить количество ключей при преобразовании.

Пример:

В одном пакете приходит сам Заказ, а в другом - удаление Позиции из заказа. В правилах, если признак "Заказ" больше не ключ (например мы агрегируем данные по Торговой Точке за период), две эти записи сожмутся и RECORDMODE удалит Заказ целиком.

Хочу оговориться, ситуация справедлива лишь для RECORDMODE = R.

Если же первая запись приходит с частичным удалением, а вторая с добавлением позиций - то записей в RESULT_PACKAGE будет две.

Решили в конце Start routine производить замену RECORDMODE = R на RECORDMODE = X. Так как данная ситуация касается только RECORDMODE = Reverse-image.


    LOOP AT source_package
                     ASSIGNING <source_fields>
                         WHERE recordmode 'R'
                             .
      <source_fields>-recordmode 'X'.

    ENDLOOP.

вторник, 10 января 2012 г.

Загрузки данных

Перед загрузкой данных в итоговый куб не стоит производить трансформации с показателями, так как есть вероятность несжатия куба.

Столкнулись с ситуацией, когда пара строк в кубе не сжалась, так как в трансформации использовались мастер-данные, которые не были загружены вовремя.




Archivation in BI

Оказывается, при восстановлении архивированных данных из хранилищ, сами файлы с архивами тоже удаляются. Проходится проводить повторную архивацию.

Обидно...