#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];
таким образом, вам не нужно полагаться на индекс массива