【发布时间】:2017-11-13 20:47:04
【问题描述】:
我有一个如下所示的 SSRS 数据集:
数据集行是使用 UNION ALL 相互独立生成的。 我需要在我的报告中按原样显示这些行,但我需要添加一个额外的行来计算总赢/总损失,所以结果应该如下所示:
这只是示例,因为我有更多列(每月 1 个)并且整个内容按产品细分,所以如果我有 10 个不同的产品,我将有 10 个不同的 tablix 表。
基本上,我需要以某种方式创建一个表达式,该表达式仅计算 3 行中的 2 行中的值(基于 Status 列的值),并考虑到某些值可能为零。
这是查询(为了更好地理解,我将其简化了一点):
select * from
(
select 'Created' as 'State', fo.groupidname, fo.businessidname ' Business', fo.opportunityid
from FilteredOpportunity fo
where fo.regionidname = 'Americas Region'
and fo.createdon >= dateadd(year, -1, getdate())
and fo.regionalfeeincome >= 250000
) created
pivot
(
count(created.opportunityid)
for created.groupidname in ([Boston], [Chicago], [Colombia], [Group D.C.], [Houston], [Los Angeles], [New York], [San Francisco], [Seattle], [Toronto])
) pivCreated
union all
select * from
(
select 'Won' as 'State', fo.groupidname, fo.businessidname ' Business', fo.opportunityid
from FilteredOpportunity fo
where regionidname = 'Americas Region'
and fo.actualclosedate >= dateadd(year, -1, getdate())
and regionalfeeincome >= 250000
and fo.jna is not null
) won
pivot
(
count(won.opportunityid)
for won.groupidname in ([Boston], [Chicago], [Colombia], [Group D.C.], [Houston], [Los Angeles], [New York], [San Francisco], [Seattle], [Toronto])
) pivWon
union all
select * from
(
select 'Lost' as 'State', fo.groupidname, fo.businessidname ' Business', fo.opportunityid
from FilteredOpportunity fo
where fo.regionidname = 'Americas Region'
and fo.actualclosedate >= dateadd(year, -1, getdate())
and fo.regionalfeeincome >= 250000
and fo.sys_phasename <> 'Pre-Bid'
) lost
pivot
(
count(lost.opportunityid)
for lost.groupidname in ([Boston], [Chicago], [Colombia], [Group D.C.], [Houston], [Los Angeles], [New York], [San Francisco], [Seattle], [Toronto])
) pivLost
TIA -TS。
【问题讨论】:
-
这可能是在 SQL 的服务器端最容易做到的。你能发布你的数据集查询吗?
-
嗨艾伦,这有点复杂。我想不出在我的 SQL 查询中执行此操作的方法。我正在使用 PIVOT 和 UNION ALL 来加入 3 个单独的查询。
-
嗨,托尼,我可能有点离题,但我认为你在这里把事情复杂化了。如果我是你,我会将数据透视留给 SSRS,在那里做起来要容易得多,这将大大简化你的查询。我可以发布一个关于如何执行此操作的半通用答案,但我无法从您的查询中看到月份名称的来源,也许这是您为了清楚起见而去掉的一点?无论如何,如果您可以从 FilteredOpportunity 表/视图中发布一小部分测试数据样本,那么我将添加一个答案。我认为它比你想象的要简单(希望如此!)
-
另外,您所关注的
groupidname(城市)发生了什么,因为我在您的示例输出中没有看到它。 -
嗨 Alan,这个月最初只是为了更容易理解。我有组(城市)而不是月份。我正在考虑在不使用 SQL 中的数据透视的情况下转储数据,然后让 SSRS 处理它,但我仍然不太清楚它是否会处理我需要它处理的比率的计算,而且在 SQL 中很难做到这一点因为我仍然会运行 3 个不同的查询并使用 UNION 来连接数据。
标签: reporting-services expression ssrs-tablix