ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

求助:取差额绝对值最小数对应数的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-5-27 17:22 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
详情见附件,这个可以用PQ解决吗

人.zip

16.73 KB, 下载次数: 12

TA的精华主题

TA的得分主题

发表于 2022-5-27 17:33 | 显示全部楼层
下班了。。。写下思路:
拆分为两个表
1,职工编码,均值 放一个表
2,薪级薪档对应的L00~L15,放一个表

表1 左外连接查询 表2 , 展开
计算差值,筛选最小值确定薪级

TA的精华主题

TA的得分主题

发表于 2022-5-27 18:41 | 显示全部楼层
let
    源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
    list1 = List.Transform(Table.ToRows(源), each  List.Transform(List.Skip(_,3),(x)=>Number.Round(Number.Abs(x-_{1}),2))),
    pot = List.Transform(list1,each List.PositionOf(_,List.Min(_))),
    已添加自定义 = Table.AddColumn(源, "结果", each List.Skip(Table.ColumnNames(源),3){pot{List.PositionOf(源[职工编码],[职工编码])}})

in
  已添加自定义

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-5-27 21:02 | 显示全部楼层
dambcer 发表于 2022-5-27 18:41
let
    源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
    list1 = List.Transform(Table.ToRo ...

谢谢大神,解了燃眉之急,万分感谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-5-28 10:28 | 显示全部楼层
dambcer 发表于 2022-5-27 18:41
let
    源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
    list1 = List.Transform(Table.ToRo ...

数据4000+多条,速度就有点慢了,有没有更快的

TA的精华主题

TA的得分主题

发表于 2022-5-28 10:58 | 显示全部楼层
yyyf8283 发表于 2022-5-28 10:28
数据4000+多条,速度就有点慢了,有没有更快的

白嫖还这多要求啊,没有快的了

TA的精华主题

TA的得分主题

发表于 2022-5-28 11:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
image.png
  1. let
  2.     Source = Table.CombineColumns(
  3.         Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
  4.         {"均值","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15"},
  5.         (Result)=>
  6.         let
  7.         a = Result{0},
  8.         b = List.Range(Result,1),
  9.         c = List.Sum(
  10.             List.Transform(
  11.                 {0..15},each
  12.                 if b{_} is null
  13.                 then null
  14.                 else
  15.                     if (a>=b{_} and b{_+1} is null )
  16.                     then _
  17.                     else
  18.                         if (a>=b{_} and a< b{_+1} )
  19.                         then _
  20.                         else null
  21.             )
  22.         )
  23.         in "薪资"&Text.PadStart(Text.From(c),2,"0") ,
  24.         "Result")
  25. in
  26.     Source
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-5-28 14:35 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

C:\Users\Administrator.DESKTOP-73R2N0A\Desktop\360截图20220528143248521.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-5-28 14:36 | 显示全部楼层
本帖最后由 yyyf8283 于 2022-5-28 14:50 编辑

显示:找不到表的15列呢,已解决,把字段名改成0-15即可,谢谢大神
经测试,速度确实快了,基本是秒出,但很多人的统计还是出错了,例如职工编码12804统计出来薪资0,但是按照规则应该是1,这种情况很普遍

TA的精华主题

TA的得分主题

发表于 2022-5-28 15:38 | 显示全部楼层
逻辑弄错了,以为是在>n, 小于n+1的范围就是n,更改下逻辑就OK了
image.png
  1. = Table.CombineColumns(
  2.         Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
  3.         {"均值","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15"},
  4.         (Result)=>let
  5.         a = Result{0}, b = List.Range(Result,1),
  6.         c = List.Sum(
  7.             List.Transform(
  8.                 {0..15},each if b{_} is null  then null
  9.                 else
  10.                     if (a>=b{_} and b{_+1} is null ) then _
  11.                     else
  12.                         if (a>=b{_} and a< b{_+1} )  then if Number.Abs(b{_}-a)>Number.Abs(b{_+1}-a) then _+1 else _
  13.                         else null  )  )
  14.         in "L"&Text.PadStart(Text.From(c),2,"0") , "Result")
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 09:25 , Processed in 0.034139 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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