这可能是一个经典的SO场景,问题没有解决我想要实现的目标,所以我只会解释我的情况。
我创建了大量 SSRS 报告。其中许多共享许多共同字段。这些字段的基本定义会定期更改,我必须检查每个报告进行必要的更改,这很耗时,并且有可能出现错误,使报告发散。
我创建了一个过程,该过程将 @startdate 和 @enddate 作为参数,并根据我们当前的定义(提供的呼叫、应答的呼叫、20 秒内应答的呼叫、响铃)返回 4 个公共字段,当我自己执行它时效果很好。我想要的是将该过程作为包含非公共字段的较大 SELECT 查询的一部分。类似的东西
SELECT
,[Date]
,[Total seconds]
,(procedure fields)
,...
from [table]
where [date] >= '2017-01-01'
group by [date]
在我看来,这意味着当定义发生变化时,我只需要更改一次程序,每个报告都会更新。这可能吗?还是我使用了错误的工具来实现我想要实现的目标?如果是这样,我应该使用什么?
好吧,我认为内联表值函数更适合您的要求。
您将能够使用内联表值函数向下推送谓词,也可以在 select 语句中选择它。
像.....
CREATE FUNCTION dbo.ILTVF_CommonColumns (
@startdate DATETIME
, @enddate DATETIME
)
RETURNS TABLE
AS
RETURN
SELECT Column1
, Column2
, Column3
, Column4
FROM dbo.TableName -- Change logic here whenever need to
WHERE DateColumn >= @startdate
AND DateColumn <= @enddate;
GO
样品选择
SELECT
[Date]
, [Total seconds]
, fn.*
from [table] t
CROSS APPLY dbo.ILTVF_CommonColumns (@StartDate , @EndDate) fn
^ ^
|___________|
Or these could be fields from your [Table]
where t.[date] >= '2017-01-01'
group by [date]