
Виджеты AW BI
Виджет - элемент, обеспечивающий необходимую визуализацию данных модели в форме простых таблиц, иерархических раскрывающихся списков, графиков, диаграмм и других визуализаций.
В данном случае мы будем использовать HTML виджет для реализации отображения топа по выполнению плана продаж, включая аватарки работников.
Виджет KPI с аватарками
Создание виджета
Данные для виджета
В модели у нас есть менеджеры, для каждого из которых у нас есть план, факт, город работы и именование фотографии.
- Важно! Именование фотографий должно совпадать с названиями фотографий, которые будут загружаться в виджет
Формирование
В виджете мы отобразим фотографию сотрудника, ФИО сотрудника, надпись “Лучший сотрудник” и процент выполнения плана. Перейдем к созданию виджета:
- Выбираем тип виджета - HTML
- В “Группы” виджета добавляем поле с ФИО работника [worker]
- Создадим расчетный агрегат для вычисления процента выполнения плана [result]:
AVG([fact]/[plan]*100) - Расчетный агрегат перенесем в “Столбцы” виджета
- Добавляем поле [photo], которое содержит именование фотографии, в “Столбцы виджета”, добавим к нему промежуточную формулу:
ANY([photo]) - Вставляем следующий код в части html, css, js кода виджета:
html
<article class="widget-card">
<div class="image-container">
<img id="image-preview" class="image-preview">
</div>
<div class="header-container">
<div class="title">⭐Лучший результат</div>
<div class="sub-header" id="image-fio"></div>
<div class="metrics">
<div>Выполнение плана: </div>
<div class="metric" id="metric_1"></div><div class="metric">%</div>
</div>
</div>
</article>
css
.widget-card {
font-family: sans-serif;
border: 1px solid #FCD069;
border-radius: 16px;
width: 99%;
height: 120px;
display: flex;
flex-direction: row;
padding-inline: 10px;
padding-block: 20px;
background-color: #FFFAF0;
}
.header-container {
line-height: 22px;
padding-left: 15px;
}
.metrics {
display: flex;
flex-direction: row;
}
.metric {
font-weight: 700;
color: green;
}
.title {
color: #7A8492;
font-size: 14px;
font-weight: 400;
}
.sub-header {
font-size: 17px;
font-weight: 700;
}
.image-container {
width: 40%;
height: 100%;
display: flex;
align-items: left;
justify-content: left;
padding-left: 10px;
}
.image-preview {
max-width: 100%;
max-height: 100%;
object-fit: contain;
border-radius: 100px;
}
js
function setImage(element, valueIndex, fieldName) {
const fieldData = window.DATA.data[valueIndex];
const imageUrl = fieldData?.[fieldName]?.agg_value;
if (element.tagName === 'IMG') {
element.src = imageUrl+'.png' || '';
element.alt = fieldData?.name?.value || '';
} else {
element.innerHTML = imageUrl
? `<img src="${imageUrl}" alt="${fieldData?.worker?.value || ''}">`
: 'Изображение не найдено';
}
}
function setTitle(element, valueIndex, fieldName) {
const fieldData = window.DATA.data[valueIndex];
const title = fieldData?.[fieldName]?.display_value;
element.innerHTML = title || 'Без названия';
}
function render() {
if (!window.DATA?.data?.length) {
console.warn('Данные не загружены');
return;
}
const imageElement = document.getElementById('image-preview');
const titleElement = document.getElementById('image-fio');
const metric1Element = document.getElementById('metric_1');
setImage(imageElement, 0, 'photo');
setTitle(titleElement, 0, 'worker');
setTitle(metric1Element, 0, 'result');
}
document.addEventListener('DOMContentLoaded', render);
window.addEventListener('dataUpdated', render);
- На вкладке js мы должны сверить показатели
- 1 и 3 должны совпадать с алиасом столбца с ФИО сотрудника
- 2 должно совпадать с алиасом столбца с именованиями фото
- 4 должно совпадать с алиасом расчетного агрегата процента выполнения плана
- Загрузим файлы в виджет:
- Нажимаем на Файлы на нижней панели редактора виджета
- Нажимаем на кнопку Загрузить файл и выбираем все нужные аватарки
- Закрываем окно загрузки фото
- В расчетном агрегате [result] нужно установить фильтрацию Топ 1
Подсказка

- Нажимаем выполнить и опубликовать.
Таким образом, мы создали виджет с топом по сотрудникам.
Использование виджета
Помимо вывода сотрудника с лучшим результатом мы также можем создать виджет с выводом худшего результата. Он настраивается также, как и виджет с лучшим результатом, но вместо фильтрации Топ используется Антитоп. На примере показан вариант с 2 виджетами топа и антитопа, а также добавлен фильтр по городу.
При фильтрации по определенному набору городов мы можем вывести соответствующие топы.
В зависимости от количества различных показателей мы можем также продолжать фильтровать данные, например, добавив Регионы, Даты продаж и прочее.
Примеры приведенных виджетов вы сможете найти на aw-demo.ru:
Аватарки менеджеров взяты с сайта: https://icon-icons.com/










