找回密码
 立即注册

QQ登录

只需一步,快速开始

KevinChen 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-5-19 12:06  /   查看:2971  /  回复:0
SpreadJS V14 Update1 开始支持数据透视表的计算字段功能。
所谓计算字段,是指在数据透视表中,可以在值字段中使用汇总函数合并基础源数据中的值。如果汇总函数和自定义计算无法提供所需结果,可在计算字段和计算项中创建自己的公式。例如,可为计算项添加计算销售佣金的公式,销售佣金在每个地区可能有所不同。然后,数据透视表​自动将佣金包含在分类汇总和总计中。
如下图所示,在公司中销售人员销售额的7%将用作奖金,我们可以使用计算字段来查看每个销售人员的奖金,公式为 "=销售*0.07"
image.png523459777.png

我们再来看一个案例:
下面是某公司销售流水数据,如何计算各种物品的均价?
image.png656303710.png

按顺序操作数据透视表:
1. 插入数据透视表;将“内容”字段拖入行;将“数据”、“金额”字段插入值;得到的结果如下所示:
image.png511223754.png

2. 插入计算字段;现在要求对均价进行求解,我们都知道:均价=金额/数量;在数据透视表工具的分析-字段、项目和集中选择计算字段:
image.png169914244.png

在名称中输入均价,在公式中利用插入字段输入公式:=金额/数量
image.png853379211.png

数据透视表进行了更新,得到下面的结果
image.png244418029.png

++++++++++++++++++分割线+++++++++++++++++++

计算字段API描述:
  1. interface ICalcFieldInfo {
  2.     fieldName: string;
  3.     formula?: string;
  4. }

  5. ///* function addCalcField(fieldName: string, formula: string): void
  6. /**
  7. * @description Add a calc field
  8. * @param {string} fieldName Indicates the calc field name.
  9. * @param {string} formula Indicates the calc formula.
  10. */
  11. addCalcField (fieldName: string, formula: string): void

  12. ///* function getCalcFields(): GC.Spread.Pivot.ICalcFieldInfo[]
  13. /**
  14. * @description get all calc fields's info.
  15. * @return {GC.Spread.Pivot.ICalcFieldInfo[]} return all calculated fields's info.
  16. */
  17. getCalcFields (): GC.Spread.Pivot.ICalcFieldInfo[];

  18. ///* function removeCalcField(fieldName: string): void
  19. /**
  20. * @description remove a calc field
  21. * @param {string} fieldName Indicates the calc field name.
  22. */
  23. removeCalcField (fieldName: string): void
复制代码



示例代码:
  1. var spread = new GC.Spread.Sheets.workbook(document.getElementById("ss"));
  2. var sourceSheet = spread.getSheet(0);
  3. var sheet = spread.getSheet(1);
  4. var sourceData = [["Date","Buyer","Type","Amount"],
  5.                   ["01-Jan","Mom","Fuel",74],
  6.                   ["15-Jan","Mom","Food",235],
  7.                   ["17-Jan","Dad","Sports",20],
  8.                   ["21-Jan","Kelly","Books",125]];
  9. sourceSheet.setArray(0, 0, sourceData);
  10. sourceSheet.tables.add('sourceData', 0, 0, 5, 4);
  11. var layout = GC.Spread.Pivot.PivotTableLayoutType.compact;
  12. var theme = GC.Spread.Pivot.PivotTableThemes.medium2;
  13. var option = {allowMultipleFiltersPerField: false};
  14. var pivotTable = sheet.pivotTables.add("pivotTable_1",'sourceData',1,1,layout,theme,option);
  15. pivotTable.add("Buyer", "Buyer", GC.Spread.Pivot.PivotTableFieldType.rowField);
  16. pivotTable.add("Date", "Date", GC.Spread.Pivot.PivotTableFieldType.columnField);
  17. // Amount is one of pivotTable's measure field
  18. pivotTable.addCalcField("PercentOfEach", "=Amount/454");
  19. pivotTable.add("PercentOfEach", "PercentOfEach", GC.Spread.Pivot.PivotTableFieldType.valueField, GC.Pivot.SubtotalType.sum);
  20. var calcFieldsInfo= pivotTable.getCalcFields();
  21. pivotTable.removeCalcField(calcFieldsInfo[i].fieldName);
复制代码


在线示例:
https://demo.grapecity.com.cn/sp ... ulated-field/purejs


image.png853439636.png
image.png897882079.png
image.png677663879.png

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部