将数据集与多个 Columns/Values SSRS 的另一个数据集进行比较
Compare dataset with another dataset for multiple Columns/Values SSRS
这是图片参考。让我解释一下场景。
如您所见,有两个数据集 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 中的值。
如评论中所述,连接产品和限制字段是可能的。查找函数可以使用您传递的任何字符串来搜索值。请注意以下示例:
Lookup(Fields!Product.Value & "-" & "UR_Limit",...,"TestTargetDataSet")
它将从测试目标值中寻找 905200-UR_Limit
和 return BLK
上限值。当然,您必须在 TestTarget 数据集中创建一个计算字段,并将其设置为产品和限制字段的串联。
我已经使用您提供的表格重新创建了您的场景。首先,我在测试目标数据集中创建了名为 PRLimit
的计算字段,并将其设置为以下表达式:
=Fields!Product.Value & "-" & Fields!Limits.Value
正如您在评论中提到的,您有多个列,您必须为每一列使用不同的表达式:
=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 值:颜色为黄色
这是您问题中提供的数据的最终结果:
如果有帮助请告诉我。
这是图片参考。让我解释一下场景。
如您所见,有两个数据集 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 中的值。
如评论中所述,连接产品和限制字段是可能的。查找函数可以使用您传递的任何字符串来搜索值。请注意以下示例:
Lookup(Fields!Product.Value & "-" & "UR_Limit",...,"TestTargetDataSet")
它将从测试目标值中寻找 905200-UR_Limit
和 return BLK
上限值。当然,您必须在 TestTarget 数据集中创建一个计算字段,并将其设置为产品和限制字段的串联。
我已经使用您提供的表格重新创建了您的场景。首先,我在测试目标数据集中创建了名为 PRLimit
的计算字段,并将其设置为以下表达式:
=Fields!Product.Value & "-" & Fields!Limits.Value
正如您在评论中提到的,您有多个列,您必须为每一列使用不同的表达式:
=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 值:颜色为黄色
这是您问题中提供的数据的最终结果:
如果有帮助请告诉我。