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

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




Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: "Сложный" итерационный расчет - виртуальный куб?
СообщениеДобавлено: Вт, окт 30 2007, 10:46 
Директор
Директор

Зарегистрирован:
Сб, мар 11 2006, 14:59
Сообщения: 1259
Пол: Мужской
Всем доброго утра! Или дня\вечера\ночи.
Вот такой вот вопрос, некие показатели должны посчитаться итерационно. Например мы имеем клиентов и сумму их покупок. А нам надо вывести что-то типа:
Кол-во всего клиентов, Ср. сумма, Кол-во клиентов больше

Ср. сумма определяется как сумма на всего клиентов, а кол-во больше - количество клиентов, сумма покупок которых больше, чем средняя. И в строках, например, пошла какая-то классификация клиентов, неважно. Но вот что важно, так это то, что клиентов легко может быть больше 68000 (т.е. вариант выкинуть отчет с агрегацией на уровне "клиент" и потом посчитать макросом отпадает) и то, что отчет такой делается за период времени, причем - произвольный (т.е. в этом случае не получится посчитать заранее). Таким образом получается, что в этом случае придется использовать virtual cube with services, правильно? В принципе, хаутушку нашел, буду изучать, но сильно нетерпеливо гложет такой вопрос, если у меня виртуальный куб определен на ФМ, то будут ли в момент запуска в этот ФМ передаваться параметры запросов, которые определены на этом кубе?

Ну и вообще - для этого ли придуманы такие виртуальные кубы и какие есть еще варианты (может более корректные) для реализации подобной задачи?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Сложный" итерационный расчет - виртуальный куб?
СообщениеДобавлено: Вт, окт 30 2007, 11:12 
Специалист
Специалист

Зарегистрирован:
Пт, апр 13 2007, 17:15
Сообщения: 225
Road Runner написал:
Всем доброго утра! Или дня\вечера\ночи.
Вот такой вот вопрос, некие показатели должны посчитаться итерационно. Например мы имеем клиентов и сумму их покупок. А нам надо вывести что-то типа:
Кол-во всего клиентов, Ср. сумма, Кол-во клиентов больше


Ср. сумма определяется как сумма на всего клиентов, а кол-во больше - количество клиентов, сумма покупок которых больше, чем средняя. И в строках, например, пошла какая-то классификация клиентов, неважно. Но вот что важно, так это то, что клиентов легко может быть больше 68000 (т.е. вариант выкинуть отчет с агрегацией на уровне "клиент" и потом посчитать макросом отпадает) и то, что отчет такой делается за период времени, причем - произвольный (т.е. в этом случае не получится посчитать заранее).

Что-то я не понял выделенный момент, какой в итоге вид должен иметь отчёт?
Цитата:
Таким образом получается, что в этом случае придется использовать virtual cube with services, правильно?

Да, это возможно, если позволят возможности сервера приложений, нагрузку такой куб может создать большую, особенно на память. Кроме того, откуда необходимо брать данные из ODS или куба?
Цитата:
В принципе, хаутушку нашел, буду изучать, но сильно нетерпеливо гложет такой вопрос, если у меня виртуальный куб определен на ФМ, то будут ли в момент запуска в этот ФМ передаваться параметры запросов, которые определены на этом кубе?

Да, будут передаваться списки необходимых признаков и показателей, ограничения на признаки и ключевая дата.
Цитата:
Ну и вообще - для этого ли придуманы такие виртуальные кубы и какие есть еще варианты (может более корректные) для реализации подобной задачи?

Думаю, что для этого их и придумали, а кроме макросов вариантов не вижу.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Сложный" итерационный расчет - виртуальный куб?
СообщениеДобавлено: Вт, окт 30 2007, 11:28 
Директор
Директор

Зарегистрирован:
Сб, мар 11 2006, 14:59
Сообщения: 1259
Пол: Мужской
EvgenySA написал(а):
Что-то я не понял выделенный момент, какой в итоге вид должен иметь отчёт?

Ну например:
Code:
"Возраст"   "Всего клиентов"   "Ср. сумм"   "Клиентов больше ср."
18-25         200000         14000      90000
26-35         100000         9000      20000
36-45         50000         23000      30000
ст. 46         10000         4000      2000
Итого         360000         10000      100000



Цитата:
Думаю, что для этого их и придумали, а кроме макросов вариантов не вижу.

Ну макросы не подойдут, поскольку клиентов-то может быть больше, чем вмещается строк в екселе. Или Вы имели в виду как раз виртуальный куб на базе ФМ?

Да, по поводу ODS или куб - я пока об этом не думал, а это важно? В том смысле, что из куба будет в ФМ сложнее выбирать данные? Или в принципе может отличаться реализация?


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

Зарегистрирован:
Пт, апр 13 2007, 17:15
Сообщения: 225
Такой отчёт должен пойти без проблем.
Я имел ввиду, кроме виртуальных кубов и макросов, а раз макросы отпали, то только ФМ писать, может кто другой проще подход предложит.
Про ODS и куб, на простых запросах можно для ODS в рукопашную select написать, для куба это сомнительно. А для сложных запросов надо использовать, например RSDRI_INFOPROV_READ_RFC с DESTINATION 'NONE', правда разбирать его вывод весьма нудно.


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

Зарегистрирован:
Пт, июн 24 2005, 15:18
Сообщения: 1216
Откуда: Diagon Alley
EvgenySA написал(а):
Такой отчёт должен пойти без проблем.
Я имел ввиду, кроме виртуальных кубов и макросов, а раз макросы отпали, то только ФМ писать, может кто другой проще подход предложит.
Про ODS и куб, на простых запросах можно для ODS в рукопашную select написать, для куба это сомнительно. А для сложных запросов надо использовать, например RSDRI_INFOPROV_READ_RFC с DESTINATION 'NONE', правда разбирать его вывод весьма нудно.


Вызов выглядит примерно так:

CALL FUNCTION 'RSDRI_INFOPROV_READ_RFC' DESTINATION 'NONE'
EXPORTING
i_infoprov = Z_INFOPROV
i_reference_date = z_keydate
i_save_in_table = z_false
i_save_in_file = z_false
i_authority_check = z_authchk
i_rollup_only = z_space
importing
e_end_of_data = e_end_of_data
TABLES
i_t_sfc = g_t_sfc
i_t_sfk = g_t_sfk
i_t_range = l_t_range
e_t_rfcdata = g_t_rfcdata
e_t_field = g_t_field
EXCEPTIONS
illegal_input = 1
illegal_input_sfc = 2
illegal_input_sfk = 3
illegal_input_range = 4
illegal_input_tablesel = 5
no_authorization = 6
ncum_not_supported = 7
generation_error = 8
illegal_download = 9
illegal_tablename = 10
data_overflow = 12
others = 13.

IF sy-subrc <> 0.
raise read_access_error.
ENDIF.

CALL FUNCTION 'RSDRI_DATA_UNWRAP'
EXPORTING
i_t_rfcdata = g_t_rfcdata
CHANGING
c_t_data = g_t_data.

И еще вот это может будет полезно:

https://www.sdn.sap.com/irj/servlet/prt ... fba451d6ac

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, окт 30 2007, 12:23 
Директор
Директор

Зарегистрирован:
Сб, мар 11 2006, 14:59
Сообщения: 1259
Пол: Мужской
EvgenySA написал(а):
для сложных запросов надо использовать, например RSDRI_INFOPROV_READ_RFC с DESTINATION 'NONE', правда разбирать его вывод весьма нудно.

Спасибо большое за подсказку! Нудно-то нудно, главное - что возможно и пользователя удовлетворить. ;)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: интересно
СообщениеДобавлено: Вт, окт 30 2007, 12:41 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Вт, сен 13 2005, 10:41
Сообщения: 558
Откуда: Гондурас (округ Москвы)
Пол: Мужской
может для этого отчета лучше будет виртуальный показатель посчитать ?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: а вообще
СообщениеДобавлено: Вт, окт 30 2007, 12:49 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Вт, сен 13 2005, 10:41
Сообщения: 558
Откуда: Гондурас (округ Москвы)
Пол: Мужской
надо попробовать решить задачу на BEx.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, окт 30 2007, 14:56 
Специалист
Специалист

Зарегистрирован:
Пт, апр 13 2007, 17:15
Сообщения: 225
RSA1 написал(а):
CALL FUNCTION 'RSDRI_DATA_UNWRAP'
EXPORTING
i_t_rfcdata = g_t_rfcdata
CHANGING
c_t_data = g_t_data.

Самое интересное здесь разобрать что-ж в этом самом g_t_data :) два дня помню голову ломал.

bwbams написал:
может для этого отчета лучше будет виртуальный показатель посчитать ?

Во, точно, ещё один вариант это BADI, но абапить надо не меньше, чем при сервисном кубе.
bwbams написал:
надо попробовать решить задачу на BEx.

Сервисный куб, будет работать через BEx, как и обычный.


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

Зарегистрирован:
Пт, июн 24 2005, 15:18
Сообщения: 1216
Откуда: Diagon Alley
[quote="EvgenySA"]
Самое интересное здесь разобрать что-ж в этом самом g_t_data :) два дня помню голову ломал.



Есть примерчик, помогает.

Report RSDRI_INFOPROV_READ_DEMO

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: интересно
СообщениеДобавлено: Ср, окт 31 2007, 10:54 
Директор
Директор

Зарегистрирован:
Сб, мар 11 2006, 14:59
Сообщения: 1259
Пол: Мужской
bwbams написал:
может для этого отчета лучше будет виртуальный показатель посчитать ?

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, окт 31 2007, 10:56 
Директор
Директор

Зарегистрирован:
Сб, мар 11 2006, 14:59
Сообщения: 1259
Пол: Мужской
RSA1
Очень полезная информация - спасибо за советы.


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

Зарегистрирован:
Пт, апр 13 2007, 17:15
Сообщения: 225
RSA1 написал(а):
Есть примерчик, помогает.

Report RSDRI_INFOPROV_READ_DEMO


Видел я его, он помог слабо (я особо восхитился представлением навигационных атрибутов), больше помог отладчик и просмотр кода, который работает внутри RSDRI_INFOPROV_READ_RFC.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, окт 31 2007, 13:17 
Директор
Директор

Зарегистрирован:
Сб, мар 11 2006, 14:59
Сообщения: 1259
Пол: Мужской
EvgenySA написал(а):
Видел я его, он помог слабо

Так а может Вы тогда поделитесь своими результатами? ;) Впрочем - если это Ваше "ноу-хау", то вполне обоснованно. ;)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, ноя 01 2007, 13:59 
Специалист
Специалист

Зарегистрирован:
Пт, апр 13 2007, 17:15
Сообщения: 225
Road Runner написал:
EvgenySA написал(а):
Видел я его, он помог слабо

Так а может Вы тогда поделитесь своими результатами? ;) Впрочем - если это Ваше "ноу-хау", то вполне обоснованно. ;)

Ничего особо секретного там нет :) В include LRSDRIF05 FORM generate_read_write_report можно найти как определить тип строки возвращаемой таблицы g_t_data (CALL FUNCTION 'RSD_TNAMES_GET_FOR_CUBE' и далее). А в include LRSDRC_SELDRF10 FORM set_chaalias, который превращает имя навигационного атрибута '0MATERIAL__0MATL_GROUP' в 'S003_0MATERIAL', есть ещё FORM set_kyfalias для показателей.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

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


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

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


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

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