ssrs嵌套IIF来比较两个数据集

时间:2016-04-26 14:39:09

标签: reporting-services ssrs-2008

我需要创建一个基于两个数据集的Delta报告,即DataSet1和DataSet2。 如果DataSet1中的任何字段值有任何变化,我需要将DataSet2作为参考我需要更改文本框的颜色。 任何人都可以帮我这个我写了一些代码,但它抛出错误。

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

2 个答案:

答案 0 :(得分: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")

通常,您在表格中有一个数据集,然后在其他数据集中查找相应的值。

如果您的 CIF 帐户ID 是公共标识符,并且您想要对每个帐户余额进行比较,我会将该表基于数据集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从指定数据集中检索值   名称 - 值对,其中存在一对一的关系。例如,对于   在表中的ID字段,您可以使用Lookup来检索   来自未绑定到数据的数据集的相应名称字段   区域。

答案 1 :(得分: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

大假设......两个表都有一个唯一且相关的ID。 这将为您提供Table1(dataset1)字段的结果集以及一个标志,该标志将告诉您何时从Table2(dataset2)更改任何字段。

根据您的应用程序,这可能更容易,更快捷。我总是尝试在SQL中使用WORK而不是SSRS。