Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex DataLens
    • Обзор
      • Обзор
      • Вкладки
      • Источники
      • Доступные методы
      • Уведомления
      • Связи чарта в дашбордах и отчетах
      • Кросс-фильтрация
      • Отладка чартов
        • Обзор
        • Таблица
        • График (Gravity Charts)
        • Markdown
        • Advanced-чарт
        • Селектор
    • Версионирование
    • Инспектор чартов
    • Управление доступом
  • Аудитные логи Audit Trails

В этой статье:

  • Как начать работу с Advanced-чартом
  • Подключение сторонних библиотек
  • Доступные методы
  • События
  • Тултип
  • Чарт-чарт фильтрация
  • Примеры
  1. Чарты
  2. Чарты в Editor
  3. Типы визуализаций
  4. Advanced-чарт

Advanced-чарт

Статья создана
Yandex Cloud
Обновлена 11 апреля 2025 г.
  • Как начать работу с Advanced-чартом
  • Подключение сторонних библиотек
  • Доступные методы
  • События
  • Тултип
  • Чарт-чарт фильтрация
  • Примеры

Примечание

Функциональность доступна только в рамках тарифного плана Business.

Этот тип визуализации позволяет создавать HTML с безопасной разметкой через функцию Editor.generateHtml(args) и гибкие SVG-визуализации с использованием библиотек d3, d3-chord и d3-sankey.

На вкладке Prepare необходимо сформировать структуру:

module.exports = {
    render: Editor.wrapFn(...),
};

Подробнее о методе Editor.wrapFn.

Примечание

Advanced-чарты работают медленнее других визуализаций. Рекомендуем использовать их только при необходимости, когда не хватает возможностей обычных чартов.

Как начать работу с Advanced-чартомКак начать работу с Advanced-чартом

  1. Для отрисовки чарта определите функцию render:

    module.exports = {
        render: Editor.wrapFn({
            fn: function() {
                return 'Hello, world!';
            },
        })
    };
    
  2. Добавьте необходимую верстку:

    module.exports = {
        render: Editor.wrapFn({
            fn: function() {
                const content = 'Hello, world!';
    
                return Editor.generateHtml(`
                  <div style="display: flex; background: black;">
                    ${content}
                  </div>
                `);
            },
        })
    };
    
  3. Для использования данных с сервера подготовьте и передайте аргументы в функцию:

    // Подготовьте данные для отрисовки чарта.  
    const content = 'Hello, world!';
    
    module.exports = {
        render: Editor.wrapFn({
        // Первым аргументом всегда будут параметры чарта
        // переменные из args идут далее
            fn: function(options, content) {
                const {width, height} = options;
    
                return Editor.generateHtml(`
                  <div style="width: ${width}; height: ${height}">
                    ${content}
                  </div>
                `);
            },
            args: [content],
        })
    };
    

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

Подключение сторонних библиотекПодключение сторонних библиотек

В функцию чарта можно добавить сторонние библиотеки через параметр libs в wrapFn:

module.exports = {
    render: Editor.wrapFn({
        fn: function(options) {
            const {width, height} = options;
            const element = d3.create('svg')
                .attr('width', width)
                .attr('height', height);

            element
                .append('g')
                .append('text')
                    .text('Hello, world!')
                    .style('alignment-baseline', 'before-edge');

            return Editor.generateHtml(element.node());
        },
        libs: ['d3'],
    })
};

Доступные библиотеки:

'date-utils@2.3.0'
'date-utils@2.5.3' (alias: 'date-utils')
'd3@7.9.0' (alias: 'd3')
'd3-chord@3.0.1' (alis: 'd3-chord')
'd3-sankey@0.12.3' (alias: 'd3-sankey')

Доступные методыДоступные методы

Весь код для Advanced-чарта исполняется в песочнице на основе QuickJs, что ограничивает доступ к методам браузерного API и DOM. Для работы с деревом элементов добавлены синтетические элементы document, которые не связаны с «внешним миром».

Для упрощения работы с данными внутри поддержаны дополнительные методы:

// аналог браузерного console.log для отладки кода
console.log(..args: unknown[])

// аналог браузерного setTimeout и clearTimeout
setTimeout: (handler: TimerHandler, timeout: number)
clearTimeout(timeoutId)

// для работы с HTML
// при возврате из функции строки без обертки в generateHtml, данные будут экранированы
Editor.generateHtml(value: string | object)

// В чарте можно объявить дополнительные параметры, которые будут влиять на отображение при работе с событиями, например. 
// Методы работы со стейтом:
// получения состояния чарта
Chart.getState()
// обновление состояния чарта
// При вызове метода будет выполнен метод render. Если нужно обновить состояние без перерисовки, нужно добавить вторым аргументом {silent: true}
Chart.setState(state: object, options?: {silent: boolean})

// Простановка параметров кросс-фильтрации. Подробнее в разделе чарт-чарт фильтрация
Editor.updateActionParams(params)

СобытияСобытия

Доступные события:

events: {
    click: Editor.wrapFn({
        fn: function(event) {
            ...
        },
    }),
    keydown: Editor.wrapFn({
        fn: function(event) {
            ...
        },
    }),
},

ТултипТултип

Пример:

module.exports = {
    render: Editor.wrapFn({
        fn: function() {
            ...
        },
    }),
    tooltip: {
        renderer: Editor.wrapFn({
            fn: function(event, config) {
                const name = event.target?.getAttribute('data-id');

                if (!name) {
                    return null;
                }

                const item = config.chartData.data.find((d) => d.name === name);
                return Editor.generateHtml(`<div style="padding: 20px;">${item.name}</div>`);
            },
            args: [chartConfig],
        }),
    }
};

Чарт-чарт фильтрацияЧарт-чарт фильтрация

Пример:

const chartData = [{id: '1', OrderYear: '2024'}];
render: Editor.wrapFn({
    fn: function(dimensions, data) {
        ...
            svg.append("g")
                .selectAll()
                .data(data)
                .enter().append('rect')
                .attr('data-id', (d) => d.id)
        ...
    },
    args: [chartData],
    libs: ['d3'],
}),
events: {
        click: Editor.wrapFn({
            fn: function(event, data) {
                const dataId = event.target.getAttribute('data-id');
                const selectedItem = data.find(d => d.id === dataId);

                if (selectedItem) {
                    Chart.updateActionParams({OrderYear: selectedItem.OrderYear});
                }
            },
            args: [chartData],
        }),
    },
...

ПримерыПримеры

Примеры на демонстрационном дашборде на вкладке Advanced.

Была ли статья полезна?

Предыдущая
Markdown
Следующая
Селектор
Проект Яндекса
© 2025 ООО «Яндекс.Облако»