[已解决] 出现NULL值就不能计算

  [复制链接]
fwd | 2021-2-18 23:26:59 | 显示全部楼层
编辑查询“出库”,高级编辑器,覆盖原来的代码就可以。


按您说的,复制粘贴代码,提示:Expression.Error: 求值期间遇到循环引用
回复

使用道具 举报

ameng | 2021-2-18 23:30:59 | 显示全部楼层
按您说的,复制粘贴代码,提示:Expression.Error: 求值期间遇到循环引用


说错了,应该编辑“库存”
回复

使用道具 举报

HONDA | 2021-2-18 23:36:00 | 显示全部楼层
说错了,应该编辑“库存”


粘贴到库存就没有问题。我仔细看了,入库查询和出库查询您没有改动。只是在库存查询动了很多,首先是第一步“源”,我看见代码是:Table.ReplaceValue(入库&出库,"","",(x,y,z)=>if x=null then 0 else x,Table.ColumnNames(入库&出库)) 这句代码叫什么查询?也就是说我如何把入库和出库合在一起来建立查询(或叫建立链接)?依次类推,Custom1和Custom2这两步又是怎么查询的呢?请赐教!!谢谢!!
回复

使用道具 举报

简单爱你 | 2021-2-18 23:39:00 | 显示全部楼层
先构建一个包含全部"入库表"和"出库表"产品名称的表,作为"库存"查询的源表,然后与"入库"和"出库"表先后进行合并查询,之后对出入库数量列里面的null值进行替换,最后添加""库存数量"的自定义列,除构建"库存"表源外基本上都是界面操作
let
  源 = Table.FromColumns({List.Union({入库[产品名称],出库[产品名称]})},{"产品名称"}),
  合并的查询 = Table.NestedJoin(源,{"产品名称"},入库,{"产品名称"},"入库",JoinKind.LeftOuter),
  #"展开的“入库”" = Table.ExpandTableColumn(合并的查询, "入库", {"入库数量"}, {"入库数量"}),
  合并的查询1 = Table.NestedJoin(#"展开的“入库”",{"产品名称"},出库,{"产品名称"},"出库",JoinKind.LeftOuter),
  #"展开的“出库”" = Table.ExpandTableColumn(合并的查询1, "出库", {"出库数量"}, {"出库数量"}),
  替换的值 = Table.ReplaceValue(#"展开的“出库”",null,0,Replacer.ReplaceValue,{"入库数量", "出库数量"}),
  库存数量= Table.AddColumn(替换的值, "库存数量", each [入库数量]-[出库数量])
in
  库存数量
回复

使用道具 举报

着迷 | 2021-2-18 23:44:00 | 显示全部楼层
先构建一个包含全部"入库表"和"出库表"产品名称的表,作为"库存"查询的源表,然后与"入库"和"出库"表先后进行 ...


谢谢您的回复,受教了!!
回复

使用道具 举报

zai | 2021-2-18 23:52:00 | 显示全部楼层
感谢各位老师的帮助!学到了不少的东西。我现在用追加查询---将查询追加新查询来解决。
第一步:入库
let
  源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
  更改的类型 = Table.TransformColumnTypes(源,{{"日期", type datetime}, {"产品名称", type text}, {"入库数量", Int64.Type}}),
  删除的列 = Table.RemoveColumns(更改的类型,{"日期"}),
  分组的行 = Table.Group(删除的列, {"产品名称"}, {{"入库数量", each List.Sum([入库数量]), type number}})
in
  分组的行
第二步:出库
let
  源 = Excel.CurrentWorkbook(){[Name="表2"]}[Content],
  更改的类型 = Table.TransformColumnTypes(源,{{"日期", type datetime}, {"产品名称", type text}, {"出库数量", Int64.Type}}),
  删除的列 = Table.RemoveColumns(更改的类型,{"日期"}),
  分组的行 = Table.Group(删除的列, {"产品名称"}, {{"出库数量", each List.Sum([出库数量]), type number}})
in
  分组的行
第三步,通过追加查询建立一个新查询--库存
let
  源 = Table.Combine({入库, 出库}),
  分组的行 = Table.Group(源, {"产品名称"}, {{"入库数量", each List.Sum([入库数量]), type number}, {"出库数量", each List.Sum([出库数量]), type number}}),
  已添加自定义 = Table.AddColumn(分组的行, "库存数量", each (if[入库数量]=null then 0 else [入库数量])-(if[出库数量]=null then 0 else [出库数量]))
in
  已添加自定义

我举了三个例子:一个产品有入库有出库,一个产品有入库无出库,一个产品无入库有出库。查询均正确。请各位老师再帮我检查一下,有什么问题没有。谢谢

11050111814365.rar (44.07 KB, 下载次数: 0)
回复

使用道具 举报

lisir | 2021-2-18 23:55:01 | 显示全部楼层
Table.Combine加分组的思路很好,简易库存统计不考虑时间因素的话,这样应该没什么问题了,只是自定义列里面对null值的判断有点绕,其实最初你的问题也就是一个null值参与计算的问题,替换成0就行了,界面操作,简单快捷,不需要这么复杂,个人意见,仅供参考
回复

使用道具 举报

阿九 | 2021-2-19 00:00:01 | 显示全部楼层
Table.Combine加分组的思路很好,简易库存统计不考虑时间因素的话,这样应该没什么问题了,只是自定义列里面对 ...


您的建议非常好,刚开始我是想解决null值问题,123-456789 朋友帮我写了一个公式。我只想问一下:1、当数据量大时,运行速度会不会慢?2、这个库存,我得加上金额,还要求成本价的。会扩展一下。主要是想通过进销存来练习PQ查询,达到掌握的目的。
回复

使用道具 举报

caicool | 2021-6-14 07:35:09 来自手机 | 显示全部楼层
这么强,支持楼主,佩服
回复

使用道具 举报

mdqzj | 2021-7-14 14:25:52 来自手机 | 显示全部楼层
报告!别开枪,我就是路过来看看的。。。
回复

使用道具 举报

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

本版积分规则