SSRS Subreport выполняется несколько раз, я хочу, чтобы он выполнялся один раз
У меня есть отчет, в котором есть вспомогательный отчет, который выполняется несколько раз, когда он имеет более одного отношения к множеству ко многим элементам, которые не имеют никакого отношения к подзаголовку.
Основной запрос отчета
SELECT DISTINCT cat.CategoryName AS 'Category Name', sub.SubCategoryName AS 'SubCategory Name', cur.Status, cur.PastConsiderationFlag, cur.Model, cur.Version, cur.Vendor, cur.AvailableDate AS 'Available Date', cur.EndOfProduction AS 'End of Production', cur.EndOfSupport AS 'End of Support', dep.DepartmentName AS 'Department Name', emp.FirstName + ' ' + emp.LastName AS 'Tech Owner', emp2.FirstName + ' ' + emp2.LastName AS 'Tech Contact', cur.NumOfDevices AS '# of Devices', cur.UpgradeDuration AS 'Upgrade Duration', cur.FiscalConsideration AS 'Fiscal Consideration', cur.Description, cur.SupportingComments, cur.CurrencyId, STUFF ((SELECT ', ' + pl.PlatformName AS Expr1 FROM Platform AS pl LEFT OUTER JOIN Currency_Platform AS cp ON cur.CurrencyId = cp.CurrencyId WHERE (pl.PlatformId = cp.PlatformId) FOR XML PATH('')), 1, 1, '') AS 'Platforms', ISNULL(STUFF ((SELECT ', ' + cu2.Model AS Expr1 FROM Currency AS cu2 RIGHT OUTER JOIN Currency_Dependency AS cd ON cur.CurrencyId = cd.CurrencyId WHERE (cu2.CurrencyId = cd.DependencyId) FOR XML PATH('')), 1, 1, ''), 'N/A') AS 'Dependencies', ISNULL(STUFF ((SELECT ', ' + cu2.Model AS Expr1 FROM Currency AS cu2 RIGHT OUTER JOIN Currency_Affected AS ca ON cur.CurrencyId = ca.CurrencyId WHERE (cu2.CurrencyId = ca.AffectedId) FOR XML PATH('')), 1, 1, ''), 'N/A') AS 'Affected Apps', Currency_Platform.PlatformId FROM Currency AS cur INNER JOIN SubCategory AS sub ON cur.SubCategoryId = sub.SubCategoryId INNER JOIN Category AS cat ON sub.CategoryId = cat.CategoryId LEFT OUTER JOIN Employee AS emp ON cur.OwnerId = emp.EmployeeId LEFT OUTER JOIN Employee AS emp2 ON cur.ContactId = emp2.EmployeeId LEFT OUTER JOIN Department AS dep ON cur.PortfolioOwnerId = dep.DepartmentId LEFT OUTER JOIN Currency_Platform ON cur.CurrencyId = Currency_Platform.CurrencyId
Несмотря на то, что это отдельный выбор, subreport будет работать равным количеству платформ, к которым он принадлежит. Здесь я буду включать Query для подрепортажа.
- Запрос SQL для исключения определенных дат для ssrs
- Как создать гистограмму на SSRS
- # Ужасно даже после использования IIF, чтобы избежать деления на нуль в выражении
- Epicor 10 (ERP) Ошибка отчетности SSRS: максимум 1024 столбца возвращены
- Как получить данные из собственной таблицы ссылок в sql
;with cte as ( -- anchor elements: where curr.Status = 1 and not a dependent select CurrencyId , Model , Version , ParentId = null , ParentModel = convert(varchar(128),'') , Root = curr.Model , [Level] = convert(int,0) , [ParentPath] = convert(varchar(512),Model + Version) from dbo.Currency as curr where curr.Status = 1 /* anchor's do not depend on any other currency */ and not exists ( select 1 from dbo.Currency_Dependency i where curr.CurrencyId = i.DependencyId ) -- recursion begins here union all select CurrencyId = c.CurrencyId , Model = c.Model , Version = c.Version , ParentId = p.CurrencyId , ParentModel = convert(varchar(128),p.Model + p.Version) , Root = p.Root , [Level] = p.[Level] + 1 , [ParentPath] = convert(varchar(512),p.[ParentPath] + ' > ' + c.Model + ' ' + c.Version) from dbo.Currency as c inner join dbo.Currency_Dependency as dep on c.CurrencyId = dep.DependencyId inner join cte as p on dep.CurrencyId = p.CurrencyId ) select CurrencyId, ParentPath, Model + ' ' + Version AS 'Model' from cte WHERE CurrencyId = @CurrencyId
Когда я запускаю отдельный отчет в отдельности, все в порядке. Когда я открываю subreport через основной отчет, передавая CurrencyId в качестве параметра, он делает это столько раз, сколько количество платформ, к которым он принадлежит.
Есть ли способ, которым я могу исправить это либо путем улучшения запросов, либо, как я бы предпочел, заставлять подчиненный отчет работать только независимо от того, что?
Большое спасибо за то, что посмотрели.
- Как перемещать столбцы деталей между родительскими группами в SSRS
- Сброс параметров SSRS при изменении параметра даты
- Несколько отчетов в SSRS с использованием той же хранимой процедуры
- Определение отчета имеет недопустимое целевое пространство имен rsInvalidReportDefinition
- Выражение для удаления возврата каретки в SSRS
- Выполнить набор данных на основе значения параметра -SSRS
- Отправить отчет SSRS по электронной почте
- Рассчитанная серия SSRS вместе с регулярной серией
Вы можете использовать SQL Server Profiler для проверки следующих вещей.
- Сколько раз и с какими параметрами запускается запрос подрепортажа
- Сколько значений возвращает ваш первый запрос
Я не думаю, что ваша проблема больше связана с SSRS, чем с вашим кодом T-SQL. Я собираюсь догадаться и сказать, что объект subreport находится в разделе подробных сведений отчета. Это означает, что подрегистр будет отображаться один раз для каждой строки в наборе данных основных запросов. Я не знаю, как выглядит ваш контейнерный отчет, но один из вариантов, который у вас есть, может включать в себя подчиненный отчет в секции заголовка или нижнего колонтитула, и он убегает от MAX (), MIN (), значения, которое вы знаете, будет одинаковым для каждой строки.