ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 出现NULL值就不能计算

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-13 12:15 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
wdx223 发表于 2018-12-13 11:34
编辑查询“出库”,高级编辑器,覆盖原来的代码就可以。

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

TA的精华主题

TA的得分主题

发表于 2018-12-13 13:39 | 显示全部楼层
zx168 发表于 2018-12-13 12:15
按您说的,复制粘贴代码,提示:Expression.Error: 求值期间遇到循环引用

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

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-13 14:19 | 显示全部楼层
wdx223 发表于 2018-12-13 13:39
说错了,应该编辑“库存”

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

TA的精华主题

TA的得分主题

发表于 2018-12-13 19:00 | 显示全部楼层
本帖最后由 江南月 于 2018-12-13 19:03 编辑

先构建一个包含全部"入库表"和"出库表"产品名称的表,作为"库存"查询的源表,然后与"入库"和"出库"表先后进行合并查询,之后对出入库数量列里面的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
    库存数量

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-13 21:28 | 显示全部楼层
江南月 发表于 2018-12-13 19:00
先构建一个包含全部"入库表"和"出库表"产品名称的表,作为"库存"查询的源表,然后与"入库"和"出库"表先后进行 ...

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

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-13 21:34 | 显示全部楼层
感谢各位老师的帮助!学到了不少的东西。我现在用追加查询---将查询追加新查询来解决。
第一步:入库
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
    已添加自定义

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

简易库存.rar

44.07 KB, 下载次数: 8

TA的精华主题

TA的得分主题

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

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-14 08:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
江南月 发表于 2018-12-13 22:48
Table.Combine加分组的思路很好,简易库存统计不考虑时间因素的话,这样应该没什么问题了,只是自定义列里面对 ...

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

本版积分规则

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

GMT+8, 2024-3-29 06:50 , Processed in 0.053084 second(s), 8 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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