我有一个关于在Power BI中创建custom visualization的问题 .
我想实现内置矩阵可视化中可用的"total row"功能 . 主要概念是自动汇总每个值并按行分组 . 这就是矩阵可视化的样子:
但是,说实话,我不知道如何实现这一目标 . 我尝试不同的东西,但我无法在dataViews中收到这些分组值 .
我试图分析内置的matrix.ts code,但它与自定义可视化代码完全不同 . 我找到了customizeQuery方法,它将subtotalType属性设置为行和列 - 我试图在我的代码中添加它,但我没有找到分组值 .
目前我的capabilities.dataViewMappings设置如下:
dataViewMappings: [
{
conditions: [
{ 'Rows': { max: 3 } }
],
matrix: {
rows: {
for: { in: 'Rows' },
},
values: {
for: { in: 'Values' }
},
},
}
]
有谁知道我们如何才能实现这种“总排”功能?
UPDATE 1
我已经找到了解决方案:当我们实现 customizeQuery
方法(与matrix.ts代码中的customizeQuery方法相同),然后在 powerbi.visuals.plugins.[visualisationName+visualisationAddDateEpoch].customizeQuery
中添加对它的引用然后它按预期工作(我收到 dataViews[0].matrix.row.root
具有行总值的子元素 .
现在唯一的问题是我不知道如何正确地添加这个对 customizeQuery
方法的引用 . 例如, [visualisationName+visualisationAddDateEpoch]
是 Custom1451458639997
,我不会't know what those number will be (I know only the name). I created the code in my visualisation constructor as below (and it'工作):
constructor() {
var targetCustomizeQuery = this.constructor.customizeQuery;
var name = this.constructor.name;
for(pluginName in powerbi.visuals.plugins) {
var patt = new RegExp(name + "[0-9]{13}");
if(patt.test(pluginName)) {
powerbi.visuals.plugins[pluginName].customizeQuery = targetCustomizeQuery;
break;
}
}
}
但在我看来,这段代码非常脏,不够优雅 . 我想改进它 - 告诉Power BI我们实现自定义 customizeQuery
方法的正确方法是什么,它应该使用它?
UPDATE 2
update 1 中的代码仅适用于Web浏览器中的Power BI(基于Web) . 在Power BI桌面上,不会调用 customizeQuery
方法 . 告诉Power BI使用我们的自定义 customizeQuery
方法的正确方法是什么?在使用PowerBIVisualPlayground的PowerBI-visuals repository代码中,我们可以在plugin.ts文件中声明它(与完成矩阵视觉的方式相同):
export let matrix: IVisualPlugin = {
name: 'matrix',
watermarkKey: 'matrix',
capabilities: capabilities.matrix,
create: () => new Matrix(),
customizeQuery: Matrix.customizeQuery,
getSortableRoles: (visualSortableOptions?: VisualSortableOptions) => Matrix.getSortableRoles(),
};
但是,在我看来,从Power BI Dev Tools我们无法在这部分代码中添加额外的东西 . 有任何想法吗?
1 回答
您似乎错过了功能中的列映射 . 看一下matrix capabilities(也在下面复制以供参考),作为第一步,最初采用该结构 . 矩阵计算行和列的交集,因此如果没有能力中的列,那么你会得到你想要的东西 .
其次,在矩阵dataview中传递给你'll get a ' DataViewMatrixNode'用 isSubtotal: true 看看unit tests for matrix看结构 .