【发布时间】:2019-11-07 22:10:10
【问题描述】:
我最近发现 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 个(并且我已经将我的结果放入一个查询中)。但这就是我正在寻找答案的地方。在我的 GUI 报告中,我有一行显示设备成本为 180,但我的查询显示为 60。直到我将查询更改为单次迭代(而不是 3),而我m 仍然得到 60 的相同结果,它现在在我的 GUI 报告中显示 60。
实际上我在另一个查询中也发生了这种情况,我有 2 个临时表结果集,但是当我将它压缩为一个时,我的 GUI 报告按预期工作。
关于为什么使用多个临时表会通过 SQL 报告生成器中的 GUI 报告影响我的结果的任何想法(此处不使用 VB!)但我在 SSMS 中的 SQL 查询按预期工作?需要明确的是,只有对查询进行描述并对其进行压缩才能得到我的结果,报表生成器中的 GUI 报表非常基本,因此在分组、表达式等方面没有什么疯狂的。
【问题讨论】:
-
不看你的数据和你的报告布局..这很难说。
-
e.FaxNumber = c.Cust_ID + '/' + cl.CustLoc_ID 什么?这是怎么回事?
-
您是否删除了数据文件 (
YourReport.rdl.data) 以确保您没有使用旧数据? stackoverflow.com/questions/18210078/…
标签: sql-server reporting-services reportbuilder3.0