Нестандартные задумки требуют нестандартных решений. И QlikView позволяет такие необычные решения реализовать.
Итак, предположим у нас есть четыре расчетные группы, значения которых мы решили представить в виде полукольца! Давайте посмотрим, как имея в инструментах QlikView стандартный объект «Круговая диаграмма» реализовать эту задумку.
В качестве бонуса сегодня я также покажу, как сделать небольшие «прожилки» между основными данными в полукольце.
Этап 1. Исходные данные и круговая диаграмма QlikView
- Пусть у нас есть такая таблица с данными:
CIRCLE_GROUP, CIRCLE_MONTH, CIRCLE_SUMMA
group-1
, 31.08.2014
, 120
group-2
, 31.08.2014
, 200,
group-3
, 31.08.2014
, 165
group-4
, 31.08.2014
,
и далее, для тех же четырёх групп ещё данные для нескольких месяцев.
- Создадим пару вспомогательных переменных:
- vSpaceSize = 3
Это ширина «зазора» между данными в диаграмме (в градусах), которую потом можно менять динамически
- vAllSum = =SUM(CIRCLE_SUMMA)
Это переменная, которая высчитывает текущую общую сумму по всем группам.
- Начнем с создания объекта Диаграмма — «Круговая диаграмма» (Chart – Pie Chart).
- Вторую вкладку «Измерения» (Dimensions) сразу пропускаем – на ней никакого дименшина указывать не надо.
- На следующей вкладке «Выражения» (Expressions) начинаем создавать выражения.
Первое выражение:
1 2 3 |
=(180-vSpaceSize*(GetPossibleCount(CIRCLE_GROUP)-1)) *SUM( IF(CIRCLE_GROUP=`group-1`, CIRCLE_SUMMA)) / |
которое назовем «group1» (впишем в «Метка» / Label).
Этап 2. Полукруговая диаграмма в QlikView по шагам
Итак, в чем же идея полукруглой диаграммы? Идея привести все суммы групп к диапазону 180 градусов, за вычетом суммы всех «зазоров» (поэтому ширина зазора дается в градусах).
Теперь продолжим наши модификации.
- Создадим второе выражение на вкладке «Выражения» (Expressions) – это будет зазор:
=vSpaceSize
Назовем его «space1» (впишем в «Метку» / Label).
- Далее создаем аналогично остальные выражения, чередуя:
«group2», «space2» ; «group3», «space3» ; …
После выражения с последней группой «group4» зазор уже делать не надо, зато надо сделать «заглушку» на 180 градусов. т.е. в последнем выражении надо прописать просто константу:
=180
Получится изначально как на скриншоте ниже:
- Выполним косметические настройки:
- Отключаем бордюр и заголовок объекта.
- На вкладке Общие (General): отключаем галочку: «Показывать заголовок диаграммы» (Show Title in Chart).
- На вкладке Стиль (Style): Выбираем узкое кольцо.
- На вкладке Представление (Presentation):
- Отключаем галочки «Всплывающие метки» (Pop-up labels) и «Подсветка» (Highlight).
- Отключаем показ легенды «Показывать легенду» (Show Legend).
И получаем:
- Закрепим за каждой группой определенный цвет: На вкладке «Выражения» (Expressions) раскрываем
+
у каждого выражения и прописываем цвет в «Цвет фона» (Background Color):
- для «group1»: RGB(141,170,203)
- для «group2»: RGB(187,216,34)
- для «group3»: RGB(231,138,210)
- для «group4»: RGB(105,84,150)
- Теперь поработаем с «зазорами»:
- Все там же, на вкладке Выражения (Expressions), раскрываем
+
у каждого выражения и прописываем цвет в «Цвет фона» (Background Color) для всех зазоров и для последнего выражения: RGB(255,255,255). - Получаем:
- Пробуем повыбирать разные комбинации групп и увидим, что сейчас зазоры показываются всегда, хотя должны отрисовываться, только тогда, когда они нужны.
Поэтому доработаем все наши выражения для зазоров:
- Формулу для выражения space1:
=IF( group1>0
AND RangeSum(group2,group3,group4)>0, vSpaceSize, 0) - Формула для выражения space 2:
=IF( group2>0
AND RangeSum(group3,group4)>0, vSpaceSize, 0) - Формула для выражения space3:
=IF( group3>
AND group4>0, vSpaceSize, 0
- Перейдем к надписям на диаграмме
Если мы просто включим галочки «Значения на точках диаграммы» (Values on Data Points) на вкладке «Выражения» (Expressions) у всех выражений group1, group2, group3 и group4, то увидим лишь
пересчитанные значения сумм групп к 180 градусам.
Для выражений на вкладке «Число» (Number) не будем менять настройки «Форматировать формат цифр» (Number Format Settings), а оставим как есть «Выражение по умолчанию» (Expression Default). В этом случаем мы можем доработать наши формулы для групп с использованием функции DUAL,
которая позволит нам для рисования сегмента использовать преобразованное
значение, а метки к нему выводить какие угодно.
- Изменим наше выражение для «group1»:
1 2 3 4 5 6 |
DUAL( Num(SUM( IF(CIRCLE_GROUP=`group-1`, CIRCLE_SUMMA)),`###0 (180-vSpaceSize*(GetPossibleCount(CIRCLE_GROUP)-1)) *SUM( IF(CIRCLE_GROUP=`group-1`, CIRCLE_SUMMA)) / vAllSum ) |
Как видим, при использовании функции DUAL мы связываем любую текстовую
- информацию (первый параметр функции) с любой числовой (второй параметр). В результате на диаграмме текстовая информация показывается как надписи,
а числовая определяет размер сегмента. - Аналогичные выражения пропишем и для оставшихся групп и получим:
- Пропишем условие отображения группы, если она
не входит в текущий фильтр.
- Для выражения «group1» надо включить
галочку «Условие» (Conditional) и прописать условие показа:
Match(group-1
, @(=CONCAT(distinct CIRCLE_GROUP,chr(39)&
,&chr(39)))
)
- Аналогичные условия прописываем и для остальных групп.
- Создаем текстовый объект, закрываем им правую половину круга.
- Разместим линии сносок, добавив
простую строку●───
& перед Num (в первый параметр функции DUAL).
Можно также поэкспериментировать со шрифтом для отображения сносок:
например, взять Arial как в данном примере.
В итоге получаем:
Вот и вся идея построения полукруглой диаграммы!
П.С. Поделитесь своими приемами работы с круговыми диаграммами в комментариях.
Свежие комментарии