多个不相关的dataViewMappings用于自定义视觉效果Power BI Report Server

时间:2020-09-10 11:30:56

标签: powerbi dataview powerbi-custom-visuals

Power BI Report Sever创建自定义视觉效果存在一个众所周知的问题-您无法创建多个不相关的dataViewMappings。这意味着您在Fields内输入的每个字段必须相关

用户一直要求添加此功能。

但是,看来Microsoft尚未实现。

https://github.com/Microsoft/PowerBI-visuals/issues/251

我找到了一种解决方法-您可以将所有不同的表组合在一起,并用一个tableName键进行链接。

例如,您有一个table A

value1|value2|tableName
1|2|tableA
3|4|tableA

和一个table B

value3|tableName
a|tableB
b|tableB

您可以使用tableC函数M或其他技术来创建Table.Combine({tableA, tableB})。结果,它看起来像这样:

value1|value2|value3|tableName
1|2|null|tableA
3|4|null|tableA
null|null|a|tableB
null|null|b|tableB

然后,在您的自定义视图中实现以下用于解析输入的函数:

    public parseOptionsToTables(options: VisualUpdateOptions) {
        var i: number;
        var j: number;

        var cntRows: number;
        var cntCols: number;
        var nameTable: string;
        var tempDict: {} = {};
        var tempVal: any;
        var colName: string;

        var cats: any = options.dataViews[0].table;

        this.tables = {};

        cntCols = cats.columns.length;
        cntRows = cats.rows.length;

        for (i = 0; i < cntRows; i++) {

            tempVal = null;
            colName = null;
            nameTable = null;
            tempDict = {};

            for (j = 0; j < cntCols; j++) {

                //for every row - check the TableName column and add to dict 

                tempVal = cats.rows[i][j];
                colName = cats.columns[j].displayName;


                if (colName == 'tableName') {

                    nameTable = tempVal;

                } else {

                    //add id not null
                    if (tempVal !== null) {

                        tempDict[colName] = tempVal;

                    }

                }

            }

            //push to dict

            this.tables[nameTable] = this.tables[nameTable] || [];
            this.tables[nameTable].push(this.deepcopy(tempDict));

        }

    }

结果,它创建了一个this.tables对象,其中包含您的tableAtableB

尽管它有助于解决主要问题,但我仍然无法摆脱创建拐杖的感觉。 那么,还有其他方法可以更有效地解决这个问题吗?

0 个答案:

没有答案