Я недавно обнаружил, что 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 для equipcost, но мой запрос показывал 60. Это было до тех пор, пока я не изменил свой запрос на одну итерацию (в отличие от 3), и пока я 'Я все еще получаю тот же результат 60, теперь он отображает 60 в моем отчете GUI.
На самом деле это происходило и в другом запросе, где у меня было 2 результирующих набора временных таблиц, но когда я собрал их в один, мой отчет с графическим интерфейсом работал как ожидалось.
Любые идеи о том, почему использование нескольких временных таблиц повлияет на мои результаты через отчет с графическим интерфейсом в построителе отчетов SQL (НЕ ИСПОЛЬЗУЯ VB ЗДЕСЬ!), Но мой запрос SQL в SSMS работает, как и ожидалось? И чтобы быть ясным, только внесение изменений, описанных в запросе, и сжатие его дало мои результаты, отчет с графическим интерфейсом в построителе отчетов является чрезвычайно простым, поэтому нет ничего сумасшедшего в отношении группировки, выражений и т. Д.