Информационный портал по безопасности » Программирование » Веб-разработка » QlikView. Условное форматирование «Как в Эксель»

 

QlikView. Условное форматирование «Как в Эксель»

Автор: admin от 30-03-2019, 16:40, посмотрело: 210

Пришла задача от заказчика – сделать условное форматирование таблицы «как в эксель». QlikView вполне себе справляется со стандартными задачами раскраски по условию, но вот с выбором параметров динамически, да еще и как в эксель – возник вопрос «это как вообще..?».

Итог: было несколько вариантов реализации, несколько версий, потрачено немалое время на тестирование и отладку. Проводился рефакторинг уже готовой реализации. Представляю итоговый вариант, удовлетворяющий потребности заказчика, оттестированный и выверенный.



Функциональная задача(постановка)



Имеется таблица, в которой измерения и выражения выбираются динамически, формулы расчета самих значений просты: суммы, средние, относительные проценты, абсолютные значения и тому подобное.



Требуется дать возможность пользователю раскрасить таблицу в зависимости от выбранных параметров. Ключевые вводные — один столбец должен уметь раскрашиваться разными цветами, то есть мульти-раскраска, по разным параметрам. Второе ключевое – должна быть возможность раскрасить поле в зависимости от другого «взаимосвязанные параметры», например, мы раскрашиваем «сумму покупок» в зависимости от значения «средняя цена продуктов на рынке».

Далее приведу основную часть реализации. Я не буду останавливаться на таких момент, как скрыть/закрыть меню, создание списков, добавлять в код такие простые на мой взгляд вещи. Если появятся вопросы по деталям расскажу дополнительно.



Итоговый результат, путь к которому был тернист:



QlikView. Условное форматирование «Как в Эксель»



Блок 1. Подготовка данных для функционального меню




Так же мне потребовалось создать несколько десятков переменных:

QlikView. Условное форматирование «Как в Эксель»

vColorFormatString – собранная строка

vColorFormatString1…10 – предназначены для разбора строки из vColorFormatString на 10 параметров для абсолютных значений, именно такое ограничение я сделал намерено, моё мнение, что больше не нужно, в целом это ограничение чисто идеологическое и потратив не много времени количество параметров можно увеличить.

vColorFormatStringPerc1…10 – предназначены для разбора строки из vColorFormatString на 10 параметров для относительных значений(проценты)

vColorFormat1…10 — цвета

Блок 2. Разработка функционального меню1


QlikView. Условное форматирование «Как в Эксель»

Назначение:


  1. Отображает текущий список созданных параметров пользователем

  2. Возможность удалить какой-либо параметр условного форматирования

  3. Вызывает меню выбора параметров условного форматирования


Остановимся подробнее на двух элементах ниже.

Первый — это отображение текущих созданных параметров.

Данная область это текстовые объекты, отображающие текущие созданные параметры на основе парсинга строки. А вот теперь первый кирпичик этого всего действа:


Ужас какой-то, правда?:)

Теперь думаю многим стало понятно, что вся логика реализована на текстовой строке. Собрали строку – разобрали строку!

Строка в сборе имеет вид

||RWA %|RWA %|RGB(255,0,0)|Выше среднего|num(vColorFormatValue1/100,'# ##0,00')|Empty
||КОД %|КОД %|RGB(255,0,0)|Ниже среднего|num(vColorFormatValue1/100,'# ##0,00')|Empty
||НОД %|НОД %|RGB(255,0,0)|Ниже среднего|num(vColorFormatValue1/100,'# ##0,00')|Empty
||RORWA%|RORWA%|RGB(255,0,0)|Ниже среднего|round(num(124.63),0.0001)|Empty
||EL %|EL %|RGB(255,255,0)|Выше среднего|round(num(124.62),0.0001)|Empty
||EL %|EL %|RGB(0,176,80)|Ниже среднего|round(num(124.62),0.0001)|Empty
||ОД %|ОД %|RGB(0,112,192)|Ниже среднего|round(num(124.62),0.0001)|Empty
||


Разберем строку

||ЧтоКрасим|ПоКакомуЗначению|Цвет |Условие|Значение1|Значение2

Индексы в части SubField(TextBetween(vColorFormatString,'||','||',1),'|',4) — выражение каждого параметра выделяется '||' '||', свойство выражения разделены одиночным '|' таким образом индексы 1 и 4 говорят взять первый блок параметров и из него четвертое значение.

Два значения (Значение1, Значение2) для параметра «между».

Поехали дальше…

Удаление параметра по сути «реплейс» значения в строке.


Блок 3. Разработка функционального меню2





Основное меню сбора параметров. Опять же не буду останавливаться на элементах списков и описания их логики скрытия закрытия.

Основная логика для нашей строки, сбор всего, что накликал пользователь в этом меню зашита на кнопку «готово».


Блок 5. Разбираем текст


Код для переменных vColorFormatString1…10.

Ключевой момент для каждой из 10 переменных меняется индекс для SubField SubField(TextBetween(vColorFormatString,'||','||',1) – vColorFormatString1, индекс 1.

Для vColorFormatString4 – соответственно
SubField(TextBetween(vColorFormatString,'||','||',4)



Разница в том, что формулы относительных значений я так же зашил в переменные и подставляю их в зависимости от содержания строки. По-другому не работало или работало не всегда стабильно, считалось криво… И вообще первоначально абсолютные и относительные значения были в одной переменной парсинга и это было адово громоздко, поиск ошибки кода или расчетов, разобрать написанное, было практически не возможно. Поэтому принято решение разделить — абсолютные парсим в одних переменных, процентные в других.

Блок 6. Добавляем настройки в таблицу


Ну и главное, теперь нужно красить таблицу на основе того что мы распрасили, код для всех полей таблицы идентичен, за исключение входного условия именования поля, поэтому пришлось забивать всё это дело вручную, ни какой автоматизации, точнее где-то на 15 столбце, автоматизм вырабатывается в мышцах пальцев, развивается мышечная память. Далее




На этом в общем-то всё. Если описывать каждый элемент меню, получится полноценная книженция, вроде методички. Поэтому извините, если кому-то не хватило деталей.





Источник: Хабр / Интересные публикации

Категория: Веб-разработка

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Добавление комментария

Имя:*
E-Mail:
Комментарий:
  • bowtiesmilelaughingblushsmileyrelaxedsmirk
    heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
    winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
    worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
    expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
    disappointedconfoundedfearfulcold_sweatperseverecrysob
    joyastonishedscreamtired_faceangryragetriumph
    sleepyyummasksunglassesdizzy_faceimpsmiling_imp
    neutral_faceno_mouthinnocent