1Вопрос:
Имеется исходная таблица в реляционной СУБД:
| Контрагент | Договор | Дебет | Кредит |
| Контрагент1 | Договор1 | 100 | 120 |
| Контрагент1 | Договор2 | 610 | 500 |
| Контрагент2 | Договор3 | 30 | 40 |
| Контрагент2 | Договор4 | 50 | 50 |
| Контрагент2 | Договор5 | 10 | 60 |
Как сделать так, чтобы пользователь WebIntelligence всегда бы видел сальдированные значения Дебета и Кредита, в т.ч. при:
а) выполнении произвольного запроса в Query Panel
б) при изменении контекста вычисления (агрегации) в отчете ?
| Контрагент | Договор | Дебет Сальированный | Кредит Сальдированный |
| Контрагент1 | Договор1 | 0 | 20 |
| Контрагент1 | Договор2 | 110 | 0 |
| Контрагент2 | Договор3 | 0 | 10 |
| Контрагент2 | Договор4 | 0 | 0 |
| Контрагент2 | Договор5 | 0 | 50 |
| Контрагент | Дебет Сальированный | Кредит Сальдированный |
| Контрагент1 | 90 | 0 |
| Контрагент2 | 0 | 60 |
Изложите способы решения этой задачи.










Все комментарии (3)
Дмитрий Гераськин 11:49 16 мая 2011
Комментарий эксперта
Вариант 1
Добавить в таблицу Webintelligenceформулы со следующей логикой:
Дебет сальдированный = (дебет –кредит) * ((дебет –кредит) >=0).
Кредит сальдированный = (дебет –кредит) * ((дебет –кредит) <0).
Вариант 2.
Создать в SAP BW инфокуб с некумулятивным показателем “Сальдо”, основанном на показателях увеличивающих/уменьшающих сальдо (Дебет и кредит соответственно).
Загрузить в инфокуб SAP BW данные из исходной таблицы СУБД.
Создать Bex Query на основе инфокуба.
Определить в bex query 2 формулы на показателе “Сальдо”:
Дебет сальдированный = Сальдо * (Сальдо>=0).
Кредит сальдированный = Сальдо * (Сальдо<0).
Построить BO Query на Bex Query и использовать его в WebIntelligence.
Вариант 3
Создать в SAP BW инфокуб с показателями дебет и кредит.
Загрузить в куб исходную таблицу из СУБД.
Создать Bex Query на основе инфокуба.
Определить в bex query 2 формулы:
Дебет сальдированный = (дебет –кредит) * ((дебет –кредит) >=0).
Кредит сальдированный = (дебет –кредит) * ((дебет –кредит) <0).
Пока никому не понтравилось
Михаил Макаров 15:02 25 ноября 2011
Комментарий эксперта
Читаю данные в Web Int Rich Client
Создаю переменные:
«Дебет сальдированный» с формулой
=If[Дебет]>[Кредит] Then[Дебет]-[Кредит] Else0
«Кредит сальдированный» с формулой
=If[Дебет]<[Кредит] Then[Кредит]-[Дебет] Else0
Замещаю колонку «Дебет» переменной «Дебет сальдированный»
Замещаю колонку «Кредит» переменной «Кредит сальдированный»
Копирую таблицу (вниз) и в копии меняю локальный контекст вычисления
Вроде все проверки по заданию выполнены.
Если только под фразой «а) выполнении произвольного запроса в QueryPanel» не крылся какой-то тайный и непонятый мной смысл, так как под термином «произвольный» можно понимать многое чего J.
Пока никому не понтравилось
Сергей Дыжин 15:05 25 ноября 2011
Комментарий эксперта
Для создания независимых от содержания запроса в QueryPanelмер, содержащих сальдированные значения Дебета и Кредита, необходимо обратиться к построению логики на уровне юниверса.
Для начала определим юниверс, соответствующий условиям поставленной задачи:
Где измерения определены следующим образом:
Функция агрегации БД (sum) в определении мер в данном случае выступает не только оптимизатором производительности, перекладывая задачу агрегации значений на уровень БД, но и необходима для корректного вычисления в последующих шагах.
Для определения сальдо введем вспомогательную меру min_Deb_Cred, которая будет возвращать минимальное из значений Дебета и Кредита со следующим значением определением:
CASE WHEN @Select(Меры\Дебет) <= @Select(Меры\Кредит) THEN @Select(Меры\Дебет) ELSE @Select(Меры\Кредит) END
Т.к. мера вспомогательная, то определим ее, как невидимую пользователям:
Следующим шагом будет определение требуемых мер: Сальдированный Дебет и Сальдированный Кредит.
Данные меры будут возвращать разницу значений Дебета/Кредита и нашей дополнительной меры соответственно:
Т.к. агрегированные значения этих мер не могут быть рассчитаны на уровне WebIntelligence, то необходимо указать им агрегацию на уровне БД:
Итоговый юниверс будет иметь следующий вид:
Таким образом, мы получили юниверс с мерами Сальдированный Дебет и Сальдированный Кредит, при выборе которых пользователь получит значения, отвечающие всем условиям поставленной задачи.
Пока никому не понтравилось