将行名添加到cde表组件

时间:2016-06-27 15:15:55

标签: datatable pentaho-cde

我的Pentaho CDE仪表板中有一个表组件,数据源是sql。我想制作一个这样的表

enter image description here

我需要添加一列作为此表的行名称和列标题顶部的行。 我在这里找到了一个方法: Table Component SubColumns 添加标题,但如何在其他列之前添加列?

1 个答案:

答案 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不会工作),但我提出的代码应该可以解决问题。