2017-10-05 1 views
0

Ich versuche, den aktuellen Zeilenwert mit dem vorherigen Zeilenwert zu vergleichen, aber nur innerhalb derselben Gruppe.Farbe basierend auf einer Differenz des Werts vom vorherigen Wert zum aktuellen Wert ändern SSRS

Ich habe Group1 (Plant), ChildGroup1 (DeviceTag), Details Gruppe, Ich habe diesen Code innerhalb der Fill-Eigenschaft versucht, aber es funktioniert nicht, es scheint nur die Farbe der ersten Zeile jedes Mal pro Gruppe zu ändern unabhängig vom Wert der vorherigen Zeile.

=IIf(Fields!DeviceTag.Value <> Previous(Fields!DeviceTag.Value), "Yellow", "White") 

So sieht mein Datensatz wie folgt aus:

Plant  DeviceTag  Description Location 

    A   Tag1   ABCD   West 
       Tag1   WXYZ   West  DeviceTag Group 1 
_____________________________________________ 
    A   Tag2   EFGH   East 
       Tag2   IJKL   East  DeviceTag Group 2 
       Tag2   IJKL   West 

In diesen beiden DeviceTag Gruppen, änderte sich die Beschreibung so würde Ich mag die Farbe von ABCD zu gelb und EFGH bis gelb, aber nicht WXYZ ändern weil es nicht in der gleichen Gruppe wie EFGH ist. Auch die zweite Zeile, die Ost heißt, sollte Gelb sein, da sie anders als der vorherige West-Standort ist.

In Crystal Reports würden Sie tun:

if {#ChangeCounter}=1 then nocolor else 
if currentfieldvalue <> previous({DataSet.Field}) then cryellow else nocolor 

Wo die Formel #ChangeCounter nur 1

Klar als Schlamm ??

+0

'= IIF (RUNNINGVALUE (Felder! Description.Value, COUNTDISTINCT," DataSetName ") MOD 2 = 0, " Gelb ", " Weiß ")' Nicht sicher, ob Sie danach suchen ..... ändern Datensatzname entsprechend – Neal1581

+0

Woher kommt der "DataSetName", wo ist dieser benannt? Ist das der Tablix-Name? – pinchepooch

+0

Unabhängig davon, wo Sie Ihren Bericht erstellen, sollten Sie über einige Berichtsdaten verfügen, die über einen Datenquellenordner und einen Datenmengenordner verfügen. Der Name Ihres Datensatzes wird dort sein.Normalerweise voreingestellt auf DataSet1 – Neal1581

Antwort

1

Ich finde diese Art von Sache immer einfacher in der Dataset-Abfrage zu tun (vorausgesetzt, Sie können die Abfrage im Dataset steuern).

Manipulieren Sie Ihre endgültige Datenmenge (die eine SSRS erhalten wird), um eine andere Spalte zu haben, die SSRS anweist, die Zelle zu färben oder nicht. Und behalten Sie Ihre Geschäftslogik in der DB-Abfrage.

Sie könnten jede Zeile (innerhalb jeder Gruppe) nummerieren, indem Sie row_number() verwenden und dann die Tabelle in sich selbst wieder in die Spalte für die neue Zeilennummer einfügen.

So etwas vielleicht? Ich bin mir nicht sicher, ob ich 100% Ihrer Zellschattierungslogik folge, und ich bin mir sicher, dass Ihr Datensatz größer ist als das, was Sie angegeben haben, aber Sie sind möglicherweise in der Lage, dies Ihren Bedürfnissen anzupassen.

 
;with Data as 
(
    select 'A' as Plant, 'Tag1' as DeviceTag, 'ABCD' as Description, 'West' as Location union all 
    select 'A' as Plant, 'Tag1' as DeviceTag, 'WXYZ' as Description, 'West' as Location union all 
    select 'A' as Plant, 'Tag2' as DeviceTag, 'EFGH' as Description, 'East' as Location union all 
    select 'A' as Plant, 'Tag2' as DeviceTag, 'IJKL' as Description, 'East' as Location union all 
    select 'A' as Plant, 'Tag2' as DeviceTag, 'IJKL' as Description, 'West' as Location 
), 

DataWithRowNumbers as 
(
select 
    *, 
    row_number() over (partition by DeviceTag order by Description) as DeviceTagGroupRowNumber 
from 
    Data  
) 

select 
    a.*, 
    case when a.Description != b.Description then 'Yellow' else 'Transparent' end as CellColor 
from 
    DataWithRowNumbers a 
    left join DataWithRowNumbers b on a.DeviceTag = b.DeviceTag and a.DeviceTagGroupRowNumber = b.DeviceTagGroupRowNumber - 1 

Dann können Sie den Hintergrund in der Zelle (in SSRS) auf einen Ausdruck festgelegt, die Fields!CellColor.Value gerade sein wird.

+0

Ich habe die vollständige Kontrolle über die Abfrage im Dataset. Können Sie mir ein Beispiel dafür geben, wie ich SSRS eine Spalte hinzufügen würde, um die Zelle zu färben? – pinchepooch

+0

aktualisiert die Antwort mit einem Beispiel - nicht 100% sicher von Ihrer Geschäftslogik – thomas

+0

Dies im Grunde verkettet die ganze Reihe von Spalten und dann einen Vergleich der gesamten vorherigen Zeile (wenn ich die Ergebnisse richtig ansehe). Was ich wirklich brauche, ist, die Zeilen wie bei deinem Tun zu vergleichen, aber nur die Spalten, die sich geändert haben, in Gelb zu verwandeln. – pinchepooch

0

Sie müssen den Parameter Scope der Funktion Previous verwenden und den Namen Ihrer ChildGroup1 (DeviceTag) angeben. z.B.

= IIf

Hier ist die doco (Fields DeviceTag.Value <> Zurück (Felder DeviceTag.Value "ChildGroup1"), "Yellow", "White"!):

https://docs.microsoft.com/en-us/sql/reporting-services/report-design/report-builder-functions-previous-function

+0

Diese Syntax scheint nicht korrekt, es unterstreicht Previous (Fields! DeviceTag.Value, "DeviceTag") Wenn ich es anwende, färbt es alle DeviceTag Einträge gelb. – pinchepooch

+0

Leider unterliegt die Syntaxprüfung oft Änderungen in der Syntax. Beachten Sie, dass der zweite Parameter der Zeilengruppenname und nicht der Feldname sein sollte. –

Verwandte Themen