Текущее время: Вт, авг 19 2025, 00:22

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: УРА!!! Написал сторнирование куба через ODS. Порадуйтесь за меня
СообщениеДобавлено: Чт, дек 14 2006, 18:36 
Специалист
Специалист

Зарегистрирован:
Пт, июл 28 2006, 08:36
Сообщения: 183
Наконец-то написал функционал извлечение данных куба соединенного с ODS в нативном SELECT-е для сторнирования данных.
Жизнь налаживается... :D


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, дек 14 2006, 19:16 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
Ммм...
А зачем?
да еще на нативном селекте?
1. Update Rules чем не проканали?
2. Open SQL чем не проканал?

Native все же опасен...

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, дек 14 2006, 19:23 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, дек 27 2004, 13:48
Сообщения: 772
Откуда: от верблюда
Угу, +1... Если не секрет - опишите плз Вашу ситуацию...

_________________
Бросай курить, вставай на лыжи -
И вместо рака будет грыжа!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: УРА!!! Написал сторнирование куба через ODS. Порадуйтесь за меня
СообщениеДобавлено: Пт, дек 15 2006, 10:15 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, июн 24 2005, 15:18
Сообщения: 1216
Откуда: Diagon Alley
perishkin написал(а):
Наконец-то написал функционал извлечение данных куба соединенного с ODS в нативном SELECT-е для сторнирования данных.
Жизнь налаживается... :D


IMO, Nothing personal...

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

_________________
"Если ты в молодости не испытал трудности, их стоит купить за большие деньги". (с) Даймо


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 15 2006, 12:26 
Специалист
Специалист

Зарегистрирован:
Пт, июл 28 2006, 08:36
Сообщения: 183
Отвечаю по порядку

Сначала о ситуации. В BW поступают данные по документу, которые сохраняются в итоге в кубе (или нескольких кубах). Документ может быть изменен, удален и т.п. и все эти изменения должны быть отражены в BW.Из внешней системы приходят не дельты, а новые данные по документу. Чтобы их сохранить надо удалить старые и загрузить новые, то есть выполнить операцию сторнирования.
Если сторнирование выполнять через ODS, то в ODS должна фиксироваться вся информация попадающая в куб. То есть практически данные в кубе и ODS идентичны + журнал обновления ODS, который конечно можно периодически чистить, но это административные расходы. К тому же, если возникнет необходимость удалить выборочно данные из куба, то надо удалять их и из ODS. Поддерживать согласование двух целей куба и ODS не слишком приятно. Если в кубе хранить ид. документа, то можно конечно воспользоваться стандартным ФМ (имя сейчас не помню, но он есть)для удаления данных из куба и ODS бы не понадобился. Однако, если документов много, то придется вызывать его многократно, передавая каждый раз несколько ид. в SELECT-OPTIONS-таблицах, чтобы не переполнить SQL-запрос. В принципе и это было бы нестрашно, но ид. документа в исходной системе составной, а в SELECT-OPTIONS парные условия задать не получится. В результате использование модуля отпадает... Я СТУПИЛ, БЛИН, ДО МЕНЯ ТОЛЬКО СЕЙЧАС ДОШЛО... я же могу склеивать поля и ПОЛУЧИТЬ ИД. ДОКУМЕНТА в ВИДЕ ОДНОГО ПОЛЯ.... и использовать стандартный ФМ удаления данных из куба по одному полю

Да, а я тут почти неделю писал свой код... а оказывается зря. Самое теперь неприятное, что написать-то я его написал, но чего теперь с ним делать???

Так что прошу прощения, сам виноват

PS: А насчет Open SQL

- ограничивается соединением не более 25 таблиц (я уже писал)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 15 2006, 12:55 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, июн 24 2005, 15:18
Сообщения: 1216
Откуда: Diagon Alley
Ничего не понял. Может я туплю на конец недели, НО:

perishkin написал(а):
Отвечаю по порядку

Сначала о ситуации. В BW поступают данные по документу, которые сохраняются в итоге в кубе (или нескольких кубах). Документ может быть изменен, удален и т.п. и все эти изменения должны быть отражены в BW.Из внешней системы приходят не дельты, а новые данные по документу. Чтобы их сохранить надо удалить старые и загрузить новые, то есть выполнить операцию сторнирования.


Все операции: удаление, изменение поддерживаются ОДС, параметр 0RECORDMODE, см. Хелп.


perishkin написал(а):
Если сторнирование выполнять через ODS, то в ODS должна фиксироваться вся информация попадающая в куб. То есть практически данные в кубе и ODS идентичны + журнал обновления ODS, который конечно можно периодически чистить, но это административные расходы.


ОДС автоматически генерит нужную дельту для куба, при изменении/удалинии записи в ОДС

perishkin написал(а):
К тому же, если возникнет необходимость удалить выборочно данные из куба, то надо удалять их и из ODS.


Зачем ?

perishkin написал(а):
Поддерживать согласование двух целей куба и ODS не слишком приятно. Если в кубе хранить ид. документа, то можно конечно воспользоваться стандартным ФМ (имя сейчас не помню, но он есть)для удаления данных из куба и ODS бы не понадобился.


Здесь тоже не понятно. Аналогично тому, что я описал выше.

perishkin написал(а):
PS: А насчет Open SQL

- ограничивается соединением не более 25 таблиц (я уже писал)


А здесь вообще тёмный лес. Это какой же должен быть запрос, чтобы понадобилось объединение более 25-ти таблиц ? :shock: :shock: :shock:

_________________
"Если ты в молодости не испытал трудности, их стоит купить за большие деньги". (с) Даймо


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 15 2006, 13:18 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
2 RSA1 +1

2 perishkin
ИМХО если написать 25 запросов будет быстрее работать, чем объединение 25 таблиц, ибо декартово произведение 25 таблиц - жуть (с поправкой на оптимизатор, просто страшновато), поэтому, думаю 25 - это предел разумного помноженный на 2-3 :)

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 15 2006, 13:37 
Специалист
Специалист

Зарегистрирован:
Пт, июл 28 2006, 08:36
Сообщения: 183
2 RSA1

1.

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

2.

Поскольку данные из куба мы удалили через ФМ и залили две строки применив полное обновление никакие дельты для куба нам не нужны.


3.

Если бы загрузка первых трех строк шла через ODS в куб, то в ODS и кубе находились бы одинаковые данные (по три строки в каждом). Одна из строк в исходной системе изменилась. При очередной загрузке идет три строки (две старые и одна изменившаяся, почему так? так написано приложение в исхю системе). Строки обновляют данные в ODS и дельты по изменившейся строке идут в куб. Если выборочно удалить данные из куба, но оставить в ODS, то следующая загрузка в куб может передать неправильные дельты

4. см. 3

5.

Читаю куб, в котором даже на слишком много признаков... соединения куба, DIM-таблиц, SID-таблиц, атрибутов и т.п. с легкостью перекрывает число 25. BW генерит в этом случае либо Native SQL, либо временные вьюхи, а затем на базе них Open SQL.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 15 2006, 13:38 
Специалист
Специалист

Зарегистрирован:
Пт, июл 28 2006, 08:36
Сообщения: 183
2 g

Почитайте основы SQL. Декартово произведение!!! :D :D :D


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 15 2006, 14:00 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
perishkin написал(а):
2 g

Почитайте основы SQL. Декартово произведение!!! :D :D :D


Читал не раз.
Где я не прав?

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 15 2006, 14:10 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, июн 24 2005, 15:18
Сообщения: 1216
Откуда: Diagon Alley
perishkin написал(а):
2 g

Почитайте основы SQL. Декартово произведение!!! :D :D :D



http://help.sap.com/saphelp_46b/helpdat ... ameset.htm

Если join не определён - в этом случае будет декартово произведение

_________________
"Если ты в молодости не испытал трудности, их стоит купить за большие деньги". (с) Даймо


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 15 2006, 15:07 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
Это в результате оно будет без указания условий...
Но будет ли оно возникать временно (в мозгах машины), зависит от СУБД и индексов.
В любом случае, практика показывает, что лучше больше 2-5 таблиц в одном запросе не джойнить, а сделать несколько отдельных запросов.

(зря я полез в специфику исполнения объединяющих запросов, такое качественно решается только с помощью практических тестов)

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 15 2006, 17:09 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, июн 24 2005, 15:18
Сообщения: 1216
Откуда: Diagon Alley
perishkin написал(а):
2 RSA1

1.

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




Ну хорошо.

Вся проблема в том, что источник - не R/3. И кoличество позиций документа может быть различным в старой и новой версиях документа.

По-моему, гораздо проще было бы сделать цепочку сделать цепочку КУБ -> ОДС -> КУБ. При загрузке в первый КУБ установить опцию полного удаления данных перед загрузкой. Затем реализовать программу на UPDATE RULES, которая читала бы данные из ODS, и если количество позиций документа в ОДС не совпадало с количеством позиций в кубе, то анализировала бы. Если надо удалить позицию - то в DATA PACKAGE APPEND-ом можно добавить запись, где установить RECORDMODE = D.

_________________
"Если ты в молодости не испытал трудности, их стоит купить за большие деньги". (с) Даймо


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 15 2006, 17:55 
Специалист
Специалист

Зарегистрирован:
Пт, июл 28 2006, 08:36
Сообщения: 183
2 RSA1

Сразу замечания. Читать данные из ODS в правилах обновления не самая удачная затея. Например данные по документу частично попадают в один пакет, а частично в другой. Сразу возникает вопрос
как читать из ODS? Добавление количества записей в DATA_PACKAGE тоже заранее неопределено. Так, при определенных условиях, можно добавить записей свыше допустимого и цепочка загрузки неожиданно даст сбой. Я как раз искал надежный способ.

1.

Загрузить данные в PSA, загрузить в ODS ид. документов из PSA. Написать ABAP-отчет и в нем просмотреть ODS и через ФМ RSDRD_DELETE_FACTS группами (по 100 штук, например) по ид. документа удалить данные из куба. Загрузить данные из PSA в куб полным обновлением. Вместо PSA можно использовать еще какой-нибудь ODS для хранения поступивших из исх. системы данных

2.

Загрузить данные в PSA, загрузить в ODS ид. документов из PSA.
Используя то, что я написал (соединение ODS и куба) загрузить
сторнирующие данные в куб. Загрузить данные из PSA в куб полным обновлением. Вместо PSA можно использовать еще какой-нибудь ODS для хранения поступивших из исх. системы данных

То есть я изобрел велосипед во втором способе, потратив много сил на реализацию извлечения куба. Можно было бы использовать стандартный модуль удаления из цели RSDRD_DELETE_FACTS (правда в этом случае придется в кубе хранить лишний склеенный ключ, например, если ключ документа состоит из DEP_ID, CALDAY, DOCTYPE, то в кубе надо будет хранить DEP_ID, CALDAY, DOCTYPE и слеенный DEP_ID, CALDAY, DOCTYPE).

Эти два метода надежнее вашего


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 15 2006, 20:00 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, июн 24 2005, 15:18
Сообщения: 1216
Откуда: Diagon Alley
perishkin написал(а):
2 RSA1

Сразу замечания. Читать данные из ODS в правилах обновления не самая удачная затея. Например данные по документу частично попадают в один пакет, а частично в другой. Сразу возникает вопрос
как читать из ODS? Добавление количества записей в DATA_PACKAGE тоже заранее неопределено. Так, при определенных условиях, можно добавить записей свыше допустимого и цепочка загрузки неожиданно даст сбой. Я как раз искал надежный способ.



"Элементарно, Ватсон(с)" :D :D :D

У нас интерфейс с APO построен на цепочках, аналогичных тем, что я описал. И записи в DATA PACKAGE добавляются без проблем.

В продуктиве год.

_________________
"Если ты в молодости не испытал трудности, их стоит купить за большие деньги". (с) Даймо


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB