Задача [CRM44]: реализация фильтров в дашбордах

Формулировка проблемы: необходима возможность фильтрации данных, отображаемых в дашбордах, а также зависимость отображаемых данных от подразделения пользователя.

Связанные задачи:

Решение:

Необходимо реализовать в дашбордах внешних модулей возможность фильтрации по подразделениям.

Задача делится на две части:

  1. Отображение исполнения плана продаж в разрезе пользователей.

  2. Реализация боковой панели с фильтрами для всех дашбордов.

Отображение исполнения плана продаж в разрезе пользователей

Формулировка проблемы: для сотрудников подразделений, являющихся листами дерева оргструктуры, в дашборде "Продуктивность" необходимо отображать исполнение плана продаж в разрезе не подразделений, а пользователей - ответственных менеджеров.

Решение: реализовать новый внешний модуль "Управление продажами (ОП)", в котором дашборд "Продуктивность" будет отображать список сотрудников подразделения. Остальные виды отображения и дашборд "Аналитика" нового внешнего модуля полностью повторяют функциональность существующего.

Параметры внешнего модуля:

Свойство Значение

Код

crm_ext3DealOS

Адрес приложения

URL/crm/dealOS

Иконка

Внешний модуль содержит групповые кнопки:

  • "Воронка"

  • "Поток"

  • "Аналитика"

  • "Продуктивность"

Функциональность кнопок "Воронка", "Поток" и "Аналитика" аналогичны внешнему модулю "Управление продажами" crm_ext2Deal.

По нажатию на кнопку "Продуктивность" открывается дашбоард Kibana, который содержит следующие панели:

  • "Сотрудники" - таблица со столбцами:

    • "Сотрудник" - значение поля "Пользователь" (crm_form_deal_responsibleManager_responsible) документа по форме План продаж;

    • "Средняя плановая стоимость продаж" - значение рассчитывается как:

    сумма значений полей "Стоимость продаж" / количество значений полей "Стоимость продаж"

  • "Месяцы" - таблица со столбцами:

    • "Месяц" - значение поля "Месяц" (crm_form_deal_order_sales_month) документа по форме План продаж;

    • "Средняя плановая стоимость продаж" - значение рассчитывается как:

    сумма значений полей "Стоимость продаж" / количество значений полей "Стоимость продаж"

  • "Исполнение плана":

    • "План продаж" - сумма значений всех полей "Стоимость продаж" (crm_form_deal_main2_theme_pvalue_cN) для всех "Сотрудников" (crm_form_deal_responsibleManager_responsible) всех документов по форме План продаж.

    • "Факт продаж" - сумма значений полей "Бюджет" (crm_form_deal_main3_budget) всех сделок с положительным конечным статусом (crm_dict_dealStatus_end=1).

    • "% исполнения плана продаж" - значение рассчитывается как:

    "Факт продаж" / "План продаж" * 100%

  • "Исполнение плана по темам сотрудничества" - таблица со столбцами:

    • "Тема сотрудничества" - значение поля "Тема сотрудничества" (crm_form_deal_main2_theme_cN) документа по форме План продаж.

    • "План продаж" - сумма значений полей "Стоимость продаж" (crm_form_deal_main2_theme_pvalue_cN) для всех "Сотрудников" (crm_form_deal_responsibleManager_responsible) соответствующей "Темы сотрудничества" (crm_form_deal_main2_theme_cN) всех документов по форме План продаж.

    • "Факт продаж" - сумма значений полей "Бюджет" (crm_form_deal_main3_budget) всех сделок с положительным конечным статусом (crm_dict_dealStatus_end=1), у которых в поле "Тема" (crm_form_deal_main2_theme) указана соответствующая "Тема сотрудничества".

  • "Исполнение плана по сотрудникам" - таблица со столбцами:

    • "Сотрудник" - значение поля "Сотрудник" (crm_form_deal_responsibleManager_responsible) документа по форме План продаж.

    • "План продаж" - сумма значений полей "Стоимость продаж" (crm_form_deal_main2_theme_pvalue_cN) для всех "Сотрудников" (crm_form_deal_responsibleManager_responsible) соответствующей "Темы сотрудничества" (crm_form_deal_main2_theme_cN) всех документов по форме План продаж.

    • "Факт продаж" - сумма значений полей "Бюджет" (crm_form_deal_main3_budget) всех сделок с положительным конечным статусом (crm_dict_dealStatus_end=1), у которых в поле "Ответственный менеджер" (crm_form_deal_responsibleManager_responsible) указан соответствующий "Сотрудник".

  • "Исполнение плана по темам (гистрограмма)" - стобликовая диаграмма, в которой:

    • ось X - значения полей "Тема сотрудничества" (crm_form_deal_main2_theme_cN) документа по форме План продаж;

    • ось Y - максимальное значение "План продаж" или "Факт продаж".

Столбцы гистограммы - "План продаж" и "Факт продаж" согласно каждой "Теме сотрудничества" (crm_form_deal_main2_theme_cN).

Реализация боковой панели с фильтрами для всех дашбордов

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

Решение: реализовать фильтр "Подразделение" в дашбордах:

  • Управление маркетингом

  • Управление продажами

  • Продуктивность

Пользователю доступны для выбора:

  • подразделение, к котрому непосредственно относится пользователь;

  • все дочерние подразделения того, к которому относится пользователь.

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

По умолчанию в фильтре указано подразделение текущего пользователя.

Условия, формируемые фильтром, пересекаются (логическое "И") с другими существующими условиями дашбордов, которые были как добавлены вручную, так и сформированы при "проваливании" в отдельных диаграммах.

Условия для аналитики в модулях "Управление маркетингом" и "Управление продажами":

В фильтре "Подразделения" дашборда "Аналитика" модуля "Управление маркетингом" доступен мультивыбор.

В фильтре "Подразделения" дашбордов "Аналитика" и "Продуктивность" модуля "Управление продажами" (как для отделений, так и для сотрудников) мультивыбор недоступен. При этом, если при использовании конфигурации для компонента фильтра будет установлен флаг "Позволять мультвыбор", выбранный набор подразделений должен корректно обрабатываться.

Выбранные в фильтре подразделения с идентификаторами uuid1, uuid2, ..., uuidN формируют для дашборда "Аналитика" модулей "Управление маркетингом" и "Управление продажами" условие вида:

(crm_all_accessible_key_sort: "<uuid1>" || crm_all_accessible_key_sort: "<uuid2>" || ... 
crm_all_accessible_key_sort: "<uuidN>")

При удалении тэга подразделения с идентификатором uuidN из фильтра соответствующее ему условие crm_all_accessible_key_sort: "<uuidN>" также должно удаляться из условия дашборда.

Условие для дашборда "Продуктивность" (по отделениям):

В фильтре мультивыбор недоступен. При этом, если при использовании конфигурации для компонента фильтра будет установлен флаг "Позволять мультвыбор", выбранный набор подразделений должен корректно обрабатываться.

Выбранные в фильтре подразделения с идентификаторами uuid1, uuid2, ..., uuidN формируют для дашборда "Продуктивность" условие вида:

(crm_all_accessible_key_sort: "<uuid1>" || crm_form_deal_sales_pk1_key_sort: "<uuid1>" || 
crm_all_accessible_key_sort: "<uuid2>" || crm_form_deal_sales_pk1_key_sort: "<uuid2>" || ... 
|| crm_all_accessible_key_sort: "<uuidN>" || crm_form_deal_sales_pk1_key_sort: "<uuidN>") 

При удалении тэга подразделения с идентификатором uuidN из фильтра соответствующее ему условие crm_all_accessible_key_sort: "<uuidN>" || crm_form_deal_sales_pk1_key_sort: "<uuidN>" также должно удаляться из условия дашборда.

Условие для дашборда "Продуктивность" (по сотрудникам):

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

Выбранные в фильтре подразделения с идентификаторами uuid1, uuid2, ..., uuidN формируют для дашборда "Продуктивность" условие вида:

(crm_owner_key_sort: "<uuid1>" || crm_owner_key_sort: "<uuid2>" || ... 
|| crm_owner_key_sort: "<uuidN>") 

При удалении тэга подразделения с идентификатором uuidN из фильтра соответствующее ему условие crm_owner_key_sort: "<uuidN>" также должно удаляться из условия дашборда.

Рисунок 4. Дашборд с развернутой боковой панелью

Дашборд с развернутой боковой панелью

Рисунок 5. Дашборд со свернутой боковой панелью

Дашборд со свернутой боковой панелью

Примечание 1:

Во внешнем модуле "Управление продажами" при переключении между дашбордами "Аналитика" и "Продуктивность" значение фильтра "Подразделения" должно сохраняться.

Примечание 2:

Если во внешнем модуле "Управление продажами" для фильтра "Подразделения" crm_form_funnel_deps был включен мультивыбор, то показатели плановых значений стоимости продаж в диаграммах "Исполнение плана" и "Исполнение плана по темам сотрудничества" будут суммироваться для всех выбранных подразделений.

Пример поведения дашборда при включенном мультивыборе:

Предварительные условия:

Оргструктура:

  • Организация (КП)

    • Отдел маркетинга (КП)

      • Отдел маркетинга по Алматы (ОП)

      • Отдел маркетинга по Астане (ОП)

    • Отдел продаж (КП)

      • Отдел продаж по Алматы (ОП)

      • Отдел продаж по Астане (ОП)

Пользователь является сотрудником подразделения "Отдел продаж".

В реестре "План продаж" созданы записи (столбцы в таблице не соответствуют настроенным столбцам реестра и приведены для наглядности примера):

Автор Ответственное подразделение Суммарный план продаж

Организация

Отдел продаж

1 000 000

Отдел продаж

Отдел продаж Астана

600 000

Отдел продаж

Отдел продаж Алматы

600 000

В дашборде "Продуктивность" в фильтре "Подразделения" выбраны все доступные пользователю подразделения:

  1. Отдел продаж

  2. Отдел продаж Алматы

  3. Отдел продаж Астана

Результат: на диаграмме "Исполнение плана продаж" метрика "План продаж" отображает число 2 200 000, метрика "% исполнения плана" рассчитана как процент от этого числа.

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