我的Pentaho CDE仪表板中有一个表组件,数据源是sql。我想制作一个这样的表
我需要添加一列作为此表的行名称和列标题顶部的行。 我在这里找到了一个方法: Table Component SubColumns 添加标题,但如何在其他列之前添加列?
答案 0 :(得分:0)
我认为执行额外列部分的一种聪明方法是在从查询中检索查询结果对象之后修改查询结果对象,以便根据需要添加列和行。您可以在PostFetch
回调函数中执行此操作,该函数将查询结果对象作为第一个参数:
function yourTableComponentPostFetch(queryResult) {
// Let's say you have an array of row names
var rowNames = ['Title1', 'Title2', ... ];
// Add a "title" column for every row
queryResult.resultset.forEach(function (row, idx) {
// Push it at the beginning of the row array
row.unshift(rowNames[idx]);
});
// Change metadata description of columns to reflect this new structure
queryResult.metadata.unshift({
colName: 'Title',
colIndex: -1, // this makes sense when reindexing columns below ;)
colType: 'String'
});
// One last re-indexing of metadata column descriptions
queryResult.metadata.forEach(function (column, idx) {
// The title added column will be 0, and the rest will rearrange
column.colIndex++;
});
}
唯一棘手的部分是关于修改元数据的部分,因为您正在有效地更改数据集的结构,并确保queryResult对象就地更新而不是仅仅更改其引用(queryResult = myNewQueryResult
不会工作),但我提出的代码应该可以解决问题。