前言:

​使用excel计算月末一次加权平均法下的出库金额,其实是件很简单的事情。但是,excel也有它的不足之处,不同表之间的计算效率不高,数据量大之后很容易卡顿。纯excel的用户,其实很难养成良好的数据管理习惯。各类数据,甚至是同类数据的不同部分,也经常被分割成一个个分散的数据孤岛。excel一般不能启发用户理解,什么样的表格是存数据,什么样的表格是看数据的——因为excel的自由度太高了,以至于excel的规则就是没有规则。缺少规则,就造成可复用性低,难以进行批量化操作。这就使得全面分析这些数据非常困难,以致于常被搁置。

​ power BI就有它自己的优势,非常容易整合与规范数据,且计算效率非常高。笔者自从接触power BI之后,就有意无意地尽量使用power BI来解决问题。一者,power BI确实是一个值得投入时间学习的工具。二者,学习这个工具不能光靠学习资料对自己大脑的输入,也需要自己练习才能真正掌握。每个可以用来作练习的机会都是宝贵的。如果能将这种练习与解决自己眼前的现实问题合二为一,虽然当下可能效率慢一些,困难一些,时常需要拿回家再花时间仔细琢磨,但久而久之,必将从中受益。


思路:

​ 能不能把简单记录的进销存数据导入power BI进行自动的出库金额计算呢?

​ 观察一张简单的计算月末一次加权平均成本的表格,会发现[平均单价]依赖于上月的[剩余金额]。而[剩余金额]又依赖于本月的[平均单价]。在excel上显示依赖关系的话,就显示成了如上图的这种类似麻花的形状。因为excel是单元格间引用的,所以这里并不会造成循环依赖。power BI使用DAX作为分析语言,DAX的计算是整列整列计算的。如果直接使用DAX模仿excel的计算方法的话,就会出现想要计算A列就需要先算出B列,要算B列又需要先算出A列,这种循环引用,先有鸡还是先有蛋的问题。当然,在导入数据的时候,使用PQ中的M语言是可以模仿excel的计算方法,这个以后再讲。

​ 既然不能模仿excel的计算思路,那么只能另辟蹊径。月末一次加权平均算法,是在假设这月出库的物品里,上月结余的与本月入库的,它们的出库率(各自的出库数/各自的总数)是相同的。假设,上月结余了400件,本月入库了600件。这月仓库一共经手了1000件。然本月出库了700件,总的出库了70%。那么上月结余的400件是出掉了70%,280件;本月入库的600件也是出库了70%,420件。出库产品的金额也就是上月剩余金额的70%,加上本月入库金额的70%。剩余的金额是上月剩余金额的30% + 本月入库金额的30%

​ 我们将剩余件数占仓库本月经手件数的比例,比如上例中的30%,称为保留率。则计算3月份剩余金额的公式可以表示为:
剩余金额3月=剩余金额2月×保留率3月+入库金额3月×保留率3月将(剩余金额2月)替换为(剩余金额1月×保留率2月+入库金额2月×保留率2月),则有:剩余金额3月=(剩余金额1月×保留率2月+入库金额2月×保留率2月)×保留率3月+入库金额3月×保留率3月=剩余金额1月×保留率2月×保留率3月+入库金额2月×保留率2月×保留率3月+入库金额3月×保留率3月再将(剩余金额1月)替换为(0×保留率1月+入库金额1月×保留率1月),则有:剩余金额3月=入库金额1月×保留率1月×保留率2月×保留率3月+入库金额2月×保留率2月×保留率3月+入库金额3月×保留率3月\begin{aligned} &剩余金额_{3月}=剩余金额_{2月}\times保留率_{3月}+入库金额_{3月}\times保留率_{3月}\\ \\ &将(剩余金额_{2月})替换为(剩余金额_{1月}\times保留率_{2月}+入库金额_{2月}\times保留率_{2月}),则有:\\ \\ &剩余金额_{3月}=(剩余金额_{1月}\times保留率_{2月}+入库金额_{2月}\times保留率_{2月})\times保留率_{3月}+入库金额_{3月}\times保留率_{3月}\\ &=剩余金额_{1月}\times保留率_{2月}\times保留率_{3月}+入库金额_{2月}\times保留率_{2月}\times保留率_{3月}+入库金额_{3月}\times保留率_{3月}\\ \\ &再将(剩余金额_{1月})替换为(0\times保留率_{1月}+入库金额_{1月}\times保留率_{1月}),则有:\\ \\ &剩余金额_{3月}=入库金额_{1月}\times保留率_{1月}\times保留率_{2月}\times保留率_{3月}+入库金额_{2月}\times保留率_{2月}\times保留率_{3月}+入库金额_{3月}\times保留率_{3月}\\ \end{aligned} ​剩余金额3月​=剩余金额2月​×保留率3月​+入库金额3月​×保留率3月​将(剩余金额2月​)替换为(剩余金额1月​×保留率2月​+入库金额2月​×保留率2月​),则有:剩余金额3月​=(剩余金额1月​×保留率2月​+入库金额2月​×保留率2月​)×保留率3月​+入库金额3月​×保留率3月​=剩余金额1月​×保留率2月​×保留率3月​+入库金额2月​×保留率2月​×保留率3月​+入库金额3月​×保留率3月​再将(剩余金额1月​)替换为(0×保留率1月​+入库金额1月​×保留率1月​),则有:剩余金额3月​=入库金额1月​×保留率1月​×保留率2月​×保留率3月​+入库金额2月​×保留率2月​×保留率3月​+入库金额3月​×保留率3月​​
​ 至此,我们很容易看出其中的计算规率了,第n月的剩余金额就是前n个月各月的入库金额被当月及以后各月的保留率反复累乘之后的结果的和。
剩余金额n月=∑i=1n(入库金额i月×∏j=in保留率j月)(1)\begin{aligned} &\tag{1}\\ &剩余金额_{n月}=\sum_{i=1}^n (入库金额_{i月}\times\prod_{j=i}^n保留率_{j月}) \end{aligned} ​剩余金额n月​=i=1∑n​(入库金额i月​×j=i∏n​保留率j月​)​(1)

实践:


准备一份简单的出入库数据,全凭自己造。一般入库的时候是有金额的,而出库金额需要到月末,综合本月数据之后计算求得。

​ 将数据导入power BI,在PQ中进行分组整合成各月的入库数量、入库金额、出库数量。并加载到数据模型。过程非常简单,文末已附原文件,不再赘述。

​ 新增计算列,分别计算累计入库数量、累计出库数量、累计剩余数量、上期剩余+本期入库(即:本月的经手数量)、保留率。

累计入库数量 = //这是一个计算列
VAR vNowMonth='F01月末一次加权均法'[年月]
VAR vName='F01月末一次加权均法'[名称]
RETURN
CALCULATE(SUM('F01月末一次加权均法'[入库数量]),'F01月末一次加权均法'[年月]<=vNowMonth&&'F01月末一次加权均法'[名称]=vName,ALL('F01月末一次加权均法')
)
累计出库数量 = //这是一个计算列
VAR vNowMonth='F01月末一次加权均法'[年月]
VAR vName='F01月末一次加权均法'[名称]
RETURN
CALCULATE(SUM('F01月末一次加权均法'[出库数量]),'F01月末一次加权均法'[年月]<=vNowMonth&&'F01月末一次加权均法'[名称]=vName,ALL('F01月末一次加权均法')
)
累计剩余数量 = 'F01月末一次加权均法'[累计入库数量]-'F01月末一次加权均法'[累计出库数量]
//这是一个计算列
上期剩余+本期入库 = 'F01月末一次加权均法'[累计剩余数量]+'F01月末一次加权均法'[出库数量]
//这是一个计算列
保留率 = DIVIDE('F01月末一次加权均法'[累计剩余数量],'F01月末一次加权均法'[上期剩余+本期入库])
//这是一个计算列

​ 接下来就到了本文的关键,使用DAX实现上面的公式(1):

剩余金额 = //这是一个计算列
VAR vNowDate = 'F01月末一次加权均法'[年月]
VAR vName='F01月末一次加权均法'[名称]
RETURN
//使用SUMX实现累加∑,对单个产品首月至当前月的行进行计算后累加
SUMX(//使用Filter获取表格中,当前年月及以前的所有关于本产品的行(即首月至当前月)FILTER(ALL('F01月末一次加权均法'),'F01月末一次加权均法'[年月]<=vNowDate&&'F01月末一次加权均法'[名称]=vName),VAR vNowDateInner= 'F01月末一次加权均法'[年月]//将首月至当前月中,正在被迭代到的那个月储存为变量vNowDateInnerRETURN'F01月末一次加权均法'[入库金额]*  //各月入库金额PRODUCTX(  //使用PRODUCTX实现累乘 ∏,累乘的内容是,前面正在被迭代到的那个被储存为变量vNowDateInner的那个月,至当前月的所有保留率FILTER('F01月末一次加权均法','F01月末一次加权均法'[年月]>=vNowDateInner&&'F01月末一次加权均法'[年月]<=vNowDate&&'F01月末一次加权均法'[名称]=vName),'F01月末一次加权均法'[保留率])
)

​ 可以看到计算结果与excel的计算结果一致:

​ 另外,再提供一个度量值的版本,思路同上,不再赘述。

剩余金额.月末一次加权平均.月末.度量值 =
VAR vNowDate = MAX('F01月末一次加权均法'[年月])
RETURN
CALCULATE(SUMX('F01月末一次加权均法',VAR vNowDateInner= 'F01月末一次加权均法'[年月]RETURN'F01月末一次加权均法'[入库金额]*PRODUCTX(FILTER('F01月末一次加权均法','F01月末一次加权均法'[年月]>=vNowDateInner),'F01月末一次加权均法'[保留率])),'F01月末一次加权均法'[年月]<=vNowDate,ALL('D00日期表')
)

附件&预告

​ 下期更新 《DAX实现先进先出法》或者 《使用PQ获取连续数日完整的中国银行外汇牌价》

​ 文件下载地址:[坚果云] [百度网盘]

DAX计算月末一次加权平均出库金额相关推荐

  1. mysql入库出库触发器_oracle 触发器 实现出入库

    用语言实现 好处: 1.可以减少对数据库的访问. 2.可移植性好. 坏处: 1.操作起来考虑的东西较多,修改一处就要修改别一处.也就是说是相互关联的.如果少改了某一处,很可能使数据不一致. 用触发器实 ...

  2. 用友T+软件出库本对不上?

    突然发现,全月平均法的出库成本,每个单据都不同." 按会计计算标准,全月平均法就是要全月统一的出库成本的 存货明细账,期初结存成本是一个数,本期出库二笔成本都不一样,一个月有三个成本金额,是 ...

  3. 关于材料出库单的金额问题

    1.默认情况下是没有金额的 2.成本计算以后,会自动回写金额到供应链的出库单上,但是取消成本计算时,金额依然保留,但会重新计算.当供应链中出库单有金额时,成本计算时无法手工改,当无金额时可以手工进行填 ...

  4. 蒙牛SAP实施项目-——“交货、派车、出库单”模块

    一.功能实现 交货.派车.出库单信息:获取提货时间.提货数量.预计到货日期.司机信息.车牌号.出库批次与数量等关键信息 交货单:见图1,是交货单模块实现界面. 图1 交货单模块 (1)交货单查询:预报 ...

  5. 根据入库时间和出库时间计算库存

    工坊的小伙伴们大家好,我们经常遇到一种分析场景:根据每一条产品的入库时间和出库时间计算某个时点的库存数量.今天我们将专门解决这个问题. 01 数据准备 库存示意数据如下,包含每条产品的产品名称.入库日 ...

  6. 127_Power PivotPower BI DAX计算订单商品在库时间(延伸订单仓储费用)

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 前面已经写过一个先进先出的库龄案例,在业务发生又有这样一个需求:先进先出前提,需要按照订单计算每个商品在库时间, ...

  7. 用计算列实现移动加权平均算法

    昨天有人让我帮忙写个算移动加权平均的SQL语句,我想了半天终于写出来正确的了.现在发出来供大家参考.讨论. if OBJECT_ID('tb') is not null drop table tb i ...

  8. excel表头_如何用Excel制作出库入库表

    有一些工作要求我们制作一个出库入库的记录表格,那么今天这篇文章就教大家如何用Excel制作出库入库表. 首先我们在Excel表格中框出一些表格,作为这个表的整体结构: 然后如图所示,用合并居中按钮调节 ...

  9. 29 WM配置-策略-出库策略2-定义“紧急FIFO”策略(Stringent FIFO)

    业务背景:出库策略之2 定义"紧急FIFO"策略,从字面上理解就是更加严谨的FIFO.上面我们了解到了一个存储类型下的FIFO策略<28 WM配置-策略-出库策略1-定义FI ...

  10. 126_Power BI中使用DAX计算股票RSI及股票均线相关

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 前些日子,有朋友在交流股票RSI用DAX处理的问题,由于RSI股票软件的算法几乎都是需要用到股票从上市第一天开始 ...

最新文章

  1. 计算机视觉及机器学习论文、源代码合集
  2. c语言的多线程,如何用C语言实现多线程
  3. 【DevExpress v17.2新功能预告】增强ASP.NET TreeList
  4. 【渝粤教育】电大中专中医基础知识 (2)作业 题库
  5. 图像特征 可视化_使用卫星图像可视化建筑区域
  6. canvas笔记-lineJoin和miterLimit的使用
  7. 靠谱测试人员需具备解决问题能力
  8. 《R语言数据挖掘:实用项目解析》——1.9 循环原理——repeat循环
  9. 计算机网络使用双绞线连接时,计算机网络技术期末试卷A
  10. 2008是中国的奥运年
  11. Ubuntu中推荐使用的读代码软件
  12. 论坛模块_实现功能2_实现显示版块列表与显示单个版块的功能
  13. Pandas参考手册、常用函数及方法汇总
  14. SwiftyJSON 对网络请求来的数据进行解析或者转为modul
  15. 爬取汽车之家所有车型,价格,配置
  16. 电脑重装系统后,重启时遇到错误,报错需要重新启动,并重新安装系统
  17. 设计一个长方形类 java_用java设计一个长方形类,成员变量包括长和宽.方法:计算面积和周长,有相应的set和get方法...
  18. 科技公司产品经理和技术总监哪个更重要?
  19. CSS入门教程——HTML选择器
  20. 九城卷入仙境传说2网游私服风波

热门文章

  1. 贴吧一键签到机selenium自动化
  2. Uniswap进化之路
  3. Access update语句 提示 操作必须使用一个可更新的查询
  4. Afc2add与AppSync
  5. 戴尔微型计算机7060,戴尔 Dell OptiPlex 7060 微型机 :1 升的迷你小钢炮
  6. linux实时监测cpu温度,Linux 监控CPU 温度
  7. 常见浏览器兼容性问题及解决办法总结
  8. 为了草根用户的创新OPDA team团队访谈录
  9. 诺基亚3090微信java,适合Asha系列,微信登陆诺基亚S40平台
  10. 窃取ClientKey