UNPKG

qix-faker

Version:

Generate fake Qlik Engine data in the shape of hypercubes and listobjects.

136 lines (104 loc) 3.57 kB
# qix-faker > Powered by [faker.js](https://github.com/Marak/faker.js) Generate fake Qlik Engine data in the shape of [hypercubes](https://core.qlik.com/services/qix-engine/apis/qix/definitions/#hypercube) and [listobjects](https://core.qlik.com/services/qix-engine/apis/qix/definitions/#listobject). Great for prototyping with [picasso.js](https://picassojs.com), [nebula.js](https://github.com/qlik-oss/nebula.js) and any other time when a real Qlik Engine is not available. ## Usage ### node.js ```sh npm install qix-faker ``` ```js const { hypercube, listobject } = require('qix-faker'); const hc = hypercube({ dimensions: [f => f.commerce.product()], measures: [f => f.commerce.price(100, 5000, 2, '$')], numRows: 3, }); const lo = listobject({ dimension: [f => f.commerce.product()], numRows: 5, }); ``` ## API ### qixFaker.hypercube(options) - options `<object>` - dimensions `<Array<field>>` - Dimensions. - measures `<Array<field>>` - Measures. - numRows `<number>` - Number of rows to generate. - seed `<number>` - Set the same number to generate consistent results. ```js qixFaker.hypercube({ numRows: 10, seed: 5, dimensions: [ { value: (faker, rowIdx) => faker.date.month(), }, ], }); ``` ### qixFaker.listobject(options) - options `<object>` - dimension `<field>`. - numRows `<number>` - Number of rows to generate. - seed `<number>` - Set the same number to generate consistent results. ```js qixFaker.listobject({ numRows: 10, seed: 5678, dimension: f => d.name.firstName(), }); ``` ### types #### field `<function | object>` A `field` configuration can take on two different shapes: ##### `<function(faker, rowIndex)>` A function which is provided the `faker` instance as first parameter, and the `rowIndex` as the second. See the [faker api](http://marak.github.io/faker.js/faker.html) for details on params of each method. ```js hypercube({ dimensions: [(faker, idx) => faker.commerce.product()], measures: [(faker, idx) => faker.finance.amount(100, 3000, 2, '$')], }); ``` ##### `<object>` Using an object provides more control: - value: `<function(faker, rowIndex)>` - Same function as above. - maxCardinalRatio `<number>` - A value between `0 - 1` to limit the uniqueness of dimension values. - attrDims `<Array<field>>` - Attribute dimensions. - attrExps `<Array<field>` - Attribute expression. - override `<object>` - Set custom properties on the field. ```js hypercube({ numRows: 100, dimensions: [ { value: f => f.address.city(), maxCardinalRatio: 0.4, attrDim: [f => f.commerce.color()], attrExps: [f => f.random.number()] override: { qFallbackTitle: 'City', qLocked: true, }, }, ], }); ``` In the above example, 100 rows of data is generated using the `city` dataset provided in `faker`, there is however no guarantee that all 100 rows will be unique. In some cases though, it might be desirable to limit the uniqueness of the generated values; `maxCardinalRatio` provides a way to do just that. Assume we want to generate some data containing _cities_ grouped by _country_, by setting `maxCardinalRatio` to a low number we can create such a dataset. ```js hypercube({ numRows: 80, dimensions: [ { value: f => f.address.country(), maxCardinalRatio: 0.1, }, { value: f => f.address.city(), }, ], }); ``` In the above example, the first 8 rows (numRows \* ratio) of _country_ will be the same, while _city_ will be randomized, thus creating groups.