Сравнить набор данных с другим набором данных для нескольких столбцов / значений 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.
1 ответ
Объединение полей продукта и лимита возможно, как указано в комментариях. Функция поиска может использовать любую строку, которую вы передаете, для поиска значения. Обратите внимание на следующий пример:
Lookup(Fields!Product.Value & "-" & "UR_Limit",...,"TestTargetDataSet")
Будет искать 905200-UR_Limit
и вернуть BLK
значение для верхнего предела из целевых значений теста. Конечно, вы должны создать вычисляемое поле в наборе данных TestTarget и установить его как объединение полей продукта и предела.
Я воссоздал ваш сценарий, используя предоставленные вами таблицы. Сначала я создал вычисляемое поле с именем PRLimit
в наборе данных Test Target и задайте для него следующее выражение:
=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: цвет в красном - Иначе, если значение BLK больше, чем
Target
значение: Цвет в желтом - Иначе, если значение BLK равно
Target
значение: цвет в зеленый - Иначе, если значение BLK меньше, чем
LW
Значение BLK: цвет в красном - Иначе, если значение BLK меньше, чем
Target
Значение BLK: цвет в желтом
Это окончательный результат с данными, представленными в вашем вопросе:
Позвольте мне знать, если это помогает.