【问题标题】:SSRS Multiple Field Values Not Passing As Parameters To Drilldown ReportSSRS 多个字段值未作为参数传递到向下钻取报告
【发布时间】:2016-05-10 06:28:14
【问题描述】:

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

我有一份总结报告,其中显示按月按专业名称和诊断分组的预约总数。

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) 的字段(即,11 表示神经病学总计,4 月)时,我想将每个 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,我会得到预期的结果。因此,我的摘要报告似乎没有传递字符串,或者函数没有正确处理它,或者子报告不喜欢函数的输出,正如我所说的那样,它适用于我们编写的其他报告。我被难住了。

【问题讨论】:

  • 在子报表的参数映射中,值的表达式是什么样的?它是传递完整的值数组(即 Fields!Appointment_ID.Value),还是仅传递第一个值(即 Fields!Appointment_ID.Value[0])?
  • 嗨。这是根据您的第一个示例,因此应该传递完整的值数组。谢谢
  • 您能否在子报表顶部添加 Fields!Appointment_ID.Value 以确保它符合您的预期?这将缩小问题范围......发送参数的报告或子报告有问题吗?

标签: reporting-services ssrs-2008-r2


【解决方案1】:

如何开始解决您的具体问题

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

我将如何解决您的问题

在我看来,您作为多值参数尝试完成的任务过于复杂。

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

这是您可以传递给子报告的三个参数。使用与主报告中存在的类似 sql 逻辑,您只需知道这三个字段的值加上年份即可隔离这 11 个字段。显然,您需要做一些工作来找到属于给定月份的诊断/服务日期,但这并不难:

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

【讨论】:

  • 非常感谢。从使用子报告中的 3 个参数 Specialty、Month 和 Year 进行初始测试并从摘要报告中传递它们似乎是有效的(我正在钻研的总数是针对服务而不是每个单独的诊断,所以我没有包括这个)。我现在不明白的是,为什么传递与包含计数的文本框相关联的 3 个单独参数会产生结果,而传递该文本框中正在计数的记录的唯一标识符 (Appointment_ID) 却不会?
  • 使用定界字符串会在构建和解析定界字符串时引入额外的故障点,您似乎已经找到了其中一个故障点。如果您觉得我的回答对您有帮助,请不要忘记将其标记为有用。
猜你喜欢
  • 1970-01-01
  • 2019-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多