在 s-s-rS 的行组中获取下一个值
Posted
技术标签:
【中文标题】在 s-s-rS 的行组中获取下一个值【英文标题】:Get Next Value within Row Groups in s-s-rS 【发布时间】:2017-07-28 00:22:43 【问题描述】:我正在尝试通过获取 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
但我不知道如何在 s-s-rS 中执行此表达式。
我看到了以下问题: Get previous,current and Next Record in s-s-rs report in a page 但这个问题是它不适用于 s-s-rS 中的行组。
根据进一步的建议,这似乎在 s-s-rS 中是不可能的,但在查询本身中是可能的。
这是我正在处理的查询:
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'
有可能实现吗?
以下是一些示例数据,显示了额外两列的结果:
【问题讨论】:
【参考方案1】:最简单和更好的方法是在您的SQL
中使用LAG/LEAD
来解决这个问题。
【讨论】:
感谢您的评论,但使用的是 SQL Server 2008 R2。 然后用self-join或者CTE来确定你想要什么?这取决于您的 SQL 技能。或者您可以随时发布示例数据,会员可以提出解决方案。我认为这在 s-s-rS 中是不可行的。【参考方案2】:您可以在 s-s-rS 中执行此操作:
将您的详细信息值设置为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"
)
在下面的图片中,红线将在可见性条件下隐藏。 您的报告将仅包含预期日期列,我包含当前行日期以进行演示。
【讨论】:
感谢您的回复。就 yourgroup 而言, = RowNumber("yourgroup") = 1 是什么意思?如果有帮助,我在 Viking 发表评论后更新了最初的问题。 将“yourgroup”替换为您在 tablix 中的组名。如果没有组但只有详细信息,“yourgroup”值应与 tablix 名称相同。 @James 我也更新了我的答案以匹配新的字段名称 对不起,我完全迷失了你的解决方案。它应该查看 Next DateOccurred 而不是 Previous DateOccurred。您的解决方案看起来像使用上一个,而不是下一个,除非我遗漏了什么? 我知道解决方法有点混乱。假设我们有 10 行,如我的示例所示。我们在第 2 行显示第 1 行数据,在第 3 行显示第 2 行数据,...最后在总行上显示第 10 行数据。所以 row2 上一个日期实际上是 row1 日期,而 row2 日期实际上是 row1 下一个日期。现在清楚了吗?以上是关于在 s-s-rS 的行组中获取下一个值的主要内容,如果未能解决你的问题,请参考以下文章
s-s-rS:在导出到 Excel 时抑制 Tablix 上的隐藏行组
s-s-rS 2008 - 如何使用用户定义的分组隐藏行组列?