2016-06-27 11 views
0

Ich habe eine Tabelle Komponente in meinem Pentaho CDE Dashboard und Datenquelle ist SQL. Ich möchte eine Tabelle wie dieseHinzufügen von Zeilennamen zu CDE-Tabelle Komponente

enter image description here

ich für diese Tabelle und einer Reihe an der Spitze der Spaltenkopf eine Spalte als Zeilennamen hinzufügen müssen machen. Ich habe hier eine Methode gefunden: Table Component SubColumns Header hinzufügen, aber wie kann ich eine Spalte vor anderen Spalten hinzufügen?

Antwort

0

Ich denke, eine clevere Möglichkeit, die zusätzliche Spalte Teil zu tun wäre durch Ändern der Abfrage Ergebnisobjekt, nachdem es von der Abfrage abgerufen, so dass Sie die Spalten und Zeilen nach Bedarf hinzufügen. Sie können dies in der Funktion PostFetch Rückruf tun, die das Abfrageergebnis Objekt als erstes Argument:

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++; 
    }); 
} 

Der einzige schwierige Teil ist der Teil der Metadaten zu modifizieren, da Sie effektiv die Struktur des Datensatzes ändern, und Stellen Sie sicher, dass das queryResult-Objekt an Ort und Stelle aktualisiert wird, anstatt nur seine Referenz zu ändern (queryResult = myNewQueryResult würde nicht funktionieren), aber der Code, den ich vorgeschlagen habe, sollte den Trick tun.