【问题标题】:Compare dataset with another dataset for multiple Columns/Values SSRS将数据集与多个列/值 SSRS 的另一个数据集进行比较
【发布时间】:2016-02-10 06:42:43
【问题描述】:

这是图片参考。让我解释一下场景。

如您所见,有两个数据集 A 和 B,数据集 B 具有实际测试值,数据集 A 具有目标值(更像是范围)。代码将每个测试(BLK ...)值与目标测试(BLK ...)值进行比较,代码如下所示

=IIF(Len(Lookup("UR_Limit",Fields!Limits.Value,Fields!BLK.Value,"Target")) <= 0,
(
IIF(Fields!BLK.Value > Lookup("UW_Limit",Fields!Limits.Value,Fields!BLK.Value,"Target"),"Yellow",
        IIF(Fields!BLK.Value < Lookup("LW_Limit",Fields!Limits.Value,Fields!BLK.Value,"Target"),"Yellow","Green"))
),

(
IIF(Fields!BLK.Value > Lookup("UR_Limit",Fields!Limits.Value,Fields!BLK.Value,"Target"),"Red",
    IIF(Fields!BLK.Value > Lookup("UW_Limit",Fields!Limits.Value,Fields!BLK.Value,"Target"),"Yellow",
        IIF(Fields!BLK.Value < Lookup("LR_Limit",Fields!Limits.Value,Fields!BLK.Value,"Target"),"Red",
            IIF(Fields!BLK.Value < Lookup("LW_Limit",Fields!Limits.Value,Fields!BLK.Value,"Target"),"Yellow","Green"))))
))

现在我面临的问题是,我无法将每个产品测试(来自 B)值与数据集 A 中的特定产品目标值进行比较。最终发生的是 B 中的每个测试都与最后一个目标产品值进行比较数据集 A。

【问题讨论】:

  • 您的问题是比较不同的产品,您希望将每日测试数据中的905200 产品与目标值中的905200 产品进行比较,对吧?
  • 这可能吗????
  • 我认为有办法通过创建一个计算字段并将产品和限制连接起来来实现这一点。我不明白 Test Target Values 中 BLK 的限制,注意 UW_limit 是 141,UR_Limit 是 110,不应该更小吗?。
  • 是的,有些数据输入错误。但你有这个概念。我尝试连接产品和限制,但无法在查找中使用它,因为您只能在查找中查找一个字符串,并且测试数据表 (B) 中没有限制列。

标签: sql reporting-services ssrs-2012 sql-server-2012-datatools


【解决方案1】:

连接产品和限制字段是可能的,如 cmets 中所述。查找函数可以使用您传递的任何字符串来搜索值。请注意以下示例:

Lookup(Fields!Product.Value & "-" & "UR_Limit",...,"TestTargetDataSet")

它将查找905200-UR_Limit 并从测试目标值返回BLK 值作为上限。当然,您必须在 TestTarget 数据集中创建一个计算字段,并将其设置为产品和限制字段的串联。

我已经使用您提供的表格重新创建了您的场景。首先,我在测试目标数据集中创建了名为PRLimit 的计算字段并将其设置为以下表达式:

=Fields!Product.Value & "-" & Fields!Limits.Value

正如您在 cmets 中提到的,您有多个列,您必须为每列使用不同的表达式:

=Switch(
Fields!BLK.Value >
  Lookup(Fields!Product.Value & "-" & "UW_Limit",Fields!PRLimit.Value,Fields!BLK.Value,"DataSet9"),
  "Red",
Fields!BLK.Value >
  Lookup(Fields!Product.Value & "-" & "Target",Fields!PRLimit.Value,Fields!BLK.Value,"DataSet9"),
  "Yellow",
Fields!BLK.Value =
  Lookup(Fields!Product.Value & "-" & "Target",Fields!PRLimit.Value,Fields!BLK.Value,"DataSet9"),
  "Green",
Fields!BLK.Value <
  Lookup(Fields!Product.Value & "-" & "LW_Limit",Fields!PRLimit.Value,Fields!BLK.Value,"DataSet9"),
  "Red",
Fields!BLK.Value <
  Lookup(Fields!Product.Value & "-" & "Target",Fields!PRLimit.Value,Fields!BLK.Value,"DataSet9"),
  "Yellow"
)

=Switch(
Fields!BW.Value >
  Lookup(Fields!Product.Value & "-" & "UW_Limit",Fields!PRLimit.Value,Fields!BW.Value,"DataSet9"),
  "Red",
Fields!BW.Value >
  Lookup(Fields!Product.Value & "-" & "Target",Fields!PRLimit.Value,Fields!BW.Value,"DataSet9"),
  "Yellow",
Fields!BW.Value =
  Lookup(Fields!Product.Value & "-" & "Target",Fields!PRLimit.Value,Fields!BW.Value,"DataSet9"),
  "Green",
Fields!BW.Value <
  Lookup(Fields!Product.Value & "-" & "LW_Limit",Fields!PRLimit.Value,Fields!BW.Value,"DataSet9"),
  "Red",
Fields!BW.Value <
  Lookup(Fields!Product.Value & "-" & "Target",Fields!PRLimit.Value,Fields!BW.Value,"DataSet9"),
  "Yellow"
)

上述表达式分别用于为 BLK 和 BW 列获取正确的颜色。使用的逻辑是:

  • 如果 BLK 值大于UW BLK 值:颜色为红色
  • ELSE IF BLK 值大于Target 值:黄色
  • ELSE IF BLK 值等于Target 值:颜色为绿色
  • ELSE IF BLK 值小于LW BLK 值:颜色为红色
  • ELSE IF BLK 值小于Target BLK 值:黄色

这是您问题中提供的数据的最终结果:

如果这有帮助,请告诉我。

【讨论】:

  • 它可以工作,谢谢,但仍然有一个小问题。在使用这些查找时,存在重复行的问题。例如905200 - UR_Limit .......................... 905200 - UW_Limit ......................... 905200 - Target .............................. 905200 - LW_Limit .......................... 905200 - LW_Limit .......................... this row gets repoeated
  • 如果它们在目标表上重复,将导致测试表中每行 905200 产品的颜色相同。我不明白你的问题是什么
  • 只考虑目标表,然后我在字体颜色部分应用上述颜色逻辑,如果我使用 Switch(....UR_Limit) 只有它从表中消失,如果我使用 switch (...UW_Limit ) 我被重复了。如果您仍然不明白,请告诉我
  • =IIF(Fields!BLK.Value = Lookup(Fields!Product.Value &amp; "-" &amp; "2 - Upper Warning", Fields!Product_Desc.Value,Fields!BLK.Value,"Test_Target"),"Tan","Green") 2 - 上警告行从表格中消失,替换为顶部的任何行
猜你喜欢
  • 1970-01-01
  • 2017-09-04
  • 2015-08-02
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多