SSRS多字段值未作为参数传递给深入报告

时间:2016-05-06 11:53:34

标签: reporting-services ssrs-2008-r2

经过多次搜索后,我没有找到合适的答案解决我的问题。

我有一份摘要报告,显示按专业名称和诊断分组的每月约会总数。

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

当我点击该字段(即11为Neurology Total For Spec,Apr),即=COUNT((Fields!Appointment_ID.Value)时,我想将每个Appointment_ID传递给子查询作为参数以显示相关的客户端详细信息。但是,当我准备子查询并以我之前使用的方式向下钻取报表时,我只得到第一个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_ID到我的向下钻取报告,我会得到预期的结果。因此,似乎我的摘要报告没有传递出一个字符串,或者它没有被函数正确处理,或者子报告不喜欢函数的输出,正如我所说的那样,我们已经编写了其他报告。我很难过。

1 个答案:

答案 0 :(得分:0)

如何开始排查特定问题

因为您已经说过可以通过提供所需的值字符串来使子报表工作,所以问题在于报告提供了分隔字符串。在解决问题之前,您需要查看传递给子报表的分隔字符串 - 因此将其添加到Tablix。使用您用于引用“转到报告”操作中的值的相同功能,并将其作为工具提示添加到每个计数中。这样你就可以看到正在准备的字符串并调整你的逻辑,直到它正确出来。

我将如何解决您的问题

正如我所看到的那样,你想要实现的多值参数是不必要的复杂。

在您的Tablix中,您有一套组织结果的方法。您有专业名称,诊断和月份(可能是诊断或服务日期)。

您可以将三个参数传递给子报告。使用主报告中存在的类似sql逻辑,您可以通过了解这三个字段的值加上年份来隔离这些逻辑。显然,您需要做一些工作才能找到属于某个月的诊断/服务日期,但这并不太难:

Where Month(Date_of_Service) =  @Month
    and Year(Date_of_Service) = @Year
    and Specialty_Name = @Specialty
    and Diagnosis_Code = @Diagnosis