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/