UNPKG

mstr-report-data-service

Version:

A Node function for calling Microstrategy's reportDataService task and returning the payload as JSON.

77 lines (62 loc) 2.83 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = parseMstrResults; var _xml2js = require('xml2js'); var _lodash = require('lodash'); var _parseValue = require('./parseValue'); var _parseValue2 = _interopRequireDefault(_parseValue); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } // custom parsing function function parseMstrResults(xmlBody) { return new Promise(function (resolve, reject) { (0, _xml2js.parseString)(xmlBody, {}, function (err, json) { if (err) return reject(err); // parent reportData object var reportData = json.taskResponse.report_data_list[0].report_data[0]; // basic meta var reportName = reportData.$.name; // report objects, like 'day' var reportObjects = reportData.objects[0].attribute.map(function (attr) { return attr.$; }); // report metrics, like 'activations' var reportMetrics = reportData.objects[0].metric.map(function (metric) { return metric.$; }); // report row headers, report layout var reportRowHeaders = reportData.raw_data[0].headers[0].oi.map(function (header) { var id = header.$.rfd; // concat objects/metrics as headers var name = [].concat(_toConsumableArray(reportObjects), _toConsumableArray(reportMetrics)).filter(function (value) { return value.rfd == id; })[0].name; // return header name and rfd id # return { rfd: id, name: name }; }); // report row data, with headers as object keys/properties // json array var reportRowValues = reportData.raw_data[0].rows[0].r.map(function (row) { // declare object to return var returnObject = {}; // iterate over value array, and assign rowheader as key/property row.v.forEach(function (v, index) { var value = v._; var key = (0, _lodash.camelCase)(reportRowHeaders[index].name); returnObject[key] = (0, _parseValue2.default)(value); }); return returnObject; }); resolve({ name: reportName, data: reportRowValues }); }); }); } //# sourceMappingURL=parseMstrResults.js.map