Отображение представления данных в Power BI visuals

#d3.js #pbiviz

#d3.js #pbiviz

Вопрос:

Добрый день

Я создаю пользовательскую визуализацию на d3js и pbiviz для powerbi

Вот код в capabilities.js:

 {
"dataRoles":[
    {
        "displayName": "HoleDepth",
        "name": "depth",
        "kind": "Grouping"
    },
    {
        "displayName": "Days",
        "name": "days",
        "kind": "Measure"
    },
    {
        "displayName": "Diametrs",
        "name": "diametrs",
        "kind": "Measure"
    },
    {
        "displayName": "Sensor1",
        "name": "sensor_1",
        "kind": "Measure"
    },
    {
        "displayName": "Sensor2",
        "name": "sensor_2",
        "kind": "Measure"
    },
    {
        "displayName": "Sensor3",
        "name": "sensor_3",
        "kind": "Measure"
    },
    {
        "displayName": "Sensor4",
        "name": "sensor_4",
        "kind": "Measure"
    }
],
"dataViewMappings": [
    {
        "categorical": {
            "categories": {
                "for": { "in": "depth" }
            },
            "values": {
                "select":[
                    { "bind": { "to": "days" } },
                    { "bind": { "to": "diametrs" } },
                    { "bind": { "to": "sensor_1" } },
                    { "bind": { "to": "sensor_2" } },
                    { "bind": { "to": "sensor_3" } },
                    { "bind": { "to": "sensor_4" } }
                ]
            }
        }
    }
]
  

}

Но в визуализации неудобно использовать массив категориальный -> значения введите описание изображения здесь

Возможно ли, чтобы категориальный -> значения были похожи на объект с ключами?

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

Ответ №1:

Я не думаю, что это возможно напрямую через отображение данных. Что я обычно делаю, если хочу подготовить данные в определенном формате, удобном для визуализации с помощью d3.js, это пользовательская функция, которая преобразует данные из VisualUpdateOptions . Затем я вызываю эту функцию внутри public update(options: VisualUpdateOptions)

Комментарии:

1. Вы имеете в виду взять имена полей из метаданных и связать их с массивами по идентификатору?

2. Не метаданные, а скорее итерация по просмотру данных-> категориальный-> категории-> значения и просмотры данных-> категориальный-> значения-> values. Если вы напишете правильный цикл, вы сможете формировать свои данные по своему усмотрению.

3. Хорошо, похоже, это хороший вариант. Жаль, что не было другого варианта, Спасибо за ответ)

Ответ №2:

Немного старый пост, но я только начал работать с pbiviz и typescript и должен был разобраться с этим, так что, надеюсь, это поможет другим, кто придет

Вы можете ссылаться на объекты из dataview с помощью find

Например:

 let days = dataView.categorical.values.find(value => value.source.roles.days === true);
let diametrs = dataView.categorical.values.find(value => value.source.roles.diametrs === true);
let sensor_1 = dataView.categorical.values.find(value => value.source.roles.sensor_1 === true);
  

а затем извлеките их значения:

 let days_value = days.values[0];
let diametrs_value = diametrs.values[0];
let sensor_1_value = sensor_1.values[0];
  

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