Компания Tableau Software выпустила новую функцию настраиваемой прозрачности листов в релизе 2018.3. Это открыло большое пространство для новых дизайнерских фишек при создании визуализаций.

Я сделал визуализацию с интерактивными барами, где сами бары прозрачны, а фон — нет. Визуализация называется «10 самых длинных рек мира».

Данные для этого виза простые, длины рек взяты из Википедии:

Так выглядит датасет в MS Excel:

Стандартный бар-чарт с этими данными легко можно сделать в Tableau.

Здесь и далее бар-чартом я буду называть столбцовую диаграмму, а барами — столбцы диаграммы. Просто так привычнее

 

Неочевидная задача дальше — как сделать прозрачные бары и белый фон? Когда вы выбираете опцию «Format Shading» для заливки листа, бары тоже закрашиваются. Можно уменьшить прозрачность (opacity) до 0%, подложить вниз какую-то картинку и получить следующий виз:

Это не то, что мы хотим сейчас получить — нам нужен белый фон и возможность изменения ширины бара (как на рисунке внизу), а также возможность сортировки и фильтрации, то есть, полностью интерактивную визуализацию.

Чтобы построить такую визуализацию, мы можем «инвертировать» бар-чарт, то есть, активными элементами, размерами которых мы будем управлять станут элементы белого фона. Другими словами, мы создадим алгоритм, позволяющий менять геометрию белого пространства таким образом, чтобы это выглядело как на картинке сверху. Возможно, это пока не очень понятно, поэтому рассмотрим такую логику подробнее.

На рисунке внизу показан синий шестиугольник как элемент фона, то есть, фон состоит из нескольких шестиугольников, размерами которых нужно управлять.

Для того, чтобы получить 6 вершин, сделаем юнион из шести одинаковых листов. Лист (sheet) в этом случае — это лист документа MS Excel, содержащий данные о длинах рек. То есть, мы сознательно создаем избыточность в данных, увеличивая размер датасета в 6 раз.

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

Вычисление для координат X следующее:

Для координат Y:

В вычислении Polygon X есть вычисляемое поле Rank, которое равно RANK_UNIQUE([Sort Field]) , определяющее нумерацию полигонов и их отрисовку по оси X, то есть их ранг. Этот ранг определяется параметром Sort, значение которого передается в вычисление Sort Field, позволяющее сортировать бары по длине рек либо по их названиям в алфавитном порядке.

Параметры Bar Width и Gap отвечают за ширину бара и за отступ бара от верхней границы фона соответственно. Изменение параметра Bar Width и соответствующее изменение ширины каждого бара показано снизу:

Вычисляемое поле Path определяет порядок соединения вершин полигона.

На следующем рисунке показаны пути (Path) для каждого полигона, Цвет каждого пути обозначает свой полигон, отвечающий за отрисовку бара длины одной реки, а цифры означают порядковый номер вершины полигона.

Если мы обратим внимание на вычисление Polygon Y, то в нем для вершин 1 и 6 используется вычисление

{ FIXED [River]: AVG([Length])}

Оно определяет высоту бара. В нашем случае справедливо также было вместо этого вычисления оставить просто поле Length.

Для вершин 2 и 3 используется вычисление, определяющее верхнюю границы диаграммы. Это вычисление находит максимальную длину реки в данных и прибавляет к нему отступ Gap:

[Gap]*{ FIXED : MAX([Length])}

Финальное расположение вычисляемых полей следующее:

В грануляцию добавлено поле River — названия рек, которое формирует несколько полигонов, поле Path в грануляции определяет порядок соединения вершин каждого полигона. Поле Polygon X на полке Column содержит табличное вычисление Rank и распределяет все полигоны по оси X. Поле Polygon Y на полке Rows определяет длину рек.
То есть, синяя область сверху состоит из шестиугольников, и ей мы будем управлять. Заливаем ее белым цветом.
Вторая ось dual axis здесь используется для текста внутри баров.

Нужно сделать еще один лист, который будет отвечать за написание названий рек внутри бар-чарта:

Выставляем прозрачность (opacity) этих баров на 0, и можно переходить к самому дашборду.

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

По этой же логике сделана визуализация ‘London Bus Incidents’, показывающая количество ДТП по районам Лондона с возможностью выбора года и сортировки:

Вместо статической картинки в Tableau в качестве подложки можно использовать html страницу с видео или анимированной GIF картинкой:

Заключение

Нужно отметить, что такие прозрачные бар-чарты не несут какой-то полезной нагрузки в плане анализа данных и использования в бизнес — дашбордах. Такие визуализации скорее создаются для презентаций или СМИ. В выше разобранном примере используется довольно популярный прием денормализации или введение избыточности (многократный union) данных для отрисовки каждой вершины полигонов, разбираются сами полигоны и кратко принцип их построения и грануляция. Полигоны — достаточно мощный инструмент Tableau для кастомных визов, но далеко не все могут им пользоваться. Здесь как раз такой случай, когда в одном визе объединяются денормализация, табличные вычисления, сортировка в декартовой системе координат и построение полигонов. Разбирая и повторяя подобные нетривиальные примеры вы можете приблизиться к ответу на вопрос «Как же на самом деле работает Tableau»?