全文约2417字;
阅读时间:约6分钟;
听完时间:约12分钟;
这天,统计员小杨接到了上级领导布置的一项任务,需要对《产品销售订单明细表》中的存货进行销售数量汇总。除了数量汇总外,还需要将销售数量转换成销售吨数显示。这项任务本身并不复杂(主要是条件求和),但由于表格格式不规范,让小杨感到无从下手。
原表格的格式如下:A到D列分别记录了“销售日期”、“存货”、“规格型号”以及“销售数量”。其中,“规格型号”一栏填写的是诸如“25kg”、“40kg”这样的信息;而“销售数量”一栏则以文本形式记录,例如“5包”、“10包”等。由于这些数据是以文本形式存在的,因此无法直接进行数据汇总和计算。
解决思路要解决这类问题,需要从源头上进行标准化。一种方法是将“规格型号”和“销售数量”统一填写为数字格式。例如,“25kg”应填写为“25”,而“销售数量”中的单位(如“包”、“件”等)应全部去除,仅保留数字部分。这样,在格式标准化后,就可以使用SUMIFS函数来进行条件汇总求和。
然而,《产品销售订单明细表》的修改权限并不在小杨手中,因此他无法直接对原表进行格式调整或添加辅助列。面对这种情况,小杨决定采用高级函数来处理数据汇总的问题。
他的方案是利用正则表达式函数从不规范的数据列中提取出数字信息,然后通过减负运算将其转换成数值类型。最后,再运用聚合函数进行汇总求和,并实现一键分析转换。在设计过程中,他还预留了数据范围,以便于后续新增数据时能够自动扩展分析。
提取数字为了便于大家理解,我们将每一步操作单独列出,最后再进行合并和聚合。第一步是使用正则表达式函数从数据中提取数字。请录入以下公式:
公式1:=--REGEXP(C2:C3000,"\d+")
公式2:=--REGEXP(D2:D3000,"\d+")
公式解释:
C2:C3000 和 D2:D3000 分别表示“规格型号”列和“销售数量”列的数据范围。
REGEXP 是一个用于从文本字符串中提取符合正则表达式的子字符串的函数。在这里,它用来匹配并提取出所有连续的数字(\d+ 表示一个或多个数字)。
-- 用于将提取出的文本格式的数字转换为数值类型,以便于后续的计算。
通过这两个公式,可以分别从“规格型号”和“销售数量”列中提取出纯数字,并将其转换为数值类型,从而为后续的数据汇总打下基础。
聚合汇总接下来就是用聚合函数来进行聚合汇总数据,在合适的位置录入以下动态数组函数:
=LET(b,B2:C3000,d,D2:D3000,GROUPBY(b,--REGEXP(d,"\d+"),SUM,,0,,d<>""))
公式解释:
参数1(行标签):b,范围为 B2:C3000。这是“销售日期”和“存货”这两列的数据范围,预留了3000行以应对未来可能增加的数据。通过 GROUPBY 函数后,这里的数据会被去重并作为分组的标签。
参数2(值):--REGEXEXTRACT(d, "\d+"),这是从“销售数量”列中提取出数字的部分,并通过双减号 -- 将其转换为数值类型。
参数3(聚合函数):SUM,用于对每个分组中的数据进行求和。
参数4(标头):空,默认不显示标头。
参数5(总计):0,表示不显示总计行。
参数6(排序):-3,针对第3列进行降序排序,正数为升序,负数为降序,数字代表列数。
参数7(筛选条件):d <> "",表示只对“销售数量”列中不为空的单元格进行计算。
这个公式的核心是 GROUPBY 函数,它能够根据提取出的销售数量数字对数据进行分组,并对每个分组应用 SUM 函数进行求和。同时,通过筛选条件确保只有非空的“销售数量”参与运算,从而实现数据的自动汇总和整理。
计算吨数汇总出销售数量后,计算吨数就显得相对简单了,只需要用汇总后的销售数量乘以规格型号中的公斤数,如25,40,再除1000就可以得到吨数了。边上增加一列,并录入标题“销售吨数”,在下方录入函数:
=REGEXP(INDEX(F2#,,2),"\d+")*INDEX(F2#,,3)/1000
公式解释:
F2#:聚合汇总后的结果范围是 F2#,这是一个动态数组,包含了分组后的数据。
INDEX(F2#, , 2):从 F2# 动态数组中提取第二列的数据,这应该是“规格型号”列。
REGEXP(..., "\d+"):使用正则表达式从“规格型号”列中提取出数字部分。
INDEX(F2#, , 3):从 F2# 动态数组中提取第三列的数据,这应该是“销售数量”列。
* ... / 1000:将提取出的“规格型号”中的公斤数与“销售数量”相乘,然后除以1000,得到吨数。
这样,你就可以在新增的“销售吨数”列中自动计算出每个分组的销售吨数
一键公式对于要求比较高的用户,可以使用一键公式进行聚合汇总,把以上公式进行合并后变成:
=LET(F,LET(b,B2:C3000,d,D2:D3000,GROUPBY(b,--REGEXP(d,"\d+"),SUM,,0,-3,d<>"")),HSTACK(F,REGEXP(INDEX(F,,2),"\d+")*INDEX(F,,3)/1000))
公式解释:
F:定义为聚合后的结果。
b:范围为 B2:C3000,表示“销售日期”和“存货”这两列的数据。
d:范围为 D2:D3000,表示“销售数量”这一列的数据。
使用 GROUPBY 函数对数据进行分组和求和。
HSTACK(...):将聚合后的结果 F 与计算出的吨数拼接成水平数组。
INDEX(F, , 2):从 F 中提取第二列的数据,即“规格型号”。
--REGEXP(..., "\d+"):从“规格型号”中提取数字并转换为数值类型。
INDEX(F, , 3):从 F 中提取第三列的数据,即“销售数量”。
* ... / 1000:将“规格型号”中的公斤数与“销售数量”相乘,然后除以1000,得到吨数。
通过这个公式,你可以一步完成数据的聚合汇总,并在旁边新增一列显示计算出的销售吨数。这样设计的一键公式既简洁又高效。
最后总结通过上述步骤,小杨成功地解决了《产品销售订单明细表》中数据格式不规范导致的汇总难题。他采用了一种高效且自动化的方法来处理这一任务,具体步骤包括:
数据提取:利用正则表达式函数 从“规格型号”和“销售数量”列中提取出纯数字,并将其转换为数值类型。这一步骤为后续的数据处理奠定了基础。
数据聚合:使用 GROUPBY 函数对提取出的数据进行分组和求和。通过设置适当的参数,如去重、排序和筛选条件,确保只有非空的“销售数量”参与计算,从而实现了数据的自动汇总。
吨数计算:在汇总后的数据基础上,进一步计算每个分组的销售吨数。通过将“规格型号”中的公斤数与“销售数量”相乘并除以1000,得到最终的吨数结果,并在新增的一列中显示。
一键公式:为了简化操作,小杨设计了一个一键公式,将所有步骤合并在一起。这个公式不仅能够实现数据的自动汇总,还能同时计算出销售吨数,大大提高了工作效率。
综上所述,小杨的解决方案不仅解决了当前的数据汇总问题,还提供了一个可扩展且易于维护的工具。这种方法不仅提高了数据处理的准确性,也减少了手动操作带来的错误风险,为未来类似任务提供了有效的模板。这种灵活而高效的处理方式,有助于提升工作质量和客户满意度。