在SSRS中的行组中获取下一个值

时间:2017-07-28 00:22:43

标签: sql sql-server reporting-services sql-server-2008-r2

我有一个问题,我试图通过获取NextRow值来解决,但只在特定的RowGroup中。

这是我正在尝试做的事情:

if Fields!Interventions.Value is not blank and nextrow(Fields!DateOccurred.Value) within the group is within 4 hours then Y else N

和另一栏:

if Fields!Interventions.Value is not blank compare currentrow(Fields!DateOccurred.Value) to nextrow(Fields!DateOccurred.Value) and display the differences in hours

但是我对如何在SSRS中表达这种表达方式感到困惑。

我看到了以下问题: Get previous,current and Next Record in ssrs report in a page 但是这个问题是它不适用于SSRS中的行组。

根据进一步的建议,似乎在SSRS中无法做到这一点,但在查询本身中是可能的。

这是我正在使用的查询:

SELECT 
    ROW_NUMBER() OVER(PARTITION BY R.PatientID, PL.ChartLocationID ORDER BY P.DateOccurred ASC) As Row#,
    R.NameFirst,
    R.NameLast,
    P.DateOccurred,
    CASE P.Interventions
    WHEN 1 Then 'Regular Analgesia'
    When 2 Then 'Heat Pack'
    When 4 Then 'Cold Pack'
    When 8 Then 'Massage'
    When 16 Then 'Exercise'
    When 32 Then 'Other'
    END as Interventions
FROM 
    ChartEntry P
LEFT JOIN ChartLocation PL on
    P.ChartLocationId = PL.ChartLocationId  
Inner Join Resident R on
    PL.ResidentID = R.PatientID 
where 
    P.DateDeleted is null and
    P.DateOccurred >= '01 Jul 2017' and
    P.DateOccurred < '01 Aug 2017'  

有可能实现吗?

以下是一些示例数据,显示了额外两列的结果: enter image description here

2 个答案:

答案 0 :(得分:0)

最简单,更好的方法是在LAG/LEAD中使用SQL来解决这个问题。

答案 1 :(得分:0)

您可以在SSRS中执行此操作:

将您的详细信息值设置为Previous(Fields!DateOccurred.Value),将详细信息行可见性设置为= RowNumber("yourgroup") = 1,这将隐藏第一行。

在组总计​​上使用一行,以便通过将其值设置为=Last(Fields!DateOccurred.Value)来显示最后一个值

详细信息的日期差异表达式检查将是

=Iif(
NOT(Fields!Interventions.Value Is Nothing) AND
DateDiff("h", Previous(Fields!DateOccurred.Value),Fields!DateOccurred.Value)>=4,
"Y",
"N"
)

和最后一行

=Iif(
NOT(Fields!Interventions.Value Is Nothing) AND
DateDiff("h", Last(Fields!DateOccurred.Value),Now())>=4,
"Y",
"N"
)

在下图中,红线将隐藏在可见性条件下。 您的报告将仅包含预期日期列,我包括演示的当前行日期。

enter image description here

enter image description here