在PowerBI论坛上也是asked。
我正在尝试更改sampleBarChart PowerBI visual以使用"表"数据绑定而不是当前"分类"。第一个目标是构建一个简单的表格视觉,输入" X"," Y"和"价值"。
两个数据绑定都在official wiki上描述。这是我能找到的全部:
我找不到任何使用它并基于新API的示例视觉效果。
从上图中,一个表格对象有"行","列","总计"和#34;身份"。所以看起来行和列是我的x / y索引,总数是我的值?
这就是我尝试过的。 (由于大多数来自现有的条形图代码,因此命名略有偏差)
数据角色:
{ "displayName": "Category1 Data",
"name": "category1",
"kind": 0},
{ "displayName": "Category2 Data",
"name": "category2",
"kind": 0},
{ "displayName": "Measure Data",
"name": "measure",
"kind": 1}
数据视图映射:
"table": {
"rows": {"for": {"in": "category1"}},
"columns": {"for": {"in": "category2"}},
"totals": {"select": [{"bind": {"to": "measure"}}]}
}
数据点类:
interface BarChartDataPoint {
value: number;
category1: number;
category2: number;
color: string;
};
我的visualTransform()的相关部分:
...
let category1 = categorical.rows;
let category2 = categorical.columns;
let dataValue = categorical.totals;
...
for (let i = 1, len = category1.length; i <= len; i++) {
for (let j = 1, jlen = category2.length; j <= jlen; j++) {
{
barChartDataPoints.push({
category1: i,
category2: j,
value: dataValue[i,j],
color: "#555555"//for now
});
}
...
测试数据如下所示:
__1_2_3_
1|4 4 3
2|4 5 5
3|3 6 7 (total = 41)
上面的代码只用六个数据点填充barChartDataPoints:
(1; 1; 41),
(1; 2;未定义),
(2; 1; 41),
(2; 2;未定义),
(3; 1; 41),
(3; 2;未定义)。
访问零个零件会导致空值。
问: totals
不是(x; y)访问值的正确尺度吗?我做错了什么?
非常感谢任何帮助或指示。
答案 0 :(得分:4)
PowerBI论坛上的用户@RichardL shared此link。这帮助了很多。
“总计”不是在(x; y)访问价值的正确措施。
结果Columns
包含列名,Rows
包含与这些列对应的值数组。
从上面的链接,这是表结构的样子:
{
"columns":[
{"displayName": "Year"},
{"displayName": "Country"},
{"displayName": "Cost"}
],
"rows":[
[2014, "Japan", 25],
[2015, "Japan", 30],
[2016, "Japan", 18],
[2015, "North America", 14],
[2016, "North America", 30],
[2016, "China", 100]
]
}
您还可以通过放置此
来查看视频接收到的数据window.alert(JSON.stringify(options.dataViews))
在你的update()方法中。或者将其写在视觉的html内容中。
答案 1 :(得分:2)
这非常有用,但它显示了PowerBI数据管理的一些基本问题,用于自定义视觉效果。没有文档,从角色到映射到visualTransform的过程是可怕的,因为它需要花费很多精力将数据重建为可与D3一致使用的格式。
评论user5226582的示例,对我来说,列以一种形式呈现,我必须查找Roles属性,以便能够理解rows列数组中显示的数据的顺序。 displayName没有确定性。例如,如果用户在两个不同的dataRoles中使用相同的字段,那么这一切都会疯狂地出错。
我认为最安全的方法是使用已知的井字段名称(dataRoles中的“name”属性)在visualTransform中构建一个新数组,然后迭代查询Roles属性的列以建立行数组项的索引。然后使用该索引可靠地填充新数组。然后D3吞噬了它。
我知道这很疯狂,但至少它意味着合理一致的数据,并允许用户多次选择相同的数据字段或选择计数而不是列值。
总而言之,我认为在自定义Visuals真正起飞之前,这个领域需要得到很多关注。