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

Исходные данные

Для данного примера нам понадобится любая таблица, в которой есть колонка «группа», «подгруппа» и «сумма», например вот такая:

НА ЗАМЕТКУ! Предупреждаю, что пример сложный, и желательно, чтобы для данной визуализации количество групп было не более трех, а количество разных подгрупп не более 8.

Вспомогательные таблицы

Для реализации нам понадобится в скрипте создать две вспомогательные таблицы:

и

Константы

Присвоим в скрипте переменным некоторые константы:

1) общее количество линий, которыми рисуем все потоки
LET  vLines = 40;


2) точка с которой начинается переход с одной высоты на другую
LET  Ts = 40;


3) точек, отведенное на плавный переход с одной высоты на другую
LET  T = 8;


4) общий масштаб объекта по высоте (точек), прописанный в «Static Max»
LET  H = 80;

Визуализация «Расщепление потока»

  1. Создаем обычный объект Линейный график («Line Chart»).
  • В качестве первого дименшина, указываем расчетный и вводим:
    =IF( _ТОЧКА<=100, _ТОЧКА)
  • Второй дименшин тоже указываем расчетный и вводим:
    =IF( _ЛИНИЯ<=vLines, _ЛИНИЯ)
  • Нажмем далее и на вкладке Выражения («Expressions») введем пока временное выражение:

=_ЛИНИЯ
и назовем его «Y» (в поле ввода Метка («Label»)).

Получили начальный вид:Line Chart

  1. Итак, наша задумка — рисовать линии, каждая из которых состоит из 100 точек, а все вычисления — будут в одном единственном выражении, вычисляющем {Y} в зависимости от номера линии и номера точки {X}.
  2. Но перед тем как составлять такое выражение, сначала подготовим объект:

a) На вкладке Общие (General):

  • Отключаем галочку Показать заголовок диаграммы («Show Title in Chart»),
  • Включаем галочку Только чтение («Read Only»).

b) На вкладке Dimensions

  • У обоих дименшинах отключаем галочки Метка («Label») и Показать легенду («Show Legend»),
  • Включаем галочку Скрыть, когда значение Null («Suppress When Value Is Null»).

c) На вкладке Sort:

Для обоих дименшинов отмечаем лишь галочку Числовое значение (Возрастание) («Numeric Value» (Ascending)).

d) На вкладке Presentation:

  • Выключаем галочки Показать легенду («Show Legend»), Всплывающие метки («Pop-up Labels») и Подсветка («Highlight»),
  • Установим ширину линий Ширина линии («Line Width»)=7 и размер точек Размер символа («Symbol Size»)=4.

e) Также нам надо установить галочку Показывать все столбцы («Show All Bars»), но, как видим, она неактивна. Не беда:

  • временно перейдем на вкладку Общие («General»)
  • выберем тип графика – Гистограмма («Bar Chart»),
  • обратно вернёмся на вкладку Представление («Presentation»)
  • Включим галочку Показывать все столбцы «Show All Bars».
  • Снова перейдем на вкладку Общие («General») и выберем, как было ранее тип графика Линейный график («Line Chart»).

Получаем следующее:Line Chart

  1. Будем создавать пример с расщепляющимся потоком для двух групп и семи подгрупп.

a) Раскрасим линии каждой группы своим цветом, да к тому же ещё и с растяжкой по градиенту:

  • на вкладке Выражение («Expression») раскроем {+} у нашего единственного выражения и в Цвет фона («Background Color») впишем:

    При использовании функции FieldValue можно не привязываться к заранее известным значениям групп, хранящихся в поле GROUP, а подставлять их динамически.
  • На вкладке Оси (Axes) Установим вертикальный масштаб для нашего поля:
    • включим Стат. макс. («Static Max») и укажем для него переменную H, в которую мы записали константу 80,
    • в Стат.мин («Static Min») впишем ноль
    • саму ось Y выключим, установив галочку Скрыть ось («Hide Axis»).
  • Отключим границы и заголовок.

В итоге получим следующее:

Line chart

b) Чтобы прописать нашу формулу в выражении в компактном виде нам понадобится создать 3 новых вычисляемых переменных, да ещё и с передаваемыми в них параметрами:

i. Создадим первую переменную {calcYG}, которая будет вычислять Y для линий, которые показывают начало потока, суммы по группе:

Замечу, что внутри этой формулы не двойные кавычки, а две подряд одинарные (а вместо $1 в формуле будет подставляться параметр, который мы будем передавать в эту переменную). Таким образом, в QlikView обычную переменную можно превратить в функцию.

ii. Вторую первую переменную {calcST}, создадим для того, чтобы подсчитывать накопительную сумму по текущим подтипам, попадающих в фильтр.

в неё в качестве параметра будем передавать номер подтипа (от 1 до 7).

iii. Третью переменную {calcYT} создадим для того, чтобы вычислять Y для линий, которые показывают конец потока, суммы по подгруппам:

В эту переменную мы будем передавать номер рисуемой линии.

c) Итак, у нас всё готово, чтобы изменить наше выражение {Y} на основную формулу расчета, теперь она будет выглядеть намного компактнее:

Вот, что у нас получится:Расщепление потоков

  1. Осталось заметить, что рисуя линию, QlikView сглаживает цвет из-за масштабирования при отрисовке под размеры объекта. Из-за чего мы можем наблюдать светлые черточки вместо сплошной линии. Но это можно исправить, если на вкладке Выражения («Expressions») для нашего выражения включим ещё и галочку Символ («Symbol») и выберем тип символа Точки («Dots»).

Вот и получили пример визуализации распределения потоков.

Кстати, числа показывающие суммы по группе в начале потока, реализуются объектом  Гистограмма («Bar Chart)», который рисует Стопки («Staked») прозрачными блоками высотой по аналогии с вычислением начала линий потока и выводит для некоторых из них значение по группе. Этот объект вы можете изучить самостоятельно на первом шаге этого примера.

Ну и на этом, второй выпуск «Альманаха визуализации QlikView» завершен! На следующей неделе выложу файл .qvw в выпуском Альманаха.

До скорых встреч!