Ale*_*lex 6 dataview powerbi 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
Run Code Online (Sandbox Code Playgroud)
和一个table B:
value3|tableName
a|tableB
b|tableB
Run Code Online (Sandbox Code Playgroud)
您可以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
Run Code Online (Sandbox Code Playgroud)
然后,在您的自定义视觉对象中,您实现以下解析输入的函数:
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));
}
}
Run Code Online (Sandbox Code Playgroud)
结果,它创建了一个this.tables带有 yourtableA和tableBinside 的对象。
虽然有助于解决主要问题,但我却无法摆脱创造拐杖的感觉。那么,有没有其他方法可以更有效地解决这个问题呢?
| 归档时间: |
|
| 查看次数: |
529 次 |
| 最近记录: |