PowerBI 自定义视觉对象 - Table 数据绑定

PowerBI Custom Visual - Table data binding

还有 asked PowerBI 论坛上的这个。

我正在尝试更改 sampleBarChart PowerBI 视觉对象以使用 "table" 数据绑定而不是当前的 "categorical"。第一个目标是构建一个简单的 table 视觉对象,输入 "X"、"Y" 和 "Value"。

official wiki 中描述了两种数据绑定。这就是我能找到的所有内容:

我找不到任何使用它并基于新 API 的示例视觉效果。


从上图中,一个 table 对象有 "rows"、"columns"、"totals" 和 "identities"。所以看起来行和列是我的 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"}}]}
}

数据点class:

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) 值的正确度量吗?我做错了什么?


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

PowerBI 论坛上的用户@RichardL shared this link。帮了大忙。

"Totals" 不是访问 (x;y) 值的正确度量。

原来 Columns 包含列名,Rows 包含对应于这些列的值数组。

根据上面的 link,table 结构是这样的:

{
 "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 内容中。

这非常有帮助,但它显示了 PowerBI 数据管理中自定义视觉对象的一些基本问题。没有文档,从 Roles 到映射到 visualTransform 的过程非常可怕,因为需要花费大量精力将数据重建为与 D3 一致可用的格式。

评论 user5226582 的示例,对我来说,列以一种形式呈现,我必须查找角色 属性 才能理解行列数组中呈现的数据顺序。 displayName 不确定。例如,如果用户在两个不同的数据角色中使用相同的字段,那么一切都会变得疯狂。

我认为最安全的方法是使用已知的井场名称(dataRoles 中的 "name" 属性)在 visualTransform 中构建一个新数组,然后迭代查询角色的列 属性 为行数组项建立索引。然后使用该索引可靠地填充新数组。然后 D3 吞噬了它。

我知道这很疯狂,但至少它意味着合理一致的数据并允许用户多次选择相同的数据字段或选择计数而不是列值。

总而言之,我认为在自定义视觉效果真正起飞之前,这个领域需要大量关注。