Недавно я обнаружил, что SSRS выполняет странную агрегацию, и я действительно не понимаю, почему. В этом отчете, который я создаю, как и в других SQL-запросах, которые я построил, у меня есть тенденция брать предварительные результаты из исходного запроса, помещать их во временную таблицу, а затем выполнять другой запрос и соединение с этой временной таблицей для получить мои «окончательные» результаты, которые мне нужно отобразить. Вот пример:
--1. Этот запрос извлекает все доступные строки в зависимости от дня (должен быть последний день месяца).
SELECT DISTINCT Salesperson ,c.Cust_Alias ,cost ,eomonth(CreateDate) createdate ,FaxNumber
INTO #equip
FROM PDICompany_2049_01.dbo.Customers c
JOIN PDICompany_2049_01.dbo.Customer_Locations cl ON c.Cust_Key = cl.CustLoc_Cust_Key
JOIN ricocustom..Equipment_OLD e ON e.FaxNumber = c.Cust_ID + '/' + cl.CustLoc_ID
JOIN PDICompany_2049_01.dbo.Charges ch ON ch.Chg_CustLoc_Key = cl.CustLoc_Key
WHERE Salesperson = @Salesperson
AND ch.Chg_Balance = 0
--2. Этот запрос извлекает первый набор результатов, но фильтрует дальше для соответствия переменной даты
SELECT DISTINCT (cost) EquipCost ,Salesperson ,DATEPART(YEAR, CreateDate) YEAR
,DATEPART(MONTH, CreateDate) MONTH ,Cust_Alias ,FaxNumber
INTO #equipcost
FROM #equip
WHERE Salesperson = @Salesperson
AND DATEPART(MONTH, CreateDate) = DATEPART(MONTH, @Start)
AND DATEPART(year, CreateDate) = DATEPART(year, @Start)
ORDER BY Cust_Alias
--3. Наконец, получение суммы EquipCost с другими KPI для включения в мой окончательный набор результатов.
SELECT sum(EquipCost) EquipCost ,Salesperson ,YEAR ,MONTH ,Cust_Alias
INTO #temp_equipcost
FROM #equipcost
GROUP BY Salesperson ,year ,month ,Cust_Alias
Теперь я знаю, что мог бы легко сократить это до 2 запросов вместо 3 задним числом (и с тех пор я получил свои результаты в один запрос). Но именно там я ищу ответ. В моем отчете с графическим интерфейсом у меня была строка, которая показывала 180 для стоимости экипировки, но мой запрос показывал 60. Так было до тех пор, пока я не изменил свой запрос на одну итерацию (в отличие от 3), и пока я m по-прежнему получает тот же результат 60, теперь он отображает 60 в моем отчете с графическим интерфейсом.
На самом деле это произошло и в другом запросе, где у меня было 2 набора результатов временной таблицы, но когда я объединил их в один, мой отчет с графическим интерфейсом работал, как и ожидалось.
Любые идеи о том, почему использование нескольких временных таблиц повлияет на мои результаты через отчет GUI в SQL Report Builder (ЗДЕСЬ НЕ ИСПОЛЬЗУЕТ VB!), но мой запрос SQL в SSMS работает должным образом? И, чтобы быть ясным, только внесение изменений, описанных в запрос, и их сжатие получили мои результаты, отчет с графическим интерфейсом в построителе отчетов чрезвычайно прост, поэтому ничего сумасшедшего в отношении группировки, выражений и т. д.
1 ответ
Я думаю, что у вас случайно возникла ситуация, когда вы неправильно очистили временные таблицы (или заполнили временные таблицы несколько раз). В качестве альтернативы временным таблицам вы можете использовать табличные переменные. В равной степени вы можете использовать один запрос из производственных таблиц — используя CTE, если вы хотите, чтобы он «ощущался» как 3 отдельных запроса.
Похожие вопросы
Связанные вопросы
Новые вопросы
sql-server
Microsoft SQL Server — это система управления реляционными базами данных (RDBMS). Используйте этот тег для всех выпусков Microsoft SQL Server, включая Compact, Express, Azure, Fast-track, APS (ранее PDW) и Azure SQL DW. Не используйте этот тег для других типов СУБД (MySQL, PostgreSQL, Oracle и т. д.). Не используйте этот тег для вопросов по программному обеспечению и разработке мобильных устройств, если только он не связан напрямую с базой данных.
YourReport.rdl.data
), чтобы убедиться, что вы не используете старые данные? stackoverflow.com/ вопросы/18210078/…