SSRS 多个字段值未作为参数传递到向下钻取报表
SSRS Multiple Field Values Not Passing As Parameters To Drilldown Report
经过多次搜索,我没有找到适合我的以下问题的答案。
我有一份汇总报告,其中显示了按专科名称和诊断分组的每月预约总数。
Specialty_Name Diagnosis Code Feb Mar Apr
Neurology G35X 0 3 4
G379 8 5 7
Total For Spec 8 8 11
Rheumatology H051 4 9 2
M059 6 10 3
Total For Spec 10 19 5
当我单击 =COUNT((Fields!Appointment_ID.Value)
字段(即 Neurology Total For Spec,Apr 为 11)时,我想将每个 Appointment_IDs 作为参数传递给子查询显示关联的客户端详细信息。但是,当我以我之前使用的方式准备子查询和向下钻取报告时,我只得到第一个 Appointment_ID; 的结果。不是每一个。
子查询报表设置参数@Appointment_ID VARCHAR(MAX)
和一个WHERE子句:
CAST(App.App_ID AS VARCHAR(MAX)) in (
SELECT * FROM Serve1.dbo.CreateParameterTable(@Appointment_ID,',')
)
CreateParameterTable
是我们服务器上的一个函数,它应该处理摘要报告中的字符串,并在其他报告中这样做。
(
@StringInput NVARCHAR(MAX)
, @SplitBy NCHAR(1)
)
RETURNS @OutputTable TABLE ( [String] NVARCHAR(36) )
AS
BEGIN
DECLARE @String NVARCHAR(36)
WHILE LEN(@StringInput) > 0
BEGIN
SET @String = LEFT(@StringInput,
ISNULL(NULLIF(CHARINDEX(@SplitBy, @StringInput) - 1,
-1), LEN(@StringInput)))
SET @StringInput = SUBSTRING(@StringInput,
ISNULL(NULLIF(CHARINDEX(@SplitBy, @StringInput),
0), LEN(@StringInput))
+ 1, LEN(@StringInput))
INSERT INTO @OutputTable ( [String] )
VALUES ( @String )
END
如果我在向下钻取报告中手动输入多个 Appointment_IDs,我会得到预期的结果。因此,似乎我的摘要报告没有传递字符串,或者它没有被函数正确处理,或者子报告不喜欢函数的输出,正如我所说的,它适用于我们编写的其他报告。我被难住了。
如何开始解决您的具体问题
因为您说过您可以根据需要提供一串值来使子报表工作,所以问题似乎出在提供分隔字符串的报表上。在解决问题之前,您需要查看传递给子报表的分隔字符串 - 因此将其添加到 tablix。使用与引用 "Go to Report" 操作中的值相同的函数,并将其作为工具提示添加到每个计数。这样你就可以看到正在准备的字符串并调整你的逻辑直到它正确出现。
我会如何解决你的问题
在我看来,您作为多值参数要实现的目标过于复杂。
在您的 Tablix 中,您有一套组织结果的方法。您有专业名称、诊断和月份(大概是诊断或服务日期)。
这是您可以传递给子报表的三个参数。使用与主报告中存在的类似 sql 逻辑,您可以通过了解这三个字段的值加上年份来简单地隔离这 11 个。显然,您需要做一些工作才能找到属于给定月份的 diagnosis/service 个日期,但这并不难:
Where Month(Date_of_Service) = @Month
and Year(Date_of_Service) = @Year
and Specialty_Name = @Specialty
and Diagnosis_Code = @Diagnosis
经过多次搜索,我没有找到适合我的以下问题的答案。
我有一份汇总报告,其中显示了按专科名称和诊断分组的每月预约总数。
Specialty_Name Diagnosis Code Feb Mar Apr
Neurology G35X 0 3 4
G379 8 5 7
Total For Spec 8 8 11
Rheumatology H051 4 9 2
M059 6 10 3
Total For Spec 10 19 5
当我单击 =COUNT((Fields!Appointment_ID.Value)
字段(即 Neurology Total For Spec,Apr 为 11)时,我想将每个 Appointment_IDs 作为参数传递给子查询显示关联的客户端详细信息。但是,当我以我之前使用的方式准备子查询和向下钻取报告时,我只得到第一个 Appointment_ID; 的结果。不是每一个。
子查询报表设置参数@Appointment_ID VARCHAR(MAX)
和一个WHERE子句:
CAST(App.App_ID AS VARCHAR(MAX)) in (
SELECT * FROM Serve1.dbo.CreateParameterTable(@Appointment_ID,',')
)
CreateParameterTable
是我们服务器上的一个函数,它应该处理摘要报告中的字符串,并在其他报告中这样做。
(
@StringInput NVARCHAR(MAX)
, @SplitBy NCHAR(1)
)
RETURNS @OutputTable TABLE ( [String] NVARCHAR(36) )
AS
BEGIN
DECLARE @String NVARCHAR(36)
WHILE LEN(@StringInput) > 0
BEGIN
SET @String = LEFT(@StringInput,
ISNULL(NULLIF(CHARINDEX(@SplitBy, @StringInput) - 1,
-1), LEN(@StringInput)))
SET @StringInput = SUBSTRING(@StringInput,
ISNULL(NULLIF(CHARINDEX(@SplitBy, @StringInput),
0), LEN(@StringInput))
+ 1, LEN(@StringInput))
INSERT INTO @OutputTable ( [String] )
VALUES ( @String )
END
如果我在向下钻取报告中手动输入多个 Appointment_IDs,我会得到预期的结果。因此,似乎我的摘要报告没有传递字符串,或者它没有被函数正确处理,或者子报告不喜欢函数的输出,正如我所说的,它适用于我们编写的其他报告。我被难住了。
如何开始解决您的具体问题
因为您说过您可以根据需要提供一串值来使子报表工作,所以问题似乎出在提供分隔字符串的报表上。在解决问题之前,您需要查看传递给子报表的分隔字符串 - 因此将其添加到 tablix。使用与引用 "Go to Report" 操作中的值相同的函数,并将其作为工具提示添加到每个计数。这样你就可以看到正在准备的字符串并调整你的逻辑直到它正确出现。
我会如何解决你的问题
在我看来,您作为多值参数要实现的目标过于复杂。
在您的 Tablix 中,您有一套组织结果的方法。您有专业名称、诊断和月份(大概是诊断或服务日期)。
这是您可以传递给子报表的三个参数。使用与主报告中存在的类似 sql 逻辑,您可以通过了解这三个字段的值加上年份来简单地隔离这 11 个。显然,您需要做一些工作才能找到属于给定月份的 diagnosis/service 个日期,但这并不难:
Where Month(Date_of_Service) = @Month
and Year(Date_of_Service) = @Year
and Specialty_Name = @Specialty
and Diagnosis_Code = @Diagnosis