23.03.2023, 12:48 | #1 |
Участник
|
Функция Lookup в SSRS-отчетах
Добрый день, коллеги.
Система AX2012 R3, работаем с SSRS. Появилась необходимость печати в разных местах отчета разных данных из одной и той же таблицы. Решили использовать функцию Lookup, которая проводит поиск по указанному ключу в конкретном датасорсе. Однако все попытки использования разбивались об ошибку Lookup is invalid. InvalidIdentifier. Я так понял, что в связке с AX данная функция не работает. Есть какая-нибудь информация по этому поводу?
__________________
// no comments |
|
23.03.2023, 14:59 | #2 |
Administrator
|
Про функцию не подскажу, однако с коллегами пришли к выводу, что работа через DP-класс с отчетами - максимально быстрая (т.е. когда во временную табличку / таблички загоняются все необходимые поля, которые потом выводятся на экран). Т.о. если исходная выборка чуть сложнее, чем запрос из джойна двух таблиц, а объем данных чуть больше, чем десяток записей - то создаётся DP-класс с временными таблицами и уже встроенными функциями SSRS нет необходимости пользоваться.
Поэтому статистики по использованию этой функции не набрал.
__________________
Возможно сделать все. Вопрос времени |
|
23.03.2023, 17:59 | #3 |
Участник
|
Проясню немного контекст задачи.
Нужно сделать отчет, в котором присутствует текст на двух языках. Соответственно каждая надпись превращается в нечто типа такого: <Expr> - <Expr>, где первое выражение на английском, а второе, к примеру, на китайском. Заполнена таблица с первичным ключом, содержащим метки, остальные поля - язык и перевод. Можно использовать Query, можно ReportDataProvider для доступа к таблице. Но чтобы вывести перевод конкретной метки, необходимо найти соответствующую запись в таблице. Собственно для этого и пытаемся использовать Lookup, но, к сожалению, безуспешно.
__________________
// no comments |
|
23.03.2023, 18:48 | #4 |
северный Будда
|
обратите внимание вот на эту фразу
то есть вывод в отчёт делается не из исходной таблицы хранения с данными, а из промежуточной временной, сделанной специально под отчёт. А уж как вы будете заполнять временную таблицу - сие сугубо дело вашей фантазии и Х++
__________________
С уважением, Вячеслав |
|
|
За это сообщение автора поблагодарили: sukhanchik (2). |
23.03.2023, 21:51 | #5 |
Administrator
|
Цитата:
Я про это и говорю: Цитата:
Видел задачу выводить текст на заранее заданном языке в заранее заданной колонке. Возились, возились, в итоге пришли к решению заранее вычислять текст меток на нужном языке (в отдельной временной таблице) и уже выводить из неё данные в надписи. Так что тут может не функция Lookup не работать, а просто быть особенность работы с метками
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: dech (2). |
25.03.2023, 10:55 | #6 |
Участник
|
Идея плодить поля для единственной записи временной таблицы меня не очень вдохновляет, тем более, что это не один отчет. Хотелось бы более элегантного решения.
__________________
// no comments |
|
25.03.2023, 14:04 | #7 |
Участник
|
А зачем плодить поля, если можно плодить строки?
|
|
27.03.2023, 07:43 | #8 |
Участник
|
Может я чего не знаю... Каким образом можно в одном текстбоксе отобразить 5-ю запись, а в другом 10-ю?
__________________
// no comments |
|
29.03.2023, 14:43 | #9 |
Участник
|
Видимо, не правильно понял вашу проблему.
А много у вас таких полей? Сделать через аксаптовские метки (+параметр для условия, какую метку брать) или через просто параметры отчета - не вариант? |
|
29.03.2023, 15:58 | #10 |
Участник
|
Цитата:
Через аксаптовские метки можно работать только с одним языком. Мы сделали решение - C#-функцию, позволяющую перевести текст метки на любой язык, указанный в параметре. Проблема в том, что эта функция работает медленно, и отчет вместо 5 секунд отрабатывает за 30. Сейчас как раз пытаемся это оптимизировать. Просто через параметры - это как? На данный момент пытаемся сделать большое поле в виде XML, чтобы затем распарсить. Этим занимается коллега, поэтому подробностей не могу раскрыть. Но идея конечно интересная.
__________________
// no comments |
|
29.03.2023, 19:46 | #11 |
Administrator
|
Цитата:
Сообщение от dech
Много, порядка сотни.
Через аксаптовские метки можно работать только с одним языком. Мы сделали решение - C#-функцию, позволяющую перевести текст метки на любой язык, указанный в параметре. Проблема в том, что эта функция работает медленно, и отчет вместо 5 секунд отрабатывает за 30. Сейчас как раз пытаемся это оптимизировать. Поэтому для целей перевода и была организована (у меня) табличка с уже предрассчитанным значениями меток. Безусловно, у этого решения много минусов, но существенный плюс - оно работает также быстро, как и для одногоязычного отчёта. Есть конечно еще один безумный вариант - на каждую надпись создавать свой енум и в отчете использовать Ax Enum Provider для вывода значения этого енума (=надписи) на нужном языке (но нужна предрассчитанная табличка SRSAnalysisEnums) Вариант через XML передавать по сути перечень всех меток отчета на нужном языке - это вариант, но нужно тут засечь время на распарсивание этого XML внутри SSRS (ведь парситься будет каждая надпись)
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: dech (2). |
29.03.2023, 20:17 | #12 |
Участник
|
вот тут про какой-то LookupSet пишут - или это как раз вы и пробовали в первом посте?
https://www.inogic.com/blog/2015/09/...-dynamics-crm/ |
|
30.03.2023, 07:31 | #13 |
Участник
|
Цитата:
Сообщение от Pandasama
вот тут про какой-то LookupSet пишут - или это как раз вы и пробовали в первом посте?
https://www.inogic.com/blog/2015/09/...-dynamics-crm/ P.S. На вашу ссылку ругается антивирус, будьте осторожнее, установите хотя бы бесплатный AVG.
__________________
// no comments |
|
30.03.2023, 07:41 | #14 |
Участник
|
Уже засекали, дополнительные 2 секунды на распарсивание порядка 100 меток. Это лучше 25 секунд, затраченных на перевод.
__________________
// no comments |
|
|
За это сообщение автора поблагодарили: sukhanchik (4). |
30.03.2023, 09:34 | #15 |
Участник
|
В нашем случае тормоза происходят из-за клиент-серверного взаимодействия.
__________________
// no comments |
|
30.03.2023, 16:26 | #16 |
Участник
|
Цитата:
P.S. На вашу ссылку ругается антивирус, будьте осторожнее, установите хотя бы бесплатный AVG.
А синтаксис своего Lookup можете привести? |
|
30.03.2023, 18:33 | #17 |
Участник
|
Отчет печатается на основном языке. А из таблицы выбираются записи, соответствующие второму языку.
X++: =Lookup("@SYS16384", Fields!LabelId.Value, Fields!Translation.Value, "STXLabels") Повторюсь, что мы уже определились со стратегией распарсивания XML. Думаю это даже быстрее будет, чем работа с Lookup, если он вдруг внезапно заработает.
__________________
// no comments Последний раз редактировалось dech; 30.03.2023 в 18:39. |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|