SSRS: Почему я получаю эту агрегацию? - PullRequest
1 голос
/ 08 ноября 2019

Я недавно обнаружил, что 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 работает, как и ожидалось? И чтобы быть ясным, только внесение изменений, описанных в запросе, и сжатие его дало мои результаты, отчет с графическим интерфейсом в построителе отчетов является чрезвычайно простым, поэтому нет ничего сумасшедшего в отношении группировки, выражений и т. Д.

1 Ответ

0 голосов
/ 08 ноября 2019

Мое лучшее предположение - то, что вы случайно столкнулись с ситуацией, когда вы неправильно очищали временные таблицы (или заполняли временные таблицы несколько раз). В качестве альтернативы временным таблицам, вы могли бы вместо этого использовать табличные переменные. Точно так же вы можете использовать один запрос из рабочих таблиц - использовать CTE, если вы хотите, чтобы он «чувствовал» себя как 3 отдельных запроса.

...