Ярлыки

четверг, 5 ноября 2015 г.

Webi долго работает

Столкнулся с проблемой. BEx отчет отрабатывает за 8 секунд, Webi на нем отрабатывает 140 секунд.

Решал следующим образом:
1. Поставил трейс в ST01 на SQL. Не увидел ничего криминального
2. Поставил трейс в RSTT. Увидел, что большинство времени тратится на два FM:
  • RSR_MDX_BXML_GET_INFO - получает информацию от bex
  • RSR_MDX_BXML_GZIP_DATA - упаковывает запрос и передает неоднократно на сервер  BObj
3. Зашел в STAD, увидел то же самое. Заметил, что Memory Used около 500 мб. Подумал, что наверно, большой объем данных передается из BEx в BO.
4. Обратил внимание, что в BEx отображается 1000 строк, а в сводке запроса Webi 14000 строк. Это означает, что настройка подавления нулей была проигнорирована стороной Webi, Query Designer предупреждал об этом
5. Создал несколько фильтров на стороне запроса Webi, скрывающий нулевые строки. В результате в отчет стало передаваться меньше данных.
6. Уменьшил количество фильтров до одного - спустил расчет фильтруемых значений в BEX - сократил в семь раз время выполнения.

понедельник, 19 октября 2015 г.

LOOP AT itab GROUP BY group

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

LOOP AT itab GROUP BY 
( comp_code = result_fields-comp_code
  busentity = result_fields-busentity
  rebuilding = result_fields-rebuilding )
REFERENCE INTO DATA (group_ref).

     LOOP AT group_ref ASSIGNING <result_fields>.
     <...>
     ENDLOOP

ENDLOOP.

Если есть записи:
comp_code busentity rebuilding cha1 cha2
1000            1001       1003          abc   xyz
1000            1001       1003          qwe  rty
1000            1001       1003          asd   dfg
1000            1001       1004          zxc   vbn
1000            1001       1004          yui   opp

То в первом цикле мы упакуем в группу group_ref первые три записи, и пройдемся по ним, 
во втором цикле упакуем следующие две записи и пройдемся по ним.

суббота, 17 октября 2015 г.

Отсутствуют полномочия Изменить для Query 'QueryName'

Поймал ошибку полномочий в Query Designer. 
Открыл запрос, получил ошибку:


У пользователя SAP_ALL, трейс проблем не видит:


Оказалось, что запрос был создан  в GUI 7.40, при открытии в GUI 7.30 возникает такая ошибка. 
При обновлении ошибка устранилась.

среда, 7 октября 2015 г.

вторник, 1 сентября 2015 г.

#TOREFRESH

Для того, чтобы избежать ошибки #TOREFRESH в ячейке webi отчета при добавлении какого-либо нового показателя на лист можно пойти на хитрость и в юниверс-дизайнере принудительно установить способ требуемой агрегации для показателя (меры). Обычно это SUM. 

По умолчанию агрегация делегируется от источника - "БД делегирован".
Так же иногда помогает при #UNAVAILABLE

Не отображаются сведения в webi

Была такая проблема, которую никак не могу объяснить.
Имеем бекс на кубике. В кубике есть инфообъект. У него есть атрибут - "Дата создания".
Бекс вытягивает этот инфообъект и его атрибут, и отлично отображает.









Webi как известно, игнорирует атрибуты, которые мы выводим в бексе. Он видит абсолютно все атрибуты признака, поэтому в бексе их можно не выводить дополнительно. Но, отображает, к сожалению, не все. Например, в данном примере не отображает дату.
Атрибуты webi видит как "Сведения". 







Проблема самоустранилась с переходом на 7.4 on HANA.

понедельник, 31 августа 2015 г.

Формула

В правиле преобразования формулы RIGHT, LEFT работают в два раза быстрее, чем SUBSTRING:



Мелочь, а приятно.

пятница, 28 августа 2015 г.

DTP перестал забирать записи

Возникла странная ситуация на BI7.4 on HANA. Запросы загружались в PSA в нулевую таблицу /BIC/B000xxx000. Далее забирались вверх потоком. Через 16 минут они почему-то стали загружаться уже в первую таблицу /BIC/B000xxx001. Дельта DTP их по прежнему забирал, но передавал 0 записей. 

Источник не был изменен за это время. Объем - примерно 40-50 записей.
Исправить удалось так:
1. Откатил все последние запросы из таблицы /BIC/B000xxx001
2. Убрал в DTP оптимизацию под HANA
3. Заново запустил DTP - процесс увидел записи
4. Снова включил оптимизацию под HANA
5. На всякий случай сделал полный откат запросов и загрузил их все. Подхватил из обоих таблиц.

четверг, 20 августа 2015 г.

Ошибка при активации DSO

В исходной ERP системе была одна запись из трех миллионов, в котором одно поле было, видимо, null. 
При инициализации дельты эти три миллиона записей из PSA передавались в DSO и активировались там около 3х часов. В итоге на одной записи активация падала со словами что-то вроде "Can'not generate SID for object 'iOBJ' value ''". Соответственно даже зная объект, отловить эту некорректную запись было не возможно. 

Коллега подсказал такой кусок кода в rule routine к этому объекту:

data: lv_char(60) type c.
lv_char = source_fields-iobj(60).
replace all occurrences of regex '[[:cntrl:]]' in lv_char with ''.
result = lv_char.

Что такое '[[:cntrl:]]' мне не понятно, но кривого значения как небывало.

суббота, 15 августа 2015 г.

Импорт объектов

При импорте запросов особенно часто возникают ошибки из-за отсутствия объектов в целевой системе. Я для себя выработал следующую стратегию:
  • Разделяю все активируемые объекты на разные запросы, и импортирую их в следующем порядке:
  1. Инфопровайдеры
  2. ABAP
  3. Источники
  4. Инфопакеты
  5. Инфообъекты
  6. ETL  - Трансформации, DTP, рутины
  7. Цепочки процессов
  8. BEx
  • Перед импортом захожу в RS09. Транзакция показывает объекты в запросе с соответствующими иконками - визуально можно оценить все ли хватает
  • Перед деблокированием копий жму Shift + F12 - Моделировать деблокирование. 
  • Захожу в "Связь с переносом", выбираю просмотр списком, выбираю нужный измененный объект. Как известно инструмент этот опасный, может захватить лишнего, поэтому отменяю весь выбор и вручную прощелкиваю объекты и расфасовываю их по разным запросам.
Такая последовательность действий очень хорошо позволяет снизить вероятность ошибок при импорте уже деблокированных запросов.

Неудачный импорт объекта ELEM

Часто бывает так, что при импорте запроса возникает ошибка с восьмеркой - объект ELEM такой то не импортирован. Без объяснения причин. Скорее всего это происходит, когда мы корректируем BEx запрос, в котором присутствуют некоторые объекты, созданные непосредственно на инфопровайдере, а не в запросе. При этом объект может находится в локальных объектах, либо не донесен до целевой системы по ландшафту. Поэтому при импорте объектов запроса в целевую систему TMS не пишет ошибок, однако на стадии активации  BEx запроса выясняется что тот или иной объект отсутствует, поэтому активация query (объект REP) не возможна.

Понять какой именно объект отсутствует в целевой системе можно двумя способами. Посмотреть в таблице RSZELTDIR описание объекта, вспомнить в каком query он используется и добавить его в запрос на импорт, либо непосредственно найти через "Связь с переносом". Тип объекта (запрос, фильтр, показатель, расчетный показатель и т.д.) можно узнать из таблицы. Так же можно посмотреть в SE03, может быть он уже где то блокирован, поэтому не захватился при активации query.

Визуально заранее оценить целостность запроса на импорт к сожалению не возможно. При импорте двух-трех более менее сложных отчетов можно получить более двухсот объектов в запросе.

пятница, 14 августа 2015 г.

RECORDMODE

Толковая статья как пользоваться RECORDMODE.
Допустим нам надо загрузить данные из DSO в куб по какому-либо ключу. Пользователь может создать записи, скорректировать их или удалить. Если правильно проставлять метку recordmode, то при активации в DSO все показатели просуммируются в соответствии с меткой. Добавленные присуммируются, скорректированные обновятся, удаленные - обнулятся.

Т.е. пользователь создал запись: 
Конфеты, 10 руб.
Она залилась в DSO, активировалась, ушла в куб, в кубе имеем конфеты на сумму 10 р.

После этого пользователь скорректировал запись:
Конфеты 7 руб.
Она залилась в DSO, после активации имеем в журнале конфеты -3 р, в активных данных конфеты на сумму 10 - 3  = 7 р., в куб так же ушло -3 рубля, в итоге в кубе конфеты 7 руб.

В конце концов пользователь удалил запись:
Если передать при этом метку recordmode = D, то в DSO в журнале получим конфеты на сумму 10 - 3 - 7 = 0 р., в активных данных мы эту запись вообще не увидим (адекватное поведение BW), а вот в кубе она останется. В кубе будет Конфеты 0 руб.

В отчете это выглядит не красиво, убрать пустые строки можно только подавив все нулевые показатели. Для того чтоб убрать эту строку можно оказывается просто сжать куб с подавлением нулей. Тогда при сжатии система проверит каждую запись, и если все показатели пустые или ноль, то она просто удалит ее из куба. Очень удобно. Из цепочки эта галочка так же доступна.



среда, 12 августа 2015 г.

Инфокуб не показывает данные

Загрузил данные в инфо-куб, однако при просмотре данных через стандартный интерфейс (показать все признаки/показатели) данные не отобразились. В F таблице данные отображаютя в полном объеме, все SID присутствуют, визуально проблем нет.

Дело в том, что у некоторых атрибутов признаков, учавствующих в инфокубе не выровнены таблицы с основными данными. Например, запись в S таблице есть, а фактически они отсутствуют в M ракурсе, равно как и в P, X, Y, Q таблицах.

Чтобы это исправить надо запустить RSRV -> Все составные тесты -> Основные данные -> Проверка основных данных для признака.

Вместо признака на экране выбрать куб. 

Глюк удаления инфообъекта

Создал инфообъект, загрузил в него основные данные и ERP, потом удалил. При удалении не удалилась структура связи. После этого инфообъект в катклоге инфообъектов не видно, видно только в инфопровайдерах, оттуда удалить его нельзя.
Надо найти этот инфообъект в инфопровайдерах и оттуда удалить его из менюшки Признак - Удалить.

вторник, 11 августа 2015 г.

Ошибка генерации BEx

Возникла ошибка при генерации BEx. Система написала, что не может произвести агрегацию по расчетным показателям, основанных на замене из признака.
Нужно смотреть ноту http://service.sap.com/sap/support/notes/1005772 
Какие то недоделки при переходе с 3.x на 7.x.

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

Ссылки на ресурсы

1. Список курсов (информация от 2012 г.)
http://12ozmdm.blogspot.ru/2012/03/sap-bw.html 

2. Популярные транзакции
http://www.tcodesearch.com/transaction-codes/search?module=bw

Моделирование
DSO
1. Активация DSO
http://wiki.scn.sap.com/wiki/display/Research/How+ODS+activation+on+Standard+DSO+works+-+an+SQL+approach 

2. Доступно о RECORDMODE
http://scn.sap.com/docs/DOC-54330

Изучение основ
BI
1. http://www.guru99.com/sap-bi.html

ABAP
1. http://www.guru99.com/abap-tutorial.html 
2. http://sapabap-4.blogspot.in/