[已解决] 车辆里程数求解-PP或PQ求解

  [复制链接]
查看252367 | 回复182 | 2021-2-18 23:14:48 | 显示全部楼层 |阅读模式
工作中加油登记车辆里程表数,要计算出当前行驶里程数,该用哪个公式呢?帮忙写一下

11099111902092.rar (55.36 KB, 下载次数: 0)
回复

使用道具 举报

wsb | 2021-2-18 23:22:49 | 显示全部楼层
车辆里程数求解PQ解
11099111902093.rar (22.24 KB, 下载次数: 0)
回复

使用道具 举报

srici_yb | 2021-2-18 23:24:49 | 显示全部楼层
  1. let

  2.   源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],

  3.   更改的类型 = Table.TransformColumnTypes(源,{{"日期", type date}, {"牌照号", type text}, {"加油金额", Int64.Type}, {"单价", type number}, {"行驶里程表数", Int64.Type}, {"道桥费", Int64.Type}}),

  4.   Custom1 = Table.AddColumn(更改的类型,"里程数",each [行驶里程表数]-List.Last(Table.SelectRows(更改的类型,(x)=>x[牌照号]=[牌照号] and x[日期]<[日期] and x[行驶里程表数]null)[行驶里程表数]))

  5. in

  6.   Custom1
复制代码
回复

使用道具 举报

kangba | 2021-2-18 23:29:49 | 显示全部楼层
我不喜欢用Table.SelectRows,数据大的时候能憋死你。
回复

使用道具 举报

lqs518 | 2021-2-18 23:38:49 | 显示全部楼层
供参考,用List.Accumulate。这有点类似累计求和的逆过程。
  1. let

  2.   源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],



  3.   替换 = Table.ReplaceValue(源,null,0,Replacer.ReplaceValue,{"行驶里程表数"}), //把行驶里程表数这一列中的null替换为0



  4.   变形 = let L = Table.ToRecords(替换),

  5.      f = (x,y)=>List.PositionOf(x,y,2,each [牌照号] )

  6.     in List.Accumulate(L , { {},{} },

  7.           (s,c)=>{ s{0}&{c}, //相当于一个动态引用的区域,类似于工作表函数中的A$1:A1

  8.              s{1}&{ c & [ l = f(L,c),  //计算当前车牌号在源表牌照号这一列中出现的所有位置

  9.                   p = List.Count(f(s{0},c)),//计算当前车牌号在当前记录之前出现的次数

  10.                   i =[ 里程数= if p=0 then null

  11.                       else L{l{p}}[行驶里程表数]-L{l{p-1}}[行驶里程表数] ]

  12.                   ] [i] } } ){1},

  13.   结果 = Table.FromRecords(变形)

  14. in

  15.   结果
复制代码
11099111902091.jpg
回复

使用道具 举报

ldex | 2021-2-18 23:43:50 | 显示全部楼层
不明白大家为为什么不用数组公式?只需要找出本车上一次加油的里程数就可以了,数组公式很方便。
*示例的最后一行,应该不是作者想要的结果吧。
回复

使用道具 举报

DarkRaven | 2021-2-18 23:44:50 | 显示全部楼层
不好意思,也是Table.SelectRows() 做的
11099111902094.rar (58.97 KB, 下载次数: 0)
回复

使用道具 举报

山人2000 | 2021-2-18 23:52:50 | 显示全部楼层
供参考,用List.Accumulate。这有点类似累计求和的逆过程。


非常感谢你的帮助,还得再麻烦您,如果没有里程表数,里程数让它显示为“0”。“-5300”那为“0”,“6000”那为“700”,这个怎么改呢,多谢!!
回复

使用道具 举报

szjacky | 2021-2-18 23:57:50 | 显示全部楼层
非常感谢你的帮助,还得再麻烦您,如果没有里程表数,里程数让它显示为“0”。“-5300”那为“0”,“600 ...


行驶里程表数是空是什么意思?车子大修了,计数表清零了。
你参考7楼的吧,Table.SelectRows可以用的,没那么恐怖。
List.Accumulate里边写条件也可以实现,就搞复杂了,没有Table.SelectRows直接。
回复

使用道具 举报

x002 | 2021-2-19 00:00:50 | 显示全部楼层
非常感谢你的帮助,还得再麻烦您,如果没有里程表数,里程数让它显示为“0”。“-5300”那为“0”,“600 ...


你叫2楼的兄弟帮你改一下吧,我测试了一下他的代码效率最高。
1万行很快出结果。
我的效率最低,翻车了。。。哈哈。。。
回复

使用道具 举报

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

本版积分规则