2016-04-26 2 views
0

Мне нужно создать Delta Report, который основан на двух наборах данных i.e DataSet1 и DataSet2. Мне нужно взять DataSet2 в качестве ссылки, если есть какое-либо изменение в любом значении поля в DataSet1 Мне нужно изменить цвет текстового поля. может кто-нибудь помочь мне в этом, я написал код, но его бросая Ошибка.ssrs вложенные IIF для сравнения двух наборов данных

=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") 

ответ

0

Вы не можете смешивать наборы данных.

Это будет работать, только если ваши наборы данных имеют только одну строку данных. В противном случае вам нужно выяснить, как выделить нужное значение.

=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") 

Обычно вы бы один набор данных в таблице, а затем посмотреть соответствующее значение в другом наборе данных.

Если СИФ и ID счета являются общими идентификаторами, и вы хотите, чтобы compate остатки на счетах каждого из них, я бы базировать таблицу на наборе данных 1, а затем ввести значения от dataset2 для сравнения. Объедините идентификатор CIF и ID учетной записи в одну текстовую строку для сравнения.

Ваше выражение цвет затем будет что-то вроде:

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

SSRS:

Использование Lookup для извлечения значения из указанного набора данных для пары в имя-значение, где есть отношение 1 к 1. Например, для поля идентификатора в таблице вы можете использовать Lookup для получения соответствующего поля имени из набора данных, который не привязан к области данных .

0

Другим подходом было бы сделать это в хранимой процедуре и вернуть результаты в виде одного набора данных. Например, предположим, что у меня есть 10 полей в таблицах. Я могу создать хэш данных для каждой записи:

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 

Большой Успенский ... обе таблицы имеют идентификатор, который является уникальным и связанной с ними. Это даст вам набор результатов из полей Table1 (dataset1) и флаг, который скажет вам, когда какое-либо поле изменилось из Таблицы 2 (dataset2).

В зависимости от вашего приложения это может быть проще и быстрее. Я всегда стараюсь выполнять WORK в SQL, а не в SSRS.

Смежные вопросы