#sql #reporting-services
#sql #службы отчетов
Вопрос:
У меня есть 2 столбца, в которых есть данные. Столбец 1 я хочу сделать зеленым, если больше 25%, а столбец 2 я хочу сделать зеленым, если больше 10. Если столбец 2 зеленый, я не хочу, чтобы он менял цвет в столбце 1 и наоборот.
Это столбец 1
=IIF(Fields!New_Strategic_Devices_Qty.Value / Fields!New_and_Upgrade_Postpaid_phones.Value > 0.2199 , "SpringGreen" , IIF(Fields!New_Strategic_Devices_Qty.Value / Fields!New_and_Upgrade_Postpaid_phones.Value < 0.2199 , "White" , 0))
Ниже приведено то, что у меня есть в настоящее время для столбца 2.
=IIF(Fields!New_Strategic_Devices_Qty.Value>=ReportItems!newstratgoal.Value,"LimeGreen", iif(ReportItems!pull_through_percent.Value >0.2199,"White","DimGray"))
Комментарии:
1. вам необходимо предоставить более подробную информацию, чтобы получить ответ на ваш запрос. Предоставьте некоторые примеры данных и то, что вы пробовали.
2. Я пробовал выше с помощью операторов and / or … Результат здесь трудно показать. В принципе, если выполняется условие 1, то условие 2 ничего не делает. Я установил форматирование цвета только для изменения
3. Итак, что происходит, когда выполняются оба условия (C1> 25% и C2> 10)? Игнорируйте примеры данных и покажите свою работу ребятам. Они просят более подробной информации, а затем редко помогают — они просят больше информации, потому что не знают продукт.
Ответ №1:
Мне кажется, что вам нужно написать одну и ту же формулу дважды, что является плохой практикой в отношении удобства чтения и обслуживания. У меня есть решение для оптимизации этого дизайна, над которым вы работаете.
Вы захотите использовать переменную в свойствах группы и установить там выражение. После того, как вы это сделаете, вы можете ссылаться на эти переменные как на выражение в теле отчета с синтаксисом: =Variables!myVariableName.Value
. После того, как вы определили групповые переменные, должно быть намного проще реализовать логику, над определением которой вы работаете. Вы можете ссылаться на переменную group как в, так [Field Expression]
и в [Color Expression]
.
Я бы также рекомендовал использовать SWITCH вместо IIF, switch более удобочитаем и проще определять дополнительные правила в выражении. Вот несколько примеров использования switch. Пожалуйста, обратите внимание, что условие ELSE в последнем выражении требует ‘true’ для оценки неявных условий.
Я надеюсь, что это поможет с вашим решением.
Две справочные статьи:
- https://www.sqlchick.com/entries/2010/11/24/deciding-whether-to-use-an-expression-or-a-variable-in-ssrs.html
- MS DOCS: встроенные коллекции — ссылки на отчеты и групповые переменные
Групповая переменная, демонстрация выражения:
[fxSal_PositiveResult]:
=SWITCH(
(
Fields!SAL27.Value= 0
OR (Fields!SAL27.Value= 1 AND Fields!SAL28.Value= -1)
OR (Fields!SAL27.Value= -2 AND Fields!SAL28.Value<> 1)
), Fields!SAL27.Value
,true, Fields!SAL28.Value
)
[fxCampy_PositiveResult]:
=SWITCH(
(
Not(IsNothing(Fields!CAM11.Value))
), Fields!CAM11.Value
,true, Fields!CAM12.Value
)
Демонстрация, скриншот:
Ответ №2:
Я не уверен, как вы ожидаете работать с цветами, когда выполняются оба условия — Column1> 25% и Column2> 10. Я заверяю вас, что столбец 1 имеет приоритет в этом случае.
Для свойства backgroundColor первого столбца у вас будет
=IIF(Fields!New_Strategic_Devices_Qty.Value / Fields!New_and_Upgrade_Postpaid_phones.Value > 0.25,
"SpringGreen",
"White")
Для второго столбца вам понадобится дополнительный IIF из цвета столбца 1, чтобы проверить цвет первого столбца,
=IIF(Fields!New_Strategic_Devices_Qty.Value >= ReportItems!newstratgoal.Value,
IIF(Fields!New_Strategic_Devices_Qty.Value / Fields!New_and_Upgrade_Postpaid_phones.Value > 0.25,
"LimeGreen",
"White"))
Кстати, для приведенного вами выражения вам не нужен второй IIF, он будет покрыт ELSE первого IIF, если значение не равно 21,99%. Цвет 0, вероятно, в любом случае выдаст ошибку.
=IIF(Fields!New_Strategic_Devices_Qty.Value / Fields!New_and_Upgrade_Postpaid_phones.Value > 0.2199 ,
"SpringGreen" ,
IIF(Fields!New_Strategic_Devices_Qty.Value / Fields!New_and_Upgrade_Postpaid_phones.Value < 0.2199 , "White" , 0))
Я предпочитаю мятный крем для выделения зеленым цветом.
Комментарии:
1. Хорошо, чтобы ответить на ваш первый вопрос. Я бы хотел, чтобы он проверил, выполнено ли первое условие, и ничего не делал… и наоборот. Итак, если столбец 1 соответствует. выполняется, тогда столбец 2 останется белым, даже если его больше 10. а затем наоборот для того же.