ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3561|回复: 8

[求助] 如何用Query实现此sumif函数的隔列汇总功能

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-4-18 00:41 | 显示全部楼层 |阅读模式
sumif有一个如下的功能,实现隔列分类统计的功能。最终希望能将1月到3月的计划和实际分别汇总。用函数=SUMIF($C$3:$H$3,I$3,$C4:$H10)
能够实现此功能。



但是实际情况因为数据量较大,只能用Query来实现。且碰到这类的表格源数据有合并格子的问题,给数据清洗带来难度。

请问此功能用Query如何实现?



sumif函数实现方法

sumif函数实现方法

隔列统计.rar

9.22 KB, 下载次数: 25

Query方式如何实现

TA的精华主题

TA的得分主题

发表于 2019-4-18 08:04 | 显示全部楼层
我觉得只能拆能透视表在弄。

TA的精华主题

TA的得分主题

发表于 2019-4-18 10:20 | 显示全部楼层
  1. let
  2.     Source = Excel.CurrentWorkbook(){[Name="表2"]}[Content],
  3.     Custom1 = Table.PromoteHeaders(Table.Transpose(Table.CombineColumns(Table.FillDown(Table.Transpose(Source),{"Column1"}),{"Column1","Column2"},each Text.Combine(_,"-"),"x"))),
  4.     Custom2 = Table.AddColumn(Custom1,"合计-计划",each List.Sum(List.Transform({2..Table.ColumnCount(Custom1)-1},(x)=>if Text.Contains(Table.ColumnNames(Custom1){x},"计划") then Record.FieldValues(_){x} else 0))),
  5.     Custom3 = Table.AddColumn(Custom2,"合计-实际",each List.Sum(List.Transform({2..Table.ColumnCount(Custom1)-1},(x)=>if Text.Contains(Table.ColumnNames(Custom2){x},"实际") then Record.FieldValues(_){x} else 0)))
  6. in
  7.     Custom3
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-4-18 10:35 | 显示全部楼层
201228 发表于 2019-4-18 08:04
我觉得只能拆能透视表在弄。

因为同时有10个这样的excel文件,需要从这相同格式的10个文件中抓取数据,实现汇总。还是用Power Query来实现感觉靠谱一点。

您说的透视表怎么做法?

TA的精华主题

TA的得分主题

发表于 2019-4-18 12:31 | 显示全部楼层
本帖最后由 libo5563 于 2019-4-18 12:45 编辑

2维表转为一维表再透视,query整理数据,pivot做报表字段计算,如果不用pivot就需要在query里再做一步,将实际和计划列逆透视下来,考虑有可能增加增加别的月份列,query里处理列的增加变化会比较麻烦,所以放pivot里用计算字段方法处理,

隔列统计.rar

71.6 KB, 下载次数: 21

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-4-18 21:01 | 显示全部楼层
let
    源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
    自定义1 = 源,
    已添加自定义 = Table.AddColumn(自定义1, "自定义", each Table.FromRows({List.Transform(List.Zip(List.Split(List.Skip(Record.ToList(_),2),2)),each List.Sum(_))},{"计划总计","实际总计"}) ),
    #"展开的“自定义”" = Table.ExpandTableColumn(已添加自定义, "自定义", {"计划总计", "实际总计"}, {"计划总计", "实际总计"})
in
    #"展开的“自定义”"

TA的精华主题

TA的得分主题

发表于 2019-4-18 21:04 | 显示全部楼层
本帖最后由 whjpbh 于 2019-4-18 21:07 编辑



let

    源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
    自定义1 = 源,
    已添加自定义 = Table.AddColumn(自定义1, "自定义", each Table.FromRows({List.Transform(List.Zip(List.Split(List.Skip(Record.ToList(_),2),2)),each List.Sum(_))},{"计划总计","实际总计"}) ),
    #"展开的“自定义”" = Table.ExpandTableColumn(已添加自定义, "自定义", {"计划总计", "实际总计"}, {"计划总计", "实际总计"})
in
    #"展开的“自定义”"

隔列统计.rar

16.19 KB, 下载次数: 11

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-4-18 21:41 | 显示全部楼层
snipaste_20190418_213350.jpg 两个建议
1. Excel公式的思路虽然灵活,但无法处理大数据,而且从源头上这种表格也不是结构化的数据存储方式,如果要转BI,从源头上就要尽可能避免使用这种结构。
2.如果用了这种结构怎么办。用PQ处理一下就可以了,上面已经有两位给了很好的方法,我想补充的是,即使你不会写那些复杂的公式,用鼠标点一点也能完成这个任务,上面的结果就是鼠标操作的,处理成这个样子就可以了。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-5-13 12:00 | 显示全部楼层
wangjianwx 发表于 2019-4-18 10:35
因为同时有10个这样的excel文件,需要从这相同格式的10个文件中抓取数据,实现汇总。还是用Power Query来 ...

我就知道sql语言能做,具体的还不代码怎么写。 不过现在学了pq 知道怎么弄了。不sql省不少事
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-3-29 15:05 , Processed in 0.118642 second(s), 12 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表