24.10.2007, 12:20 | #1 |
Участник
|
Предварительная фильтрация в отчётах (CRMAF)
Ситуация. В отчёте необходимо использовать два набора данных для заполнения двух соответствующих таблиц. Оба набора данных получаются Select-ом по одной и той же вьюхе. Необходимо фильтровать данные этих вьюх используя префикс CRMAF.
Вопрос. Пусть выборку делаем по таблице FilteredAccount, тогда если для заполнения первого набора данных использовать запрос Select * from FilteredAccount as CRMAF_FilteredAccount Where «условия для первого набора данных», а для второго использовать запрос Select * from FilteredAccount as CRMAF_FilteredAccount Where «условия для второго набора данных». Crm даст один фильтр по объекту Account, но этот фильтр отработает только на одном из селектов. А если использовать разные имена alias-ов, т.е в первом селекте CRMAF_FilteredAccount1 и во втором CRMAF_FilteredAccount2. То CRM даст два фильтра по объекту Account, каждый из которых отработает на своём селекте. Почему в варианте с одним фильтром (т.е. с одиноковыми alias-ами)фильтр отрабатывает только на одном из запросов и как сделать так, чтобы он отрабатывал на всех? Замечание. Такая же проблема возникает в отчёте с одним селектом, если в этом селекте необходимо несколько раз обращаться за получением одних и тех же записей с использованием предварительной фильтрации, т.е. если используется оператор UNION или подзапрос. |
|
25.10.2007, 10:23 | #2 |
Moderator
|
Интересная проблема. Никогда с этим не сталкивался. Что за задача? Можно увидеть сами запросы?
|
|
25.10.2007, 17:17 | #3 |
Участник
|
Вот, пожалуйста!
SELECT TJ.new_spstage,InStepTable.New_stepnumber as StepNumber,COUNT(*) as InForThisStep,(SELECT COUNT(*) FROM (SELECT * FROM FilteredNew_TransactionJournal as CRMAF_FilteredNew_TransactionJournal) as TJOut
INNER JOIN FilteredNew_stepofvoronka as OutStepTable ON (OutStepTable.New_Name=TJOut.new_spstage)AND(OutStepTable.New_voronka_step=TJOut.new_crater_stage) WHERE (TJOut.new_action=1) AND (TJOut.new_crater_stagename=@vorname) AND (OutStepTable.New_stepnumber=InStepTable.New_stepnumber-1) )as OutFromBeforeStep FROM (SELECT * FROM FilteredNew_TransactionJournal as CRMAF_FilteredNew_TransactionJournal) as TJ INNER JOIN FilteredNew_stepofvoronka as InStepTable ON (InStepTable.New_Name=TJ.new_spstage)AND(InStepTable.New_voronka_step=TJ.new_crater_stage) WHERE (TJ.new_action=0) AND (TJ.new_crater_stagename=@vorname) AND (TJ.new_spstage!='Потенциальное предложение') AND (InStepTable.New_stepnumber!=1) Group by TJ.new_spstage,InStepTable.New_stepnumber ORDER BY InStepTable.New_stepnumber |
|
31.10.2007, 20:55 | #4 |
Участник
|
Думаю эту ситуацию можно обойти, создав два под-отчёта (Sub-report) и вложив их в основной отчёт.
|
|
31.10.2007, 23:18 | #5 |
Участник
|
Пробовал уже, тоже не работает!
|
|
01.11.2007, 09:16 | #6 |
Moderator
|
А что если использовать dynamic SQL? В SDK в разделе Using Filters in a Report пишут как создать параметр который будет описателем представления, на которое повесятся фильтры.
DECLARE @SQL nvarchar(4000) SET @SQL = ' SELECT * FROM ('+@CRM_FilteredAccount+') AS FA' EXEC (@SQL) Возможно тогда выборки порйдут по одному и тому же фильтрованному представлению? В свое время я пробовал сделать нечто подобное, но столкнулся с проблемой, что при построении таких запросов не удается воспользоваться всеми прелестями конструктора отчетов - он просто не увидит поля, которые возвращаются из такого запроса и не даст их использовать. Как решить эту проблему я так и не понял. Самое интересное, что все стандартные отчеты в которых используется эта фитча, после загрузки и преобразования тоже не компилятся... |
|
01.11.2007, 16:59 | #7 |
Участник
|
И динамические запросы пробовал, в подотчётах они отрабатывают но опять таки не фильтруются! По поводу динамических запросов и констуктора отчётов: в вижуал студио набору данных, который получается посредством динамичекого SQL можно указать какие поля будут возврашены запросом (в свойствах этого DataSet)!
|
|
02.11.2007, 09:41 | #8 |
Moderator
|
|
|
02.11.2007, 15:27 | #9 |
Участник
|
Во вложении скрин! Жмыхаем на троеточии около поля выбора DataSet-ов, появляется окошко Dataset, переходим на вкладку Fields и указываем имена возврашаемых динамическим запросом полей, а если в запросе есть элиасы, то элиасов! после чего поля этого датаСет будут доступны в конструкторе отчётов!
Последний раз редактировалось SeregaK; 02.11.2007 в 15:30. |
|
|
За это сообщение автора поблагодарили: Артем Enot Грунин (1). |
06.11.2007, 07:59 | #10 |
Moderator
|
Спасибо, никогда б там искать не стал! Я на закладке со списком датасетов пытался что-то добавить, но там такой функциональности не предусмотрено. Страно, что готовые отчеты при этом импортируются без этих филдов. ???
|
|
06.11.2007, 13:33 | #11 |
Участник
|
Не знаю почему, но у меня импортируются нормально!
|
|