自定义 Power BI 可视化中的“Total rows”

3
我有一个关于在Power BI中创建自定义可视化的问题。
我想实现“总行”功能,这在内置矩阵可视化中是可用的。主要概念是自动汇总每个值并按行分组。这就是矩阵可视化的外观: 内置矩阵“总行”功能 但是,老实说,我不知道如何实现这一点。我尝试了不同的方法,但是无法在数据视图中接收到这些分组值。
我尝试分析内置的matrix.ts代码,但它与自定义可视化代码相差很大。我发现了customizeQuery方法,它将subtotalType属性设置为行和列 - 我尝试在我的代码中添加这个方法,但在dataViews中没有看到任何区别(我没有找到分组值)。
目前我的capabilities.dataViewMappings设置如下:
            dataViewMappings: [
            {
                conditions: [
                    { 'Rows': { max: 3 } }
                ],
                matrix: {
                    rows: {
                        for: { in: 'Rows' },
                    },
                    values: {
                        for: { in: 'Values' }
                    },
                },
            }
        ]

有人知道我们如何实现这个“总行”功能吗?
更新1
我已经找到了解决方案:当我们实现customizeQuery方法(与matrix.ts代码中的customizeQuery方法相同),然后将其引用添加到powerbi.visuals.plugins.[visualisationName+visualisationAddDateEpoch].customizeQuery中,它就像预期的那样工作(我在dataViews[0].matrix.row.root中接收到具有总行值的子元素)。
现在唯一的问题是我不知道如何正确地添加此引用到customizeQuery方法。例如,[visualisationName+visualisationAddDateEpoch]Custom1451458639997,我不知道那些数字会是什么(我只知道名称)。我在我的可视化构造函数中创建了以下代码(它正在工作):
    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方法并应该使用它的正确方式是什么? 更新2 更新1中的代码仅适用于基于Web的Power BI(Web浏览器)。在Power BI桌面版本中,customizeQuery方法不会被调用。告诉Power BI使用我们的自定义customizeQuery方法的正确方法是什么?在PowerBI-visuals repository的代码中,使用PowerBIVisualPlayground,我们可以在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中,我们无法访问添加额外代码的这一部分。有什么想法吗?


我认为如果你在Visuals Github存储库中发布这个问题,你可能会得到一个答案。 - Markive
1个回答

0

看起来你在capabilities中缺少了列映射。首先,查看一下矩阵能力(也复制下面供参考),并将其结构作为第一步采用。矩阵计算行和列的交集,因此如果capabilities中没有列,那么你想要的结果是可疑的。

其次,在传递给Update的matrix dataview中,你会得到一个isSubtotal: true的'DataViewMatrixNode'。查看一下矩阵单元测试以了解其结构。

        dataViewMappings: [{
        conditions: [
            { 'Rows': { max: 0 }, 'Columns': { max: 0 }, 'Values': { min: 1 } },
            { 'Rows': { min: 1 }, 'Columns': { min: 0 }, 'Values': { min: 0 } },
            { 'Rows': { min: 0 }, 'Columns': { min: 1 }, 'Values': { min: 0 } }
        ],
        matrix: {
            rows: {
                for: { in: 'Rows' },
                /* Explicitly override the server data reduction to make it appropriate for matrix. */
                dataReductionAlgorithm: { window: { count: 500 } }
            },
            columns: {
                for: { in: 'Columns' },
                /* Explicitly override the server data reduction to make it appropriate for matrix. */
                dataReductionAlgorithm: { top: { count: 100 } }
            },
            values: {
                for: { in: 'Values' }
            }
        }
    }],

嗨@Lukasz,感谢您的回答。我已经检查过了,似乎这并没有改变什么。我已经找到了解决方案,并在第一篇帖子中编辑了我的问题(请查看更新1),其中我使用了customizeQuery方法-但我仍然有一个问题,如何正确地做到这一点,也许您会有一些建议?我提出的解决方案在声明或不声明列时都有效。 - Grzegorz Piotrowski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接