经过多次搜索后,我没有找到合适的答案解决我的问题。
我有一份摘要报告,显示按专业名称和诊断分组的每月约会总数。
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到我的向下钻取报告,我会得到预期的结果。因此,似乎我的摘要报告没有传递出一个字符串,或者它没有被函数正确处理,或者子报告不喜欢函数的输出,正如我所说的那样,我们已经编写了其他报告。我很难过。
答案 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