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

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

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

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

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