2016-04-26 9 views
0

Ich brauche einen Delta-Bericht, der auf den beiden Datensätzen, date DataSet1 und DataSet2 basiert. Ich brauche DataSet2 als Referenz nehmen, wenn es irgendeine Änderung in einem Feldwert in DataSet1 gibt Ich muss die Farbe des Textfelds ändern. kann jemand mir dabei helfen Ich schrieb etwas Code, aber es wirft Fehler.ssrs verschachtelt IIF, um die beiden Datensätze zu vergleichen

=IIF(Fields!CIF.value, "DataSet1" = Fields!CIF.value, "DataSet2" AND Fields!Account_ID.value,"DataSet1" = Fields!Account_ID.value,"DataSet2", 
         IIF(Fields!Account_balance.value, "DataSet1" <> Fields!Account_balance.value, "DataSet2","Yellow","Transparent"),"Transparent","Transparent") 

Antwort

0

Sie können keine Datensätze mischen.

Dies funktioniert nur, wenn Ihre Datasets jeweils nur eine Datenzeile haben. Andernfalls müssen Sie herausfinden, wie Sie den benötigten Wert isolieren können.

=IIF(MAX(Fields!CIF.value, "DataSet1") = MAX(Fields!CIF.value, "DataSet2") AND MAX(Fields!Account_ID.value, "DataSet1") = MAX(Fields!Account_ID.value, "DataSet2"), 
    IIF(MAX(Fields!Account_balance.value, "DataSet1") <> MAX(Fields!Account_balance.value, "DataSet2"), "Yellow", "Transparent"), "Transparent") 

Normalerweise würden Sie einen Datensatz in einer Tabelle und dann den entsprechenden Wert in dem anderen Daten-Set suchen.

Wenn Ihr CIF und ID Konto die gemeinsamen Kennungen sind und Sie die Kontensalden von jedem compate, ich würde in der Tabelle auf Dataset 1 stützen und dann im Wert von dataset2 bringen zu vergleichen. Kombinieren Sie die CIF- und Konto-ID zum Vergleich in eine einzige Zeichenfolge.

Ihre Farbe Ausdruck wäre dann so etwas wie:

=Lookup(Fields!CIF.value & "|" & Fields!Account_ID.value, Fields!CIF.value & "|" & Fields!Account_ID.value, Account_balance.value, "DataSet2") 

SSRS:

Verwenden Lookup den Wert aus dem angegebenen Datensatz für einen Name-Wert-Paar abzurufen, wo es eine 1: 1-Beziehung. Beispielsweise können Sie für ein ID-Feld in einer Tabelle Lookup verwenden, um das entsprechende Name-Feld aus einem Dataset abzurufen, das nicht an die Datenregion gebunden ist.

0

Ein anderer Ansatz wäre, dies in einer gespeicherten Prozedur zu tun und die Ergebnisse als ein Dataset zurückzugeben. Angenommen, ich habe 10 Felder in den Tabellen. Ich kann für jeden Datensatz einen Hash der Daten erstellen:

select 
    CASE WHEN chkHash2 = chkHash1 THEN 0 ELSE 1 END as 'ChgFlag' 
    ,a.* 
FROM 
(
    select 
     HASHBYTES('md5', t2.Field1 + t2.Field2 + ... + t2.Field10) as 'chkHash2' 
     ,HASHBYTES('md5', t1.Field1 + t1.Field2 + ... + t1.Field10) as 'chkHash1' 
     ,t1.Field1, t1.Field2, ... t1.Field10 
    From Table2 t2 
    LEFT JOIN Table1 t1 on t1.ID = t2.ID 
) a 

Big Assumption ... beide Tabellen haben eine ID, die einzigartig und verwandt ist. Dies gibt Ihnen eine Ergebnismenge von Table1 (Dataset1) -Feldern und ein Flag, das Ihnen sagt, wenn sich ein Feld von Table2 (Dataset2) geändert hat.

Je nach Ihrer Anwendung könnte dies einfacher und schneller sein. Ich versuche immer, die Arbeit in SQL im Gegensatz zu SSRS zu tun.