|
26.11.2009, 11:46 | #1 |
Участник
|
Предварительная фильтрация в нескольких DataSet
Создаю .rdl отчет в CRM. Есть 2 таблицы. Для каждой свой Dataset. Оба запроса к Dataset используют предварительную фильтрацию. Т.е.как в в запросе к первому DS используется конструкция FilteredNew_loan AS CRMAF_New_loan
Код: SELECT CRMAF_New_loan.new_loanid, CRMAF_New_loan.new_account_number, CRMAF_New_loan.new_estdate, CRMAF_New_loan.new_legalentityname, CRMAF_New_loan.owneridname, CRMAF_New_loan.new_clientname, FilteredNew_event.new_descriptionen, FilteredNew_event.new_name, FilteredNew_event.new_eventsid, FilteredNew_event.new_event_owneridname, FilteredNew_event.new_dateutc, FilteredNew_event.new_project, FilteredNew_event.new_durations, FilteredNew_specialistbreakdown.new_rate FROM FilteredNew_loan AS CRMAF_New_loan INNER JOIN FilteredNew_event ON CRMAF_New_loan.new_loanid = FilteredNew_event.new_eventsid LEFT OUTER JOIN FilteredNew_specialistbreakdown ON FilteredNew_specialistbreakdown.new_specialisrateid = CRMAF_New_loan.new_loanid AND FilteredNew_specialistbreakdown.new_useridid = FilteredNew_event.new_event_ownerid Код: SELECT FilteredNew_specialistbreakdown.new_name, FilteredNew_specialistbreakdown.new_rate FROM FilteredNew_loan AS CRMAF_New_loan INNER JOIN FilteredNew_specialistbreakdown ON FilteredNew_specialistbreakdown.new_specialisrateid = CRMAF_New_loan.new_loanid Есть такая тема,что дважды нельзя использовать CRMAF_New_loan в одном запросе. Но это в одном запросе,а не Dataset, кроме того я пробовал удалять первую таблицу и предварительная фильтрация во второй не работает. Кто-нить может что-нить подсказать? |
|
26.11.2009, 11:57 | #2 |
Чайный пьяница
|
Цитата:
Сообщение от Kipetcoff
Создаю .rdl отчет в CRM. Есть 2 таблицы. Для каждой свой Dataset. Оба запроса к Dataset используют предварительную фильтрацию. Т.е.как в в запросе к первому DS используется конструкция FilteredNew_loan AS CRMAF_New_loan
Код: SELECT CRMAF_New_loan.new_loanid, CRMAF_New_loan.new_account_number, CRMAF_New_loan.new_estdate, CRMAF_New_loan.new_legalentityname, CRMAF_New_loan.owneridname, CRMAF_New_loan.new_clientname, FilteredNew_event.new_descriptionen, FilteredNew_event.new_name, FilteredNew_event.new_eventsid, FilteredNew_event.new_event_owneridname, FilteredNew_event.new_dateutc, FilteredNew_event.new_project, FilteredNew_event.new_durations, FilteredNew_specialistbreakdown.new_rate FROM FilteredNew_loan AS CRMAF_New_loan INNER JOIN FilteredNew_event ON CRMAF_New_loan.new_loanid = FilteredNew_event.new_eventsid LEFT OUTER JOIN FilteredNew_specialistbreakdown ON FilteredNew_specialistbreakdown.new_specialisrateid = CRMAF_New_loan.new_loanid AND FilteredNew_specialistbreakdown.new_useridid = FilteredNew_event.new_event_ownerid Код: SELECT FilteredNew_specialistbreakdown.new_name, FilteredNew_specialistbreakdown.new_rate FROM FilteredNew_loan AS CRMAF_New_loan INNER JOIN FilteredNew_specialistbreakdown ON FilteredNew_specialistbreakdown.new_specialisrateid = CRMAF_New_loan.new_loanid Есть такая тема,что дважды нельзя использовать CRMAF_New_loan в одном запросе. Но это в одном запросе,а не Dataset, кроме того я пробовал удалять первую таблицу и предварительная фильтрация во второй не работает. Кто-нить может что-нить подсказать? Методика такая: 1. Создаётся параметр отчёта с названием CRM_<название сущности>. 2. Выборки запроса необходимо переписать под динамический SQL, т.е. прежнюю конструкцию Код: Select * From FilteredAccount CRMAF_Account declare @Query VarChar(Max) Set @Query = 'Select * From (' + @CRM_Account + ') t' Exec(@Query) 3. В датасете отчёта замапить созданный параметр отчёта CRM_Account на параметр запроса @CRM_Account.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: Kipetcoff (1). |
26.11.2009, 12:50 | #3 |
Участник
|
Да..заменил "предварительную" фильтрацию на "явную" и все заработало. Просто не ожидал что нельзя использовать дважды Предварительную фильтрацию даже в разных Dataset/
|
|
26.11.2009, 16:05 | #4 |
Moderator
|
Все обжигаются на этом. Для разных типов записей можно использовать упрощенную схему. Если же используются сложные запросы с Join или несколькими запросами из одной таблицы, то нужно использовать "явную" фильтрацию. Об этом написано в SDK но как-то больно стыдливо.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
26.11.2009, 16:14 | #5 |
Участник
|
Цитата:
|
|
21.08.2012, 15:43 | #6 |
Участник
|
Здравствуйте.
Заранее извиняюсь за некропостинг, но ответа на форуме не нашёл (может плохо искал), а данный тред очень похож на мою проблему. Задача. Решил сделать красивый отчёт с "пирогом" по действиям в рамках CampaignActivity (действия кампании). То есть кастомизировал немного сущность Appointment (Встреча) добавив поля new_win (Положительный результат) и new_fail (Отрицательный результат) и на выходе получаю что-то вроде пирожка во вложении. Поля для него, в обычном варианте, вытаскиваются таким запросом: Код: SELECT COUNT(*) AS kolvo, 'Положительные' AS 'type', FA.regardingobjectidname AS subject FROM FilteredAppointment AS FA INNER JOIN FilteredCampaignActivity AS FCA ON FA.regardingobjectid = FCA.activityid WHERE (FA.new_win IS NOT NULL) AND (FCA.activityid = @id) GROUP BY FA.regardingobjectidname UNION ALL SELECT COUNT(*) AS kolvo, 'Отрицательные' AS 'type', FA.regardingobjectidname AS subject FROM FilteredAppointment AS FA INNER JOIN FilteredCampaignActivity AS FCA ON FA.regardingobjectid = FCA.activityid WHERE (FA.new_fail IS NOT NULL) AND (FCA.activityid = @id) GROUP BY FA.regardingobjectidname UNION ALL SELECT COUNT(*) AS kolvo, 'Не начатые' AS 'type', FA.regardingobjectidname AS subject FROM FilteredAppointment AS FA INNER JOIN FilteredCampaignActivity AS FCA ON FA.regardingobjectid = FCA.activityid WHERE (FA.new_fail IS NULL) AND (FA.new_win IS NULL) AND (FCA.activityid = @id) GROUP BY FA.regardingobjectidname Собственно динамический запрос (простите если разнесу разметку форума): Код: DECLARE @CRM_CampaignActivity VarChar(Max) DECLARE @SQL VarChar(Max) SET @CRM_CampaignActivity = 'SELECT FilteredCampaignActivity.activityid FROM FilteredCampaignActivity' SET @SQL = 'SELECT COUNT(*) AS kolvo, FA.regardingobjectidname AS subject FROM FilteredAppointment AS FA INNER JOIN ('+@CRM_CampaignActivity+') AS FCA ON FA.regardingobjectid = FCA.activityid WHERE (FA.new_win IS NOT NULL) AND (FCA.activityid in ('+@CRM_CampaignActivity+')) GROUP BY FA.regardingobjectidname UNION ALL SELECT COUNT(*) AS kolvo, FA.regardingobjectidname AS subject FROM FilteredAppointment AS FA INNER JOIN ('+@CRM_CampaignActivity+') AS FCA ON FA.regardingobjectid = FCA.activityid WHERE (FA.new_fail IS NOT NULL) AND (FCA.activityid in ('+@CRM_CampaignActivity+')) GROUP BY FA.regardingobjectidname UNION ALL SELECT COUNT(*) AS kolvo, FA.regardingobjectidname AS subject FROM FilteredAppointment AS FA INNER JOIN ('+@CRM_CampaignActivity+') AS FCA ON FA.regardingobjectid = FCA.activityid WHERE (FA.new_fail IS NULL) AND (FA.new_win IS NULL) AND (FCA.activityid in ('+@CRM_CampaignActivity+')) GROUP BY FA.regardingobjectidname' EXEC (@SQL) Первая: Фильтрации данных не происходит. Всегда возвращаются все записи по всем Действиям кампаний. Вторая: Ругается на конструкцию вида 'Положительные' AS 'type'. Говорит некорректный синтаксис. Как экранировать эту конструкцию? Или хотя бы скажите как называется она (выборка несуществующего поля?) чтобы я мог погуглить. Заранее благодарю за ответы. |
|
21.08.2012, 16:14 | #7 |
Moderator
|
Добрый день. Разрешите немного критики!
Во-первых, как делать фильтрацию нужно изучать не по форумам, а по SDK. Во-вторых, есть ощущение, что вы неправльно делаете выборку. Вам не нужно два поля, достаточно одного: со списком возможных значений. В запросе достаточно сделать группировку по этому полю: X++: SELECT COUNT(*) ,CRMAF_FCA.new_resultTypeCode FROM FilteredAppointment AS CRMAF_FA INNER JOIN FilteredCampaignActivity AS CRMAF_FCA ON CRMAF_ FA.regardingobjectid = CRMAF_FCA.activityid GROUP BY CRMAF_FCA.new_resultTypeCode
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
|
За это сообщение автора поблагодарили: Cukasa (1). |
21.08.2012, 16:46 | #8 |
Участник
|
Спасибо за критику и за нужные теги для оформления постов.
>а по SDK Это первое куда я глянул. Но там весьма простенький запрос из одной таблицы и пожелание: "Если хотите знать больше, расковыряйте стандартный отчёт так как они все с префильтрацией". По поводу предложенного запроса, я не совсем понял или не совсем правильно объяснил. Во "Встрече" которая Appointment нет пиклиста/статуса. Там, есть два ntext-ых поля. В зависимости от их заполнения я и фильтрую данные. Отсюда и юнионы которые объединяют три запроса в один. Хотя конечно Ваш вариант, с пиклистом/статусом хорош, но пользователи будт ныть, что им опять надо лишний переключатель/список выбрать. Хотя знаете что, а Вы правы. Если бизнес-процессом выставлять статус действия и менять его в зависимости от заполненого поля, то всё ограничится Вашим простым запросом без выкрутасов с юнионами и пользователи не будут ныть. Огромное вам спасибо. |
|
21.08.2012, 23:46 | #9 |
Moderator
|
Как вариант, но все же реализация с двумя текстовыми полями выглядит "несистемной". Она непригодна для сбора статистики и плохо расширяется - что если в дальнейшем потребуются промежуточные или уточняющие статусы? Или в одном отчете захотеся видеть все статусы и описания в одной колонке?
Иными словами нужно одно текстовое поле для отчета и какой-то статус-признак операции. Заставить заполнять это можно через Диалог. В нем вы можете предоставить для ввода хоть сто полей и далее в ходе логики дилога заполнить только нужные и даже закрыть встречу за пользователя.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
|
Похожие темы | ||||
Тема | Ответов | |||
Подстановка в поле из нескольких сущностей | 9 | |||
Выбор нескольких значений | 12 | |||
Предварительная фильтрация по теме | 3 | |||
Предварительная фильтрация в отчётах (CRMAF) | 10 |
|