PowerBI自定义Visual - 表数据绑定

时间:2016-10-03 15:08:32

标签: powerbi

在PowerBI论坛上也是asked

我正在尝试更改sampleBarChart PowerBI visual以使用"表"数据绑定而不是当前"分类"。第一个目标是构建一个简单的表格视觉,输入" X"," Y"和"价值"。

两个数据绑定都在official wiki上描述。这是我能找到的全部: image

我找不到任何使用它并基于新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)访问值的正确尺度吗?我做错了什么?

非常感谢任何帮助或指示。

2 个答案:

答案 0 :(得分:4)

PowerBI论坛上的用户@RichardL sharedlink。这帮助了很多。

“总计”不是在(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真正起飞之前,这个领域需要得到很多关注。