AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.03.2023, 12:48   #1  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
642 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Функция Lookup в SSRS-отчетах
Добрый день, коллеги.
Система AX2012 R3, работаем с SSRS.
Появилась необходимость печати в разных местах отчета разных данных из одной и той же таблицы. Решили использовать функцию Lookup, которая проводит поиск по указанному ключу в конкретном датасорсе.
Однако все попытки использования разбивались об ошибку Lookup is invalid. InvalidIdentifier.
Я так понял, что в связке с AX данная функция не работает. Есть какая-нибудь информация по этому поводу?
__________________
// no comments
Старый 23.03.2023, 14:59   #2  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,271 / 3465 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Про функцию не подскажу, однако с коллегами пришли к выводу, что работа через DP-класс с отчетами - максимально быстрая (т.е. когда во временную табличку / таблички загоняются все необходимые поля, которые потом выводятся на экран). Т.о. если исходная выборка чуть сложнее, чем запрос из джойна двух таблиц, а объем данных чуть больше, чем десяток записей - то создаётся DP-класс с временными таблицами и уже встроенными функциями SSRS нет необходимости пользоваться.
Поэтому статистики по использованию этой функции не набрал.
__________________
Возможно сделать все. Вопрос времени
Старый 23.03.2023, 17:59   #3  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
642 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Проясню немного контекст задачи.
Нужно сделать отчет, в котором присутствует текст на двух языках.
Соответственно каждая надпись превращается в нечто типа такого: <Expr> - <Expr>, где первое выражение на английском, а второе, к примеру, на китайском. Заполнена таблица с первичным ключом, содержащим метки, остальные поля - язык и перевод. Можно использовать Query, можно ReportDataProvider для доступа к таблице. Но чтобы вывести перевод конкретной метки, необходимо найти соответствующую запись в таблице. Собственно для этого и пытаемся использовать Lookup, но, к сожалению, безуспешно.
__________________
// no comments
Старый 23.03.2023, 18:48   #4  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,486 / 408 (16) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
обратите внимание вот на эту фразу
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
создаётся DP-класс с временными таблицами
то есть вывод в отчёт делается не из исходной таблицы хранения с данными, а из промежуточной временной, сделанной специально под отчёт. А уж как вы будете заполнять временную таблицу - сие сугубо дело вашей фантазии и Х++
__________________
С уважением,
Вячеслав
За это сообщение автора поблагодарили: sukhanchik (2).
Старый 23.03.2023, 21:51   #5  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,271 / 3465 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от dech Посмотреть сообщение
Проясню немного контекст задачи.
Но чтобы вывести перевод конкретной метки, необходимо найти соответствующую запись в таблице.
Спасибо за пояснение.

Я про это и говорю:
Цитата:
Сообщение от pitersky Посмотреть сообщение
то есть вывод в отчёт делается не из исходной таблицы хранения с данными, а из промежуточной временной, сделанной специально под отчёт. А уж как вы будете заполнять временную таблицу - сие сугубо дело вашей фантазии и Х++
Т.е. метки точно также могут быть полями во временной таблице, которые могут вычисляться на этапе подготовки данных в DP-классе. И те же надписи могут также быть <Expr>, но не содержать текст вида Labels!... а просто выводить данные из полей.
Видел задачу выводить текст на заранее заданном языке в заранее заданной колонке. Возились, возились, в итоге пришли к решению заранее вычислять текст меток на нужном языке (в отдельной временной таблице) и уже выводить из неё данные в надписи. Так что тут может не функция Lookup не работать, а просто быть особенность работы с метками
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: dech (2).
Старый 25.03.2023, 10:55   #6  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
642 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от pitersky Посмотреть сообщение
то есть вывод в отчёт делается не из исходной таблицы хранения с данными, а из промежуточной временной, сделанной специально под отчёт. А уж как вы будете заполнять временную таблицу - сие сугубо дело вашей фантазии и Х++
Идея плодить поля для единственной записи временной таблицы меня не очень вдохновляет, тем более, что это не один отчет. Хотелось бы более элегантного решения.
__________________
// no comments
Старый 25.03.2023, 14:04   #7  
Pandasama is offline
Pandasama
Участник
 
448 / 133 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
А зачем плодить поля, если можно плодить строки?
Старый 27.03.2023, 07:43   #8  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
642 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от Pandasama Посмотреть сообщение
А зачем плодить поля, если можно плодить строки?
Может я чего не знаю... Каким образом можно в одном текстбоксе отобразить 5-ю запись, а в другом 10-ю?
__________________
// no comments
Старый 29.03.2023, 14:43   #9  
Pandasama is offline
Pandasama
Участник
 
448 / 133 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
Видимо, не правильно понял вашу проблему.
А много у вас таких полей?
Сделать через аксаптовские метки (+параметр для условия, какую метку брать) или через просто параметры отчета - не вариант?
Старый 29.03.2023, 15:58   #10  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
642 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от Pandasama Посмотреть сообщение
Видимо, не правильно понял вашу проблему.
А много у вас таких полей?
Сделать через аксаптовские метки (+параметр для условия, какую метку брать) или через просто параметры отчета - не вариант?
Много, порядка сотни.
Через аксаптовские метки можно работать только с одним языком. Мы сделали решение - C#-функцию, позволяющую перевести текст метки на любой язык, указанный в параметре. Проблема в том, что эта функция работает медленно, и отчет вместо 5 секунд отрабатывает за 30. Сейчас как раз пытаемся это оптимизировать.
Просто через параметры - это как?
На данный момент пытаемся сделать большое поле в виде XML, чтобы затем распарсить. Этим занимается коллега, поэтому подробностей не могу раскрыть. Но идея конечно интересная.
__________________
// no comments
Старый 29.03.2023, 19:46   #11  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,271 / 3465 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от dech Посмотреть сообщение
Много, порядка сотни.
Через аксаптовские метки можно работать только с одним языком. Мы сделали решение - C#-функцию, позволяющую перевести текст метки на любой язык, указанный в параметре. Проблема в том, что эта функция работает медленно, и отчет вместо 5 секунд отрабатывает за 30. Сейчас как раз пытаемся это оптимизировать.
Вот собственно тормоза потому и происходят, что на уровне отчёта происходит дополнительная выборка данных. Тормоза происходят, как только SSRS начинаешь напрягать выборкой и расчетом данных. Это увы - правда жизни... Сам бы хотел, чтобы SSRS умел бы чуть больше. Но нет .
Поэтому для целей перевода и была организована (у меня) табличка с уже предрассчитанным значениями меток. Безусловно, у этого решения много минусов, но существенный плюс - оно работает также быстро, как и для одногоязычного отчёта.
Есть конечно еще один безумный вариант - на каждую надпись создавать свой енум и в отчете использовать Ax Enum Provider для вывода значения этого енума (=надписи) на нужном языке (но нужна предрассчитанная табличка SRSAnalysisEnums)

Вариант через XML передавать по сути перечень всех меток отчета на нужном языке - это вариант, но нужно тут засечь время на распарсивание этого XML внутри SSRS (ведь парситься будет каждая надпись)
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: dech (2).
Старый 29.03.2023, 20:17   #12  
Pandasama is offline
Pandasama
Участник
 
448 / 133 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
вот тут про какой-то LookupSet пишут - или это как раз вы и пробовали в первом посте?
https://www.inogic.com/blog/2015/09/...-dynamics-crm/
Старый 30.03.2023, 07:31   #13  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
642 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от Pandasama Посмотреть сообщение
вот тут про какой-то LookupSet пишут - или это как раз вы и пробовали в первом посте?
https://www.inogic.com/blog/2015/09/...-dynamics-crm/
LookupSet - это то же самое, что и Lookup, только возвращается не одна запись, а набор. Поведение SSRS аналогичное - Invalid identifier.
P.S. На вашу ссылку ругается антивирус, будьте осторожнее, установите хотя бы бесплатный AVG.
__________________
// no comments
Старый 30.03.2023, 07:41   #14  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
642 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Вариант через XML передавать по сути перечень всех меток отчета на нужном языке - это вариант, но нужно тут засечь время на распарсивание этого XML внутри SSRS (ведь парситься будет каждая надпись)
Уже засекали, дополнительные 2 секунды на распарсивание порядка 100 меток. Это лучше 25 секунд, затраченных на перевод.
__________________
// no comments
За это сообщение автора поблагодарили: sukhanchik (4).
Старый 30.03.2023, 09:34   #15  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
642 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Вот собственно тормоза потому и происходят, что на уровне отчёта происходит дополнительная выборка данных.
В нашем случае тормоза происходят из-за клиент-серверного взаимодействия.
__________________
// no comments
Старый 30.03.2023, 16:26   #16  
Pandasama is offline
Pandasama
Участник
 
448 / 133 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
Цитата:
P.S. На вашу ссылку ругается антивирус, будьте осторожнее, установите хотя бы бесплатный AVG.
У меня стоит вполне себе платный Kaspersky и не ругается, вероятно, проблема на вашей стороне.

А синтаксис своего Lookup можете привести?
Старый 30.03.2023, 18:33   #17  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
642 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Отчет печатается на основном языке. А из таблицы выбираются записи, соответствующие второму языку.
X++:
=Lookup("@SYS16384", Fields!LabelId.Value, Fields!Translation.Value, "STXLabels")
Lookup на сайте Microsoft

Повторюсь, что мы уже определились со стратегией распарсивания XML. Думаю это даже быстрее будет, чем работа с Lookup, если он вдруг внезапно заработает.
__________________
// no comments

Последний раз редактировалось dech; 30.03.2023 в 18:39.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
a33ik: MultiSelect lookup in a SSRS report with BaseEnum Blog bot DAX Blogs 0 31.07.2021 02:27
alirazazaidi: Custom lookup UIBuilder SSRS RDP Dynamics 365 for finance and operations Blog bot DAX Blogs 0 04.03.2020 15:11
lookup в полях диалоговой формы в ssrs отчетах. Skolos DAX: Программирование 10 30.03.2016 21:28
bojensen: Filter Second lookup based on First Value – Ax 2012 SSRS | Vasanth Arivali’s Space Blog bot DAX Blogs 0 24.09.2015 18:11
vasantharivali: Filter Second lookup based on First Value – Ax 2012 SSRS Blog bot DAX Blogs 0 24.09.2014 13:11
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 09:58.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.