|
RTF-шаблон в Oracle BI
|
|||
---|---|---|---|
#18+
Добрый день! Вероятно, здесь можно быстрее найти помощь по oracle bi, чем в других разделах. Имею bi11, модель данных, которая возвращает следующее: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Датасеты из разных БД, в один запрос не скрутить. Связаны между собой ссылкой, где UNICA_BINS.BIN1=SIEBEL_DATA.BIN_ Необходимо эти данные отразить в rtf-шаблоне с той же логикой, что в XML: - данные из UNICA_BINs отражаются всегда, даже если нет вложенных SIEBEL_DATA - если в SIEBEL_DATA несколько записей на одну запись из UNICA_BINs, то вывести их обе в шаблон; поля из UNICA_BINs соответственно продублировать Вроде все просто и понятно, но не могу понять, как делать repeating group в шаблоне: - если делаю все столбцы for-each для UNICA_BINs, то выводится только по одной записи из связанных SIEBEL_DATA - если делаю все столбцы for-each для SIEBEL_DATA, то не выводятся данные из UNICA_BINs (что тоже логично вроде) Получилось вывести данные корректно, если в шаблоне в табличной части вывода сделать две строки - первую для UNICA_BINs, вторую для записей SIEBEL_DATA. Некое дерево получается. Но выглядит уродски, хотелось бы все в одной строке сделать. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2020, 09:36 |
|
RTF-шаблон в Oracle BI
|
|||
---|---|---|---|
#18+
Мне кажется, проблема скорее с запросом, чем с шаблоном. Вроде типовой LEFT OUTER JOIN получается, но у Вас отчетное средство "left outer" забыло ))) Получилось вывести данные корректно, если в шаблоне в табличной части вывода сделать две строки - первую для UNICA_BINs, вторую для записей SIEBEL_DATA. Некое дерево получается. Но выглядит уродски, хотелось бы все в одной строке сделать. Тут скорее нужно в форум XML/XSLT обращаться, можно ли на XPath изобразить union двух поддеревьев (не знаю, как это назвать). Выражение, которое указывается в for-each это просто Xpath. Если удалось изобразить работающий шаблон (я так понимаю, в первом цикле нужно было еще if по count(SIEBEL_DATA)=0 проверять) - то лично я бы так и оставил. p.s. по xpath union в гугле нашлось: Где-то в инетеUnion (|) Operator XML Path Language (XPath) supports the set operation |. The |, or union, operator returns the union of its two operands, which must be node-sets. For example, //company | //employee returns a node-set that combines all the //company nodes and all the //employee nodes. Multiple union operators can be chained together to combine multiple node-sets. For example, //company | //employee | //sales | //consultant returns a node-set containing all //company , //employee , //sales , and //consultant elements. The union operator preserves document order and does not return duplicates. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2020, 10:39 |
|
RTF-шаблон в Oracle BI
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Да нет, с запросом то все ок. Я привел фрагмент, где есть записи в SIEBEL_DATA. Но есть и те, где в SIEBEL_DATA нет записей, а UNICA_BINS имеется. Дело в том, какие инструкции нужно указать в шаблоне, чтобы работало правильно ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2020, 12:16 |
|
RTF-шаблон в Oracle BI
|
|||
---|---|---|---|
#18+
Такое нужно? Почему все такие безрукие ((( note: деньги на пиво перечислять Санкт-Петербург, бар Твин-Пикс, Лиговский просп., 9/31 note2: первая строчка может дублироваться, т.к. придет и с UNICA_BINS и с SIEBEL_DATA, поэтому из SIEBEL_DATA ее нужно выкидывать. note3: Так же фигня с адресацией UNICA_BINS внутри цикла, т.к. при обработке SIEBEL_DATA нужно добавлять две точки. Если имена полей между таблицами не совпадают, то проще тем же самым union сделать по методу "первый попавшийся". Если имена полей могут совпадать, то тогда нужно if'ами, т.к. может быть ошибка "первый попавшийся, не попал". Но if'ами скорее всего будет намного больше букв, т.ч. лучше имена делать уникальными. IMHO 2.xml Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
2.rtf<?for-each: UNICA_BINS | SIEBEL_DATA[position()>1]?> UNICA_BINS=<?BIN1 | ../BIN1?> <?CAMPAIGN_DATE | ../CAMPAIGN_DATE?> SIEBEL_DATA =<?COMPANY_NAME?> <?end for-each?> outputUNICA_BINS=9999999999 01.01.2020 SIEBEL_DATA = UNICA_BINS=0000000000 22.09.2020 SIEBEL_DATA =Рога и Копыта UNICA_BINS=0000000000 22.09.2020 SIEBEL_DATA =Копыта и Рога ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2020, 14:39 |
|
RTF-шаблон в Oracle BI
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Такое нужно? Почему все такие безрукие ((( Ну не гневайтесь, боярин Руки вроде есть, да еще не дошли покумекать по сути вашего ответа и xpath в частности. Спасибо за ваш вариант, попробую! ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2020, 14:50 |
|
RTF-шаблон в Oracle BI
|
|||
---|---|---|---|
#18+
Цикл можно заменить на: <?for-each: SIEBEL_DATA | UNICA_BINS[count(SIEBEL_DATA)=0]?> или на два цикла <?for-each: UNICA_BINS?> <?for-each: SIEBEL_DATA | parent::UNICA_BINS[count(SIEBEL_DATA)=0]?> с последним не очень уверен, плохо знаю XPath ((( ну в общем, вариантов много, нужно тестировать ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2020, 16:10 |
|
RTF-шаблон в Oracle BI
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Цикл можно заменить на: <?for-each: SIEBEL_DATA | UNICA_BINS[count(SIEBEL_DATA)=0]?> или на два цикла <?for-each: UNICA_BINS?> <?for-each: SIEBEL_DATA | parent::UNICA_BINS[count(SIEBEL_DATA)=0]?> Спасибо, работают оба варианта. Union как бы работает, но при обоих циклах не выводятся BIN1 и CAMPAIGN_DATE из UNICA_BINS. Предполагая, что дело в том, что в поле указан запрос типа <?CAMPAIGN_DATE?> без абсолютных путей. Прописал в обоих полях: Код: xml 1. 2.
Столбцы заполняются, но значение дублируется одно и то же с первой записи UNICA_BINS :( ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 18:06 |
|
RTF-шаблон в Oracle BI
|
|||
---|---|---|---|
#18+
Master_Detail но при обоих циклах не выводятся BIN1 и CAMPAIGN_DATE из UNICA_BINS. Предполагая, что дело в том, что в поле указан запрос типа <?CAMPAIGN_DATE?> без абсолютных путей стоп стоп. В 22201928 у меня все выводится. Проблема в том, что получается "мешанина" из SIEBEL_DATA и UNICA_BINS данные BIN1 и CAMPAIGN_DATE в этом случае есть, но их положение совершенно разное. Для "итерации" которыя запустилась по SIEBEL_DATA нужно обращаться как ../CAMPAIGN_DATE а для "итерации" которая запустилась по UNICA_BINS просто CAMPAIGN_DATE Тут или нужно сложный XPath для for-each придумывать (но это нужно в профильный подфорум, я XPath настолько хорошо не знаю) или разводить IF'ами или брать оба варианта и дальше "первое попавшиеся" <?../CAMPAIGN_DATE | CAMPAIGN_DATE?> Master_Detail столбцы заполняются, но значение дублируется одно и то же с первой записи UNICA_BINS :( Вы же так и сказали. Пойди в самый верх документа, потом ниже....пока не найдешь значение по такому пути. В документе таких значений масса - возврашается самое первое. Поскольку путь абсолютный, то на for-each он банально не обращает внимание. IMHO могу ошибаться. Документацию читал давно. С XML Publisher плотно работал лет 10 назад. Терминологию и детали уже не помню. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 18:19 |
|
RTF-шаблон в Oracle BI
|
|||
---|---|---|---|
#18+
Ну и повторю IMHO Обрабатывать данные в XML Publisher это тупиковый путь. Простейшую обработку сделать можно, все же XSLT и XPath имеют достаточно возможностей. Но увлекаться не стоит: 1. требуются продвинутые знания XML/XSLT/Xpath и пр 2. требуется опыт 3. тестирование сложнее, чем тестирование SELECT'ов 4. с учетом 1-3 как такой отчет потом сопровождать - не очень понятно Все же, если есть возможность, лучше данные формировать в удобном виде на стороне сервера. Когда мы рисовали отчеты, мы часто даже даты / числа в текст перегоняли на стороне SQL Server'а. Т.к. даже заниматься форматированием вывода чисел на стороне XML Publisher'а - можно, но все же более сложно, чем привычными SELECT'ами, TO_CHAR'ами AFAIK & IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 18:29 |
|
RTF-шаблон в Oracle BI
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Огромная благодарность вам за помощь! В итоге и сделал как <?../CAMPAIGN_DATE | CAMPAIGN_DATE?> Насчет обработки - да, абсолютно с вами согласен. Форматирование и приведение к тексту тоже в запросе. Но в этой ситуации проблема в том, что два датасета тянут данные с разных БД. Линков между БД нет и по безопасности быть не может (банк, такие условия). Поэтому и приходится связывать датасет между собой линком в паблишере, а потом уже работать с XML ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 19:00 |
|
RTF-шаблон в Oracle BI
|
|||
---|---|---|---|
#18+
Master_Detail два датасета тянут данные с разных БД. Линков между БД нет и по безопасности быть не может (банк, такие условия). Поэтому и приходится связывать датасет между собой линком в паблишере, а потом уже работать с XML Хм... В банках часто бывают всякие интеграционные решения. Почему не применить их для формирования XML-документа, скармливаемого паблишеру (а паблишер питается именно xml-документами, даже если Вы написали sql)? Заодно по-человечески разведете ситуации недоступности одного из источников. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 19:27 |
|
RTF-шаблон в Oracle BI
|
|||
---|---|---|---|
#18+
andrey_anonymous, Да, но там свои вопросы. Нужно этот инструмент искать(а владельцу его надо обосновать необходимость), формировать там xml, помещать xml на сервер bi. А за пару-тройку лет, пока идет проект, это первая ситуация такого рода. Если станет типовой, тогда, думаю, ваш совет очень пригодится! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 19:38 |
|
|
start [/forum/topic.php?fid=52&fpage=36&tid=1880871]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 10ms |
total: | 137ms |
0 / 0 |