Привет Хабр! Меня зовут Белков Евгений, я руководитель направления разработки Siebel CRM в Московском кредитном банке.
В последнее время мы все чаще стали слышать имя нового игрока на рынке BI инструментов — FanRuan. Fine Bi — это инструмент компании, который позволяет достаточно быстро сделать хороший отчет, сгруппировать данные и отразить их в читабельном виде.
Сегодня я хочу поделиться опытом работы с Jump — это средство для перехода к детализации данных. На текущий момент трудно найти исчерпывающую информацию о Jump‑ах, как их настроить и в целом более менее подробная документация есть на китайском и английском языках. Давайте это исправлять! На написание данной статьи меня побудила личная проблема, с которой я долго боролся и наконец, нашел ряд решений, хотя и не все идеальные, но задачу решить помогут.
Версия, с которой я работаю на текущий момент — 6.014. Тут мы рассказывали, как нам дался этот выбор)
Задача: реализовать переход к детализации данных за отчетный период
Простыми словами, нам нужно при нажатии на один из показателей на диаграмме производить переход в другой дашборд с теми же данными, чтобы посмотреть их в разных разрезах, например, в разрезе типов.
При этом существуют показатели, которые могут рассчитываться в зависимости от даты смены статуса, например, такой показатель, как «количество открытых задач на определенную дату», и просто так мы этот список передать в Jump не можем. Для этого нам потребуется передавать параметры для расчета.
Немного технических деталей
Jump
Это переход от одного дашборда к другому представлению. Я намеренно написал «представлению», так как этим представлением может быть как другой дашборд (тип — Analysis Template), так и ссылка (тип — Web Link).
На одном Апплете дашборда можно реализовать несколько Jump c различными переходами, потом при переходе к детализации необходимо будет просто выбирать, на какой из них проваливаемся!
Я их делю на детальные (таблица, которую я выделил желтой) и агрегирующие (все остальные). Но тут сразу оговорюсь, что агрегирующие могут при определенной настройке разрезов быть вполне детальными, если вы разрезом возьмете поля‑идентификаторы (номера задач, или Id).
Начинаем создание Jump отсюда
1. Analysis Template
Этот тип может переходить на конкретный дашборд уже созданный в Fine BI.
Необходимо выбрать тип Analysis Template
Выбрать из дашбордов тот, на который мы хотим провалиться
Выбрать набор Source Field (это состав полей, по которым будет применен фильтр на дочернем дашборде)
Target Field — целевое поле Dataset, на котором будет применение фильтра, при одинаковых названиях либо дашбордах, основанных на одном Dataset, это поле заполняется автоматически.
Минусы
Чтобы точно провалиться с передачей конкретных строк, желательно иметь уникальные номера этих строк (например ID)
Можно передавать только поля датасета. Казалось бы оно и логично, но с возможностями Web Link, кажется, это недостаток.
Определенная особенность с Агрегирующими диаграммами. При переходе по разрезу отличному от указанного в диаграмме — можете увидеть совершенно другие данные.
Например, на столбиковой диаграмме, где у вас выведена сумма задач Команды, вы никак не сможете провалиться в конкретную задачу. А если передавать другой разрез — допустим Исполнитель, то получим данные по всем задачам исполнителей, которые есть в команде, и это может привести к следующему результату:
В итоге мы получим все задачи этого исполнителя по всем командам. То есть по сути передача полей, которые не участвуют в разрезе на конкретном апплете, — работает, но может привести к некорректным данным. поэтому стоит детализировать ключи.
2. Web Link
Это переход по ссылке. который формально я бы разделил на 2 типа:
2.1 Переход на сторонний сайт
Такой вариант будет очень удобен, если вам нужно провалиться в детальную задачу Jira, например. Также на уровне дашборда можно сформировать ссылку и указать в Jump только это поле.
Выбираем тип Web Link
Указываем ссылку на сайт и, если нужно, указываем какие-то переменные, в моем случае, это номер задачи jira.
Минусы
Вы не сможете на агрегирующей диаграмме провалиться в конкретную задачу.
2.2 Переход на дашборд с публичной ссылкой
Выбираем тип Web Link
-
Указываем публичную ссылку (Public Link) на дашборд (для начала ее надо сформировать на нужном дашборде)
Указываем значения для фильтрации. И вот в этом месте у меня возникла сама сложность создания корректного Jump‑а. Так как я уже ранее писал — можно передавать только поля с DataSet либо данные. Но об этом ниже.
Минусы
Основным и очень весомым минусом видится отсутствие возможности передавать параметры дашборда и калькулируемые поля с компонента в параметрах.
Варианты передачи фильтрации по Public Link
Чтобы передавать параметрами значения нужно запомнить простые правила синтаксиса:
После ссылки Указываем ?Название_Фильтра=Значение
Название фильтра необходимо точно скопировать с конкретного фильтр-компонента на дашборде, в который проваливаемся. При этом в мануалке пишут, что Название_Фильтра должно быть на английском языке, но у меня работает и на русском.Если необходимо передавать несколько значений разделяем их & Например url?Название_Фильтра1=Значение1&Название_Фильтра2=Значение
ВАЖНО! Чтобы значение передавалось, оно должно быть обязательно на апплете (компоненте), с которой происходит Jump. Это значит, что поле Dataset должно быть либо в Prompt, либо Label, либо выведена на апплет, как индикатор. И вы все так же не можете передавать калькулируемые значения и параметры.
Дополнительно обращу внимание на типы данных в фильтре.
Тип Фильтра |
Формат Передачи |
Text |
url?Название_Фильтра1=Значение1 |
Text-Многозначный выбор |
url?Название_Фильтра1=Значение1,Значение2,Значение3 |
Date interval и Year and month |
url?Название_Фильтра_s=Start_date&?Название_Фильтра_e=END_date где Start_date - это дата начала периода в формате ГГГГ-ММ-ДД END_date - это дата конца периода в формате ГГГГ-ММ-ДД |
Year-Month |
url?Название_Фильтра=Период где Период - это квартал в в формате ГГГГ-M |
Year-Quartal |
url?Название_Фильтра=Квартал где Квартал - это квартал в в формате ГГГГ-К в документации - этот вариант не учтен, но работает |
ак же важно учесть, чтобы не было спецсимволов (,&?}${<>/|\>') в значении. Лично ловил проблему, когда передавал название команды у которой была запятая (,) в названии и при Jump получал в фильтре уже картину, что FineBI ее делил как 2 команды и применял фильтр как Text-Многозначный выбор
На этом предлагаю завершить теоретическую часть и перейти к реализации Jump-ов.
Решение задачи
Модификация DataLayer
Для начала необходимо модифицировать DataSet. Так как мы не можем использовать не поля DataSet, необходимо заранее в нем заложить поля для кварталов и дат периодов.
Я специально для этого сделал поле Result_Period, которое отвечает за отнесение к определенному периоду, чтобы потом можно было легко отфильтроваться, выглядит примерно так:
В моем случае это будет не период, а квартал, поэтому нужна еще одна переменная Квартал на уровне DataSet.
Текстовая переменная, в которой у нас будет Дата в формате необходимом для передачи в ссылке ГГГГ-Q .
Квартал
На уровне компоненты также понадобятся переменные Q_start и Q_end — (они помогут нам для фильтрации данных зависящих от даты).
Например «Портфель инцидентов». Так как сам убил очень много времени на его реализацию.
Для для его расчета нужны следующие переменные:
Inc Portf S — Показывает был ли инцидент создан и оставался нерешенным до начала периода
Inc Portf End — Показывает был ли инцидент создан и при этом оставался нерешенным до конца периода или был создан до начала периода и оставался нерешенным до конца периода.
А далее нам из всех инцидентов нужны только те, которые попадают под оба условия выше. То есть в оригинальной выборке должны быть все инциденты, и, передав их в Jump, на дочернем придется снова отбирать, а без передачи параметров периода это сделать невозможно. Поэтому создаем такие переменные, как начало и конец квартала — это пограничные даты каждого квартала.
Подготавливаем фильтры Дашбордов
Меня лично сильно расстраивает тот факт, что мы не можем передавать параметры дашборда в Jump, но их использование реализовано достаточно удобно.
Под параметрами я имею в виду вот это:
Редактируем Фильтр, в моем случае это Период, ставим галочку Bind Parameter, и, провалившись в шестерёнку, выбираем в какую переменную записывать выбранное в фильтре значение.
Теперь при выборе периода в фильтре он сразу будет заполнять значение переменной. Важный момент: если вы завязываете формулы на этот параметр, то учтите тот факт, что при пустом фильтре значение переменной с типом Date пустой не будет. Оно будет заполнено значением Today().
Также нам нужен второй дашборд, на который мы будем проваливаться. На нем так же сделаем фильтр YEAR-QARTER. Для примера я сделаю копию Дашборда 1-го уровня и поменяю один компонент для детализации.
Выглядеть они будут вот так:
1-й уровень |
2-й уровень |
---|---|
Отображается весь список задач по команде в форме таблицы, и Ниже апплет со столбиками, которые отражают количество задач команды в разрезе Квартала. |
Отображается весь список задач по команде в форме таблицы, Ниже апплет со столбиками, которые отражают количество задач команды в разрезе Типов задач. |
Дашборд 2-го уровня необходимо опубликовать, чтобы получить Public Link.
Наши дашборды выглядят примитивно, но достаточно, чтобы реализовать Jump.
В данном случае его реализовать можно двумя способами, которые дадут один результат.
Analysis Template
После настройки проваливаемся и видим, что фильтры пустые, но если развернуть View Filter Criteria — виден и сам фильтр который передался по Jump.
-
Web Link
Настраиваем — проваливаемся в Команду 2 и попадаем на дашборд по url — webroot/decision/link/xvyt?Период=2024–1&Команда=Команда%202 — ссылка уже содержит наши параметры, которые применились на фильтрах.Также мы видим, что фильтр был унаследован от параметров, переданных в URL, и явно вставились значения в фильтрах, в отличие от Analysis Template.На всякий случай я еще раз повторю, что если бы я не указал в Prompt в поле Квартал, то результирующая ссылка бы выглядела так url — webroot/decision/link/xvyt?Команда=Команда%202. То есть если вы хотите, чтобы параметр заполнился значением поля компоненты, его необходимо вынести на диаграмму в любом виде, в противном случае, он в Фильтр не передастся. Это в классическом понимании «активация полей» при разработке.
Заключение
Инструмент Fine BI достаточно часто обновляется и постоянно добавляет новые фичи. В текущей 6-й версии продукта доступны возможности для передачи фильтрации данных, но кажется, что они не совсем гибкие. Хочется видеть от продукта определенный уровень сервиса. Например, я бы хотел, чтобы в Jump можно было передавать параметры и Калькулируемые переменные. Очевидно, что сложно будет потом разработчикам дашбордов добавлять и отправлять корректные данные в параметрах, но лучше иметь возможность и ошибиться, чем не иметь ее вовсе. Надеюсь, на дальнейшее развитие продукта, и на то, что FanRuan расширит возможности передачи параметров. Если у вас есть опыт работы с Jump, то поделитесь, пожалуйста, в комментариях, какие сложности или лайфхаки использовали).