Пользовательские визуальные элементы Highcharts с привязкой данных PowerBI

Бхарат Р. создал прекрасный пример о том, как создать настраиваемую визуализацию highcharts для PowerBI. Однако привязка данных еще не применялась. Для линейной диаграммы highcharts ниже я хотел бы использовать переменные вместо жестко закодированных значений. Так что можно применить привязку данных.

Здесь вы можете найти пример PowerBI-файла, который содержит настраиваемый визуальный элемент высоких диаграмм и данные который необходимо загрузить в настраиваемый визуал. В этом файле я сделал две таблицы данных. Я не предпочитаю одну из двух таблиц данных. Важно то, что данные структурированы таким образом, чтобы их было легче всего загрузить в визуальные диаграммы highcharts.

Пример кода (visual.ts)

"use strict";

import "core-js/stable";
import "./../style/visual.less";
import powerbi from "powerbi-visuals-api";
import VisualConstructorOptions = powerbi.extensibility.visual.VisualConstructorOptions;
import VisualUpdateOptions = powerbi.extensibility.visual.VisualUpdateOptions;
import IVisual = powerbi.extensibility.visual.IVisual;
import EnumerateVisualObjectInstancesOptions = powerbi.EnumerateVisualObjectInstancesOptions;
import VisualObjectInstance = powerbi.VisualObjectInstance;
import DataView = powerbi.DataView;
import VisualObjectInstanceEnumerationObject = powerbi.VisualObjectInstanceEnumerationObject;

import * as Highcharts from 'highcharts';
import * as Exporting from 'highcharts/modules/exporting';

import { VisualSettings } from "./settings";
export class Visual implements IVisual {
private target: HTMLElement;
private settings: VisualSettings;

    constructor(options: VisualConstructorOptions) {
        console.log('Visual constructor', options);
        this.target = options.element;
    }

    public update(options: VisualUpdateOptions) {
        this.settings = Visual.parseSettings(options && options.dataViews && options.dataViews[0]);
        console.log('Visual update', options);
        var optionMain=this.target;

        /**
         * Code to add highcharts
         */

        Highcharts.chart(optionMain.id, {

            title: {
                text: 'Solar Employment Growth by Sector, 2010-2016'
            },

            subtitle: {
                text: 'Source: thesolarfoundation.com'
            },

            xAxis: {
                categories: ['2010', '2011', '2012', '2013', '2014', '2015', '2016', '2017']
            },

            yAxis: {
                title: {
                    text: 'Number of Employees'
                }
            },
            legend: {
                layout: 'vertical',
                align: 'right',
                verticalAlign: 'middle'
            },

            plotOptions: {
                series: {
                    label: {
                        connectorAllowed: false
                    }
                }
            },

            series: [{
                name: 'Installation',
                data: [43934, 52503, 57177, 69658, 97031, 119931, 137133, 154175],
                type: undefined
            }, {
                name: 'Manufacturing',
                data: [24916, 24064, 29742, 29851, 32490, 30282, 38121, 40434],
                type: undefined
            }, {
                name: 'Sales & Distribution',
                data: [11744, 17722, 16005, 19771, 20185, 24377, 32147, 39387],
                type: undefined
            }, {
                name: 'Project Development',
                data: [null, null, 7988, 12169, 15112, 22452, 34400, 34227],
                type: undefined
            }, {
                name: 'Other',
                data: [12908, 5948, 8105, 11248, 8989, 11816, 18274, 18111],
                type: undefined
            }],

            responsive: {
                rules: [{
                    condition: {
                        maxWidth: 500
                    },
                    chartOptions: {
                        legend: {
                            layout: 'horizontal',
                            align: 'center',
                            verticalAlign: 'bottom'
                        }
                    }
                }]
            }

        });



    }

    private static parseSettings(dataView: DataView): VisualSettings {
        return VisualSettings.parse(dataView) as VisualSettings;
    }

    /**
     * This function gets called for each of the objects defined in the capabilities files and allows you to select which of the
     * objects and properties you want to expose to the users in the property pane.
     *
     */
    public enumerateObjectInstances(options: EnumerateVisualObjectInstancesOptions): VisualObjectInstance[] | VisualObjectInstanceEnumerationObject {
        return VisualSettings.enumerateObjectInstances(this.settings || VisualSettings.getDefault(), options);
    }
}

person Kees de Jager    schedule 17.01.2020    source источник
comment
Есть ли где-нибудь вопрос? Если да, то я наверняка это пропустил. Если у вас возникли проблемы с библиотекой Highcharts или диаграммами, опишите их, чтобы мы могли помочь с этим.   -  person Kacper Madej    schedule 17.01.2020
comment
Привет, Kacper! Вопрос в том, чтобы динамически загружать данные (формат json) в пользовательский визуальный элемент highcharts. Это можно сделать, применив так называемую привязку данных. Это объясняется здесь: microsoft.github.io/PowerBI-visuals/docs/ концепции / Однако я не знаю, как заставить это работать, поэтому я спрашиваю, может ли кто-нибудь мне помочь. Надеюсь, теперь вопрос стал для вас более ясным.   -  person Kees de Jager    schedule 17.01.2020
comment
Не случайно ли у вас есть рабочий код, который добавляет HighCharts в Power BI?   -  person Mark    schedule 30.12.2020


Ответы (1)


Посмотрите на различия между вашей ссылкой и https://docs.microsoft.com/en-us/power-bi/developer/visuals/dataview-mappings. Похоже, что microsoft.github.io/PowerBI-visuals/docs/concepts/… устарел, а некоторые функции и синтаксис претерпели изменения.

В вашем примере я не вижу ваших определений в dataViewMappings.

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

person Boom1207    schedule 26.01.2020
comment
Привет Boom1207, я уже пробовал ссылку сверху. Но с помощью этого документа я все еще не могу применить привязку данных. Вот почему я спрашиваю, может ли кто-нибудь прислать образец кода, в котором применена привязка данных для highcharts. До сих пор ценю вашу помощь! - person Kees de Jager; 28.01.2020
comment
Вы выяснили, как использовать реальные данные с визуальными элементами HighCharts? - person Mark; 30.12.2020