Q-подсказка # 10 – каскадная диаграмма в Qlik Sense

Хотите, чтобы у гистограммы Qlik Sense была опция «Bar Offset»(смещение столбцов), как на графиках QlikView? Мы, конечно же, за. Как еще Вы можете разработать каскадную диаграмму? Ну, если Вы будете достаточно долго об этом думать, может быть, сможете сделать это по-другому…

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

Рис.1

Рис. 1

Вам необходимо разработать составную столбиковую диаграмму с двумя размерами, и сделать цвет прозрачным для одного из размеров

Если Вы знаете, о чем идет речь, то можете перестать читать и начать работу. Для остальных – подробное объяснение.

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

PL:
 LOAD * INLINE [
 Stage, Amount, Multiplier, Offset
 Revenue, 100000, 1, 0,
 Labor, 20000, -1, 1
 Material, 15000, -1, 1
 Overhead, 10000, -1, 1
 Profit, 55000, 1, 0
 ];

В Ваших приложениях необязательно предварительно суммировать количества, однако некоторые дополнительные действия все же необходимы:

Показатели прибыли нужно рассчитать (или рассчитать специальным образом в выражении диаграммы)

Каждое «ведро стоимости», или этап, следует дополнять двумя дополнительными атрибутами: Multiplier (Множитель) и Offset (Смещение).

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

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

DummyDimension:
 LOAD * INLINE [
 Dim
 Offset
 Value
 ];

Теперь данные готовы для использования в графике. Если Вы будете продолжать, сохраните сценарий и загрузите данные.

Следующий шаг — создание составной столбиковой диаграммы с двумя размерами – «Stage» и «Dim». Здесь ничего необычного.

Далее, необходимо создать меру, и вот оно, то место, где скрывается большинство трюков. Опишем нужную логику в устной форме, прежде чем излагать формулу. Для значений (Dim = «Value»), мы просто просуммируем значения. Для записей «offset» (Смещение), мы должны вычислить диапазон суммы всех предыдущих сумм, с соответствующими множителями, но только для этапов, помеченных «Offset=1».

Если текущее «ведро» — отрицательное,  смещение необходимо настроить для объема текущей суммы. Другими словами, если текущая сумма, «10» (помечена как «отрицательная»), а накопленное смещение – 100, график должен начинаться с «90» для того, чтобы закончится в «100».

Для положительных «ведер», с другой стороны, не нужно никаких подобных корректировок, положительный столбец +10 просто начнется в «100».

Здесь та же логика, как в Qlik Sense Measure:

if(Dim = 'Value',
 sum(Amount),
 if(RowNo(total)=1 or Offset=0,
 0,
 RangeSum(Above(total sum(Amount*Multiplier)/2, 1, RowNo(total))) +
 RangeMin(0, Sum(Amount*Multiplier))
 )
)

Эта формула заслуживает короткого объяснения:

  • Как мы уже говорили, когда Dim=’Value’, формула просто возвращает сумму количеств. Это легко.
  • В противном случае, значению смещения присваивается «0» для первой строки в таблице, или для любого этапа со Смещением = «0».
  • Функция Above() возвращает массив всех предыдущих значений, начиная от «1» (предыдущая строка) и подсчитывает количество значений, которые равны текущему номеру строки.
  • Обратите внимание, что все значения «Amount» умножаются на соответствующий множитель для учета положительных и отрицательных элементов. Кроме того, сумма делится на 2, и вот почему. Функция Above () дублирует все результаты из-за вторичных (фиктивных) измерений. Мы должны разделить на два, чтобы компенсировать дублирование.
  • Функция RangeSum () используется, чтобы просуммировать все элементы массива, возвращаемого функцией Above ().
  • И, наконец, мы добавляем текущую сумму значений (значение * множитель) вычитаем текущий объем для отрицательных записей. Функция RangeMin () используется для учета только отрицательных значений — любые значения, которые больше «0», будут заменены на «0».

Если Вы следуете нашим рекомендациям, Вы уже должны были увидеть готовую гистограмму, окрашенную в два цвета. Единственная оставшаяся часть – задать цвет.

Откройте Properties > Appearance > Colors and legend  (Свойства > Внешний вид > Цвет и легенда) и определите пользовательский цвет By Expression (по выражению). Есть много способов задать цвет диаграммы. Мы выбрали простой, для того чтобы просто показать его. Не стесняйтесь экспериментировать по своему усмотрению. Следующая формула делает цвет полностью прозрачным для офсетной записи, используя функцию ARGB()  с Alpha = 0. Для действительных значений, мы окрасим все положительные значения в зеленый, а все отрицательные – красным:

if(Dim = 'Offset',
   ARGB(0,255,255,255),
   if(Multiplier >0, Green(), red())
)

Вуаля! Ваш каскадный график готов сделать Вашу бухгалтерию радостной.

Если Вам нравится уровень раскрытия темы в этом блоге, пожалуйста, ознакомьтесь с нашей новой книгой: QlikView Your Business, где мы описываем различные аспекты (бизнес и технические) разработки основных, промежуточных, и передовых аналитических приложений QlikView.

Для продвинутых разработчиков Qlik, мы также рекомендуем посетить встречу «Masters Summit for QlikView» — единственный современный технический форум для опытных разработчиков Qlik. На боковой панели справа есть ссылки на обе книги и форум.

Наслаждайтесь, и не забудьте оставить свой отзыв! Увидимся в нашем сообществе!

Найти решение у бизнес-партнера QlikTech (QlikView) в России.

Форум разработчиков QlikView и Qlik Sense. Получите ответы на все вопросы по QlikView и Qlik Sense!

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий

64 queries in 0,402 seconds