经过大量的研究,我还没有找到合适的答案来解决我下面的问题。
我有一份总结报告,其中显示了按专业名称和诊断分类的按月分列的约会总数。
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) ),即Appointment_IDs时,我希望将每个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到我的向下钻取报告,我将得到预期的结果。因此,看来我的总结报告没有传递字符串,或者函数没有正确地处理它,或者子报告不喜欢函数的输出,正如我已经说过的那样,它对我们编写的其他报告起作用。我很困惑。
发布于 2016-05-09 22:28:14
如何开始疑难解答您的特定问题
因为您已经说过可以通过按需要提供一个值字符串来使子报表工作,所以问题在于报告提供了分隔的字符串。在解决这个问题之前,您需要看到被分隔的字符串被传递给子报表,所以将它添加到tablix中。使用相同的函数来引用"Go to Report“操作中的值,并将其作为工具提示添加到每个计数中。这样,您可以看到字符串正在准备,并调整您的逻辑,直到它正确出来。
我将如何解决你的问题
在我看来,作为一个多值参数,您想要完成的任务是不必要的复杂。
在表格中,您有一套组织结果的方法。您有专业名称、诊断和月份(大概是诊断或服务日期)。
这是三个参数,你可以传递给一个子报告。使用主报表中存在的类似sql逻辑,只需知道这三个字段的值加上年份,就可以隔离这11个字段。显然,您需要做一些工作才能找到某个月内的诊断/服务日期,但这并不难:
Where Month(Date_of_Service) = @Month
and Year(Date_of_Service) = @Year
and Specialty_Name = @Specialty
and Diagnosis_Code = @Diagnosishttps://stackoverflow.com/questions/37071717
复制相似问题