| 
	 | 
| 
			
			 | 
		#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 или подзапрос.  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Интересная проблема. Никогда с этим не сталкивался. Что за задача? Можно увидеть сами запросы?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#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  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Думаю эту ситуацию можно обойти, создав два под-отчёта (Sub-report) и вложив их в основной отчёт.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Пробовал уже, тоже не работает!  
		
		
		
		
		
		
		
	 
		 | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А что если использовать dynamic SQL? В SDK в разделе Using Filters in a Report пишут как создать параметр который будет описателем представления, на которое повесятся фильтры. 
		
		
		
		
		
		
		
	DECLARE @SQL nvarchar(4000) SET @SQL = ' SELECT * FROM ('+@CRM_FilteredAccount+') AS FA' EXEC (@SQL) Возможно тогда выборки порйдут по одному и тому же фильтрованному представлению? В свое время я пробовал сделать нечто подобное, но столкнулся с проблемой, что при построении таких запросов не удается воспользоваться всеми прелестями конструктора отчетов - он просто не увидит поля, которые возвращаются из такого запроса и не даст их использовать. Как решить эту проблему я так и не понял. Самое интересное, что все стандартные отчеты в которых используется эта фитча, после загрузки и преобразования тоже не компилятся...  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			И динамические запросы пробовал, в подотчётах они отрабатывают но опять таки не фильтруются! По поводу динамических запросов и констуктора отчётов: в вижуал студио набору данных, который получается посредством динамичекого SQL можно указать какие поля будут возврашены запросом (в свойствах этого DataSet)!
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Moderator 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Во вложении скрин! Жмыхаем на троеточии около поля выбора DataSet-ов, появляется окошко Dataset, переходим на вкладку Fields и указываем имена возврашаемых динамическим запросом полей, а если в запросе есть элиасы, то элиасов! после чего поля этого датаСет будут доступны в конструкторе отчётов!
		 
		
		
		
			Последний раз редактировалось SeregaK; 02.11.2007 в 15:30.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Артем Enot Грунин (1). | |
| 
			
			 | 
		#10 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Спасибо, никогда б там искать не стал! Я на закладке со списком датасетов пытался что-то добавить, но там такой функциональности не предусмотрено.  
		
		
		
		
		
		
		
	  Страно, что готовые отчеты при этом импортируются без этих филдов. ???
		 | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Не знаю почему, но у меня импортируются нормально!
		 
		
		
		
		
		
		
		
	 | 
| 
	
 |