percent.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import { __assign } from "tslib";
  2. import { map, reduce } from '@antv/util';
  3. import { isRealNumber } from '../number';
  4. /**
  5. * 对数据进行百分比化
  6. * @param data
  7. * @param measure
  8. * @param groupField
  9. * @param as
  10. */
  11. export function percent(data, measure, groupField, as) {
  12. // 1. 先计算每一个分组的 max 值
  13. var sumMap = reduce(data, function (map, datum) {
  14. var groupValue = datum[groupField];
  15. var sum = map.has(groupValue) ? map.get(groupValue) : 0;
  16. var v = datum[measure];
  17. sum = isRealNumber(v) ? sum + v : sum;
  18. map.set(groupValue, sum);
  19. return map;
  20. }, new Map());
  21. // 2. 循环数组,计算占比
  22. return map(data, function (datum) {
  23. var _a;
  24. var v = datum[measure];
  25. var groupValue = datum[groupField];
  26. var percentage = isRealNumber(v) && sumMap.get(groupValue) !== 0 ? v / sumMap.get(groupValue) : 0;
  27. return __assign(__assign({}, datum), (_a = {}, _a[as] = percentage, _a));
  28. });
  29. }
  30. /**
  31. * 对数据进行深层百分比化
  32. * @param data
  33. * @param measure // 数值
  34. * @param fields // 需要分组的 field值
  35. * @param as // 存储percent 百分比的值
  36. */
  37. export function getDeepPercent(data, measure, fields, percent) {
  38. var sumMap = reduce(data, function (map, datum) {
  39. // 获取分组得到的枚举key值
  40. var groupValue = reduce(fields, function (value, field) { return "".concat(value).concat(datum[field]); }, '');
  41. var sum = map.has(groupValue) ? map.get(groupValue) : 0;
  42. var v = datum[measure];
  43. sum = isRealNumber(v) ? sum + v : sum;
  44. map.set(groupValue, sum);
  45. return map;
  46. }, new Map());
  47. // 2. 循环数组,计算占比
  48. return map(data, function (datum) {
  49. var _a;
  50. var v = datum[measure];
  51. // 获取分组得到的枚举key值
  52. var groupValue = reduce(fields, function (value, field) { return "".concat(value).concat(datum[field]); }, '');
  53. var percentage = isRealNumber(v) && sumMap.get(groupValue) !== 0 ? v / sumMap.get(groupValue) : 0;
  54. return __assign(__assign({}, datum), (_a = {}, _a[percent] = percentage, _a));
  55. });
  56. }
  57. /**
  58. * 获取数据,如果是百分比,进行数据转换 (适用于面积图、柱状图、条形图)
  59. * @param isPercent 是否百分比
  60. */
  61. export function getDataWhetherPercentage(data, yField, groupField, asField, isPercent) {
  62. return !isPercent ? data : percent(data, yField, groupField, asField);
  63. }
  64. //# sourceMappingURL=percent.js.map