2017-07-28 8 views
1

Ich habe ein Problem, das ich versuche, mit dem Abrufen des NextRow-Wert, sondern nur innerhalb der bestimmten RowGroup zu lösen.Get Next Value in Zeilengruppen in SSRS

Hier ist, was ich versuche zu tun:

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

und eine weitere Spalte:

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

Aber ich bin fest, wie ich diesen Ausdruck aus SSRS tun könnte.

Ich sah die folgende Frage: Get previous,current and Next Record in ssrs report in a page aber das Problem mit diesem ist, dass es nicht mit Zeilengruppen in SSRS funktioniert.

Nach weiterem Hinweis scheint es, als wäre dies in SSRS nicht möglich, wäre aber in der Abfrage selbst möglich.

Dies ist die Abfrage Ich arbeite mit:

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' 

Ist es möglich, zu erreichen?

Hier einige Beispieldaten die Ergebnisse für die zusätzliche zwei Spalten zeigen: enter image description here

Antwort

0

einfachste und besserer Weg ist LAG/LEAD in Ihrem SQL zu verwenden, um dies herauszufinden.

+0

Vielen Dank für Ihren Kommentar, aber SQL Server 2008 R2. – Philip

+0

Verwenden Sie dann Self-Join oder CTE, um zu bestimmen, was Sie wollen? Das hängt von deinen SQL-Kenntnissen ab. Oder Sie können die Beispieldaten immer veröffentlichen, und die Mitglieder können eine Lösung vorschlagen. Ich denke nicht, dass es in SSRS machbar ist. – ViKiNG

+0

Ok danke, ich werde die erste Frage umschreiben. – Philip

0

Sie können dies in SSRS:

Legen Sie Ihre Detail Wert auf Previous(Fields!DateOccurred.Value) und die Detailzeile Sichtbarkeit = RowNumber("yourgroup") = 1, die die erste Zeile verbergen.

Verwenden eine Reihe an der Gesamtbank, um durch seinen Wert auf =Last(Fields!DateOccurred.Value)

Der Datumsdifferenz Ausdruck Prüfung für das Detail wird den letzten Wert anzuzeigen

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

und für die letzten sein Linie

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

In den folgenden Bildern wird die rote Linie mit der Sichtbarkeitsbedingung ausgeblendet. Ihr Bericht enthält nur die erwartete Datumsspalte. Ich führe das aktuelle Zeilendatum zur Demonstration ein.

enter image description here

enter image description here

+0

Danke für Ihre Antwort. Was meinst du mit = RowNumber ("yourgroup") = 1 in Bezug auf deine Gruppe? Ich habe die erste Frage nach Viking's Kommentar aktualisiert, wenn das hilft. – Philip

+0

Ersetzen Sie "yourgroup" durch den Namen Ihrer Gruppe in der Tablix. Wenn es keine Gruppe, aber nur Details gibt, sollte der Wert "yourgroup" mit dem Tablix-Namen übereinstimmen. – niktrs

+0

@James Ich habe auch meine Antwort aktualisiert, um die neuen Feldnamen – niktrs