这可能是一个经典的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]