Forum Discussion

satishr's avatar
satishr
Helper III
8 years ago
Solved

Field order change issue when using options.dataViews[0].table.rows in my custom visual

Hi guys, I have created a simple custom visual widget where I'm using options.dataViews[0].table.rows to get data. The visual takes 3 fields as input - Actual, Target and Category. It works fine whe...
  • v-viig's avatar
    v-viig
    8 years ago

    Please use this code snippet to parse values from table mapping:

     

        export interface ColumnGroup {
            [columnName: string]: number | Date | string;
        }
    
        function getColumnGroupByRole(
            columns: DataViewMetadataColumn[],
            row: DataViewTableRow
        ): ColumnGroup {
            const columnGroup: ColumnGroup = {};
    
            row.forEach((value: any, valueIndex: number) => {
                const column: DataViewMetadataColumn = columns[valueIndex];
    
                Object.keys(columns[valueIndex].roles)
                    .forEach((roleName: string) => {
                        columnGroup[roleName] = value;
                    });
            });
    
            return columnGroup;
        }
    
        function parseData(dataView: DataView) {
            const data: any[] = [];
    
            dataView.table.rows.forEach((row: DataViewTableRow) => {
                const columns = getColumnGroupByRole(dataView.metadata.columns, row);
    
                data.push({
                    Indicator: +columns["Indicator"],
                    Target: +columns["Target"],
                    Date: columns["Date"]
                        ? columns["Date"].toString()
                        : null
                });
            });
    
            return data;
        }

    Ignat Vilesov,

    Software Engineer

     

    Microsoft Power BI Custom Visuals

    [email protected]