qliksense
August 25, 2021
Transforming Hypercube Data - English
Here are a couple ways to take HyperCube data and transform it into something more useable.
Example
Qlik Chart Object
This is a simple chart with two dimensions and one measure.
HyperCube Data Sample
The hypercube is the object behind a Qlik chart object. Here is how the chart data is returned by the getHyperCubeData()
API call.
Row Array
This would create an array for each row, where each value in the list is a column value. This is a simple version of a hypercube data set.
Object
This would create a single object, where the dimension fields are the key. This is in my opinion the easiest to work with.
Code
/* Example: Chart has 3 columns (2 Dims, 1 Msr) date_num | dim | msr ---------|-----|----- 43556 | B | 25 43556 | C | 26 .... */ data = [ [ { qText: '43556', qNum: 43556, qElemNumber: 1, qState: 'O' }, { qText: 'B', qNum: 'NaN', qElemNumber: 1, qState: 'O' }, { qText: '25', qNum: 25, qElemNumber: 0, qState: 'L' } ], [ { qText: '43556', qNum: 43556, qElemNumber: 1, qState: 'O' }, { qText: 'C', qNum: 'NaN', qElemNumber: 2, qState: 'O' }, { qText: '26', qNum: 26, qElemNumber: 0, qState: 'L' } ], [ { qText: '43556', qNum: 43556, qElemNumber: 1, qState: 'O' }, { qText: 'D', qNum: 'NaN', qElemNumber: 0, qState: 'O' }, { qText: '25', qNum: 25, qElemNumber: 0, qState: 'L' } ], [ { qText: '43586', qNum: 43586, qElemNumber: 2, qState: 'O' }, { qText: 'C', qNum: 'NaN', qElemNumber: 2, qState: 'O' }, { qText: '25', qNum: 25, qElemNumber: 0, qState: 'L' } ], [ { qText: '43586', qNum: 43586, qElemNumber: 2, qState: 'O' }, { qText: 'D', qNum: 'NaN', qElemNumber: 0, qState: 'O' }, { qText: '26', qNum: 26, qElemNumber: 0, qState: 'L' } ], [ { qText: '43617', qNum: 43617, qElemNumber: 0, qState: 'O' }, { qText: 'B', qNum: 'NaN', qElemNumber: 1, qState: 'O' }, { qText: '25', qNum: 25, qElemNumber: 0, qState: 'L' } ], [ { qText: '43617', qNum: 43617, qElemNumber: 0, qState: 'O' }, { qText: 'C', qNum: 'NaN', qElemNumber: 2, qState: 'O' }, { qText: '26', qNum: 26, qElemNumber: 0, qState: 'L' } ], [ { qText: '43617', qNum: 43617, qElemNumber: 0, qState: 'O' }, { qText: 'D', qNum: 'NaN', qElemNumber: 0, qState: 'O' }, { qText: '26', qNum: 26, qElemNumber: 0, qState: 'L' } ] ] const rows = [] const rowObj = {} for (var r in data) { let row = data[r] values = [] v = {} for (var c in row) { values.push(row[c].qNum== 'NaN' ? row[c].qText : row[c].qNum) } // Row Array rows.push(values) // Single Object with dim values as key key = values[0]+"|"+values[1] rowObj[key] = values[2] } console.log('\n','Row Array:', '\n\n', rows,'\n') console.log('Object:','\n\n', rowObj,'\n')
Initial Article: https://whereclause.com/article/transforming-hypercube-data/