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
JavaScript
;
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