"总行数"在自定义Power BI可视化中

时间:2016-01-21 09:51:58

标签: powerbi

我有一个关于在Power BI中创建custom visualization的问题。

我想实现"总行"内置矩阵可视化中可用的功能。主要概念是自动汇总每个值并按行分组。这就是它在矩阵可视化上的样子: Built-in matrix "total rows" functionality

但是,说实话,我不知道如何实现这一目标。我尝试了不同的东西,但我无法在dataViews中收到这些分组值。

我尝试分析内置的matrix.ts code,但它与自定义可视化代码完全不同。我发现了customizeQuery方法,它将subtotalType属性设置为行和列 - 我尝试在我的代码中添加它,但我没有看到dataViews有任何差异(我没有找到分组值)。

目前我的capabilities.dataViewMappings设置如下:

            dataViewMappings: [
            {
                conditions: [
                    { 'Rows': { max: 3 } }
                ],
                matrix: {
                    rows: {
                        for: { in: 'Rows' },
                    },
                    values: {
                        for: { in: 'Values' }
                    },
                },
            }
        ]

有谁知道我们如何才能实现这一目标"总排"功能?

更新1

我已经找到了解决方案:当我们实现customizeQuery方法时(与matrix.ts代码中的customizeQuery方法相同),然后在{添加对它的引用{1}}然后它按预期工作(我在powerbi.visuals.plugins.[visualisationName+visualisationAddDateEpoch].customizeQuery子元素中接收到具有行总值的元素。

现在唯一的问题是,我并不确切知道如何正确添加此dataViews[0].matrix.row.root方法的引用。例如customizeQuery[visualisationName+visualisationAddDateEpoch],我不知道这些数字是什么(我只知道名字)。我在我的可视化构造函数中创建了代码,如下所示(并且它正在工作):

Custom1451458639997

但在我看来,这段代码非常脏,不够优雅。我想改进它 - 告诉Power BI我们实现自定义 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; } } } 方法的正确方法是什么,它应该使用它?

更新2

更新1 中的代码仅适用于Web浏览器中的Power BI(基于Web)。在Power BI桌面上,不会调用customizeQuery方法。告诉Power BI使用我们的自定义customizeQuery方法的正确方法是什么?在使用PowerBIVisualPlayground的PowerBI-visuals repository代码中,我们可以在plugin.ts文件中声明它(与完成矩阵视觉的方式相同):

customizeQuery

但是,在我看来,从Power BI Dev Tools我们无权访问这部分代码。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您似乎错过了功能中的列映射。看一下matrix capabilities(也在下面复制以供参考),作为第一步,最初采用该结构。矩阵计算行和列的交集,因此如果没有能力列,那么你会怀疑你得到你想要的东西。

其次,在传递给Update的矩阵数据视图中,您将获得一个' DataViewMatrixNode'使用 isSubtotal:true 查看unit tests for matrix以查看结构。

        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' }
            }
        }
    }],