155_模型_Power BI & Power Pivot 进销存之安全库存

一、背景

谈进销存的概念时,我们也需要提及另外一个概念:安全库存

库存周转在理想的状态下是做到零库存,但是在内部的资金占用及到货周期不确定和外部客户的现货率满足等诸多情况平衡下,想做到零库存几乎不可能。在这种平衡状态就有了安全库存;以上为笔者在平常的生产生活中感知。

在这里我们首先引入安全库存的数学公式:

说明

分布按照理想状态的标准正太分布,安全库存仅作为参考点,实际生产中需要加入业务的理解,进行调整。

数学公式转变为 DAX 公式:SS = z * SQRT ( σd ^ 2 * μL + σL ^ 2 * μd ^ 2 )

SS:安全库存(Safe Stock)。

z : 服务水平系数,服务水平(现货率)为 0.95,在标准正太分布下查表可得,对应的 z = 1.65。

L : 采购提前期,本案例中对应入库间隔天数。

μL: 平均提前期。

σL: 提前期 L 的标准差。

d : 日出库数量。

μd: 平均日出库数量。

σd: 日出库量 d 的标准差。

标准差公式使用:STDEVX.S

更多安全库存的信息参考:

https://baike.baidu.com/item/安全库存

Power BI 实际效果链接:

https://demo.jiaopengzi.com/pbi/155-full.html

二、DAX模型

1、数据表及关系

维度表:01_Calendar; T01_门店表; T00_产品表

事实表:T04_订单主表; T05_订单子表

度量值:00_Measure

辅助表:04_RefreshTime

计算表:02_Row

具体字段和关系如下图:

详细数据字段介绍见:

https://jiaopengzi.com/1435.html

2、度量值

度量值一览图

接下来我们把几个关键的度量值放上来。

0001_产品数量_入库

  1. 0001_产品数量_入库 =
  2. SUM ( 'T03_入库信息表'[F_02_入库产品数量] )

0002_产品数量_出库

注意出库是需要按照订单主表里面的送货日期来计算,所以需要使用 USERELATIONSHIP 激活关系。

  1. 0002_产品数量_出库 =
  2. CALCULATE (
  3. SUM ( 'T05_订单子表'[F_05_产品销售数量] ),
  4. USERELATIONSHIP ( 'T04_订单主表'[F_04_送货日期], '01_Calendar'[C01_Dates] )
  5. )

0003_产品数量_库存_期末

关于库存的计算,给大家提供一个思路。库存就是当前时间点的历史累计入库与历史累计出库的差异。我们用一张图来表示。

在这样的思路下,我们也就很好使用 DAX 写进销存里面的库存的度量值了。

当然库存又会根据不同的时间点的状态分为期初库存和期末库存,关于期初和期末智能库存的度量值可以在我的课程里面学习。

https://jiaopengzi.com/video/video-101?rkvid=100

  1. 0003_产品数量_库存_期末 =
  2. VAR DATE_START0 =
  3. CALCULATE ( FIRSTDATE ( '01_Calendar'[C01_Dates] ), ALL ( '01_Calendar' ) )
  4. VAR DATE_END0 =
  5. LASTDATE ( '01_Calendar'[C01_Dates] )
  6. VAR DATE_TABLE0 =
  7. DATESBETWEEN ( '01_Calendar'[C01_Dates], DATE_START0, DATE_END0 )
  8. VAR IN0 =
  9. CALCULATE ( [0001_产品数量_入库], DATE_TABLE0 )
  10. VAR OUT0 =
  11. CALCULATE ( [0002_产品数量_出库], DATE_TABLE0 )
  12. VAR DATE_START_ABS0 =
  13. CALCULATE ( LASTDATE ( 'T04_订单主表'[F_04_送货日期] ), ALL () ) //兼容显示到事实表最后日期。
  14. RETURN
  15. IN0 - OUT0
  16. //IF(DATE_START_ABS0>=DATE_END0,IN0 - OUT0,BLANK())

0004_产品数量_安全库存

本案例里面最重要的度量值;如果对中间过程理解有困难的,可以使用我们为大家准备的 Excel 辅助校验表来体会。

具体使用案例附件 Power BI 文件中的第二页《P2校验数据》导出对应的数据,在附件 Excel 《安全库存步骤分解》中分布体会。

Excel 里面有公式方便理解。

  1. 0004_产品数量_安全库存 =
  2. /*
  3. 分布按照理想状态的标准正太分布,安全库存仅作为参考点,实际生产中需要加入业务的理解,进行调整。
  4. SS = z * SQRT ( σd ^ 2 * μL + σL ^ 2 * μd ^ 2 )
  5. SS:安全库存(Safe Stock)。
  6. z : 服务水平系数,服务水平(现货率)为 0.95,在标准正太分布下对应的 z = 1.65。
  7. L : 采购提前期,本案例中对应入库间隔天数。
  8. μL: 平均提前期。
  9. σL: 提前期 L 的标准差。
  10. d : 日出库数量。
  11. μd: 平均日出库数量。
  12. σd: 日出库量 d 的标准差。
  13. */
  14. VAR N = [02_ROW 值]//默认30天
  15. VAR DATE_END0 =
  16. LASTDATE ( '01_Calendar'[C01_Dates] )
  17. VAR DATE_START0 =
  18. DATEADD ( DATE_END0, - N + 1, DAY ) // 注意不包含边界。
  19. VAR DATE_Table0 =
  20. DATESBETWEEN ( '01_Calendar'[C01_Dates], DATE_START0, DATE_END0 )
  21. VAR T01 =
  22. CALCULATETABLE ( 'T03_入库信息表', DATE_Table0 )
  23. VAR T02 =
  24. SUMMARIZE (
  25. T01,
  26. '01_Calendar'[C01_Dates],
  27. 'T00_产品表'[F_01_产品编号],
  28. 'T01_门店表'[F_01_门店编号],
  29. "@入库", [0001_产品数量_入库]
  30. )
  31. VAR T03 =
  32. SUMMARIZE (
  33. T02,
  34. [F_01_产品编号],
  35. [F_01_门店编号],
  36. "@μL",
  37. VAR P0 = [F_01_产品编号]
  38. VAR M0 = [F_01_门店编号]
  39. VAR T_FILTER =
  40. FILTER ( T02, [F_01_产品编号] = P0 && [F_01_门店编号] = M0 )
  41. VAR DATE_MAX =
  42. MAXX ( T_FILTER, [C01_Dates] )
  43. VAR DATE_MIN =
  44. MINX ( T_FILTER, [C01_Dates] )
  45. VAR DAY_DIFF =
  46. DATEDIFF ( DATE_MIN, DATE_MAX, DAY )
  47. VAR T_ROWS =
  48. COUNTROWS ( T_FILTER ) - 1 // 注意去除边界减 1 。
  49. RETURN
  50. DIVIDE ( DAY_DIFF, T_ROWS, 0 ),
  51. "@σL",
  52. VAR P0 = [F_01_产品编号]
  53. VAR M0 = [F_01_门店编号]
  54. VAR T_FILTER =
  55. FILTER ( T02, [F_01_产品编号] = P0 && [F_01_门店编号] = M0 )
  56. VAR T_INDEX =
  57. SUBSTITUTEWITHINDEX (
  58. ADDCOLUMNS ( T_FILTER, "@date", [C01_Dates] ),
  59. "@INDEX", T_FILTER,
  60. [C01_Dates], ASC
  61. )
  62. VAR T_INDEX_N =
  63. ADDCOLUMNS (
  64. T_INDEX,
  65. "@N",
  66. VAR INDEX0 = [@INDEX]
  67. VAR T_1 =
  68. FILTER ( T_INDEX, [@INDEX] = INDEX0 - 1 )
  69. VAR DATE_1 =
  70. MAXX ( T_1, [@date] )
  71. VAR N0 =
  72. DATEDIFF ( DATE_1, [@date], DAY )
  73. RETURN
  74. N0
  75. )
  76. VAR T_INDEX_N_NOT_BLANK =
  77. FILTER ( T_INDEX_N, [@N] <> BLANK () )
  78. RETURN
  79. IFERROR ( STDEVX.S ( T_INDEX_N_NOT_BLANK, [@N] ), 0 )
  80. )
  81. VAR T11 =
  82. CALCULATETABLE (
  83. 'T05_订单子表',
  84. DATE_Table0,
  85. USERELATIONSHIP ( 'T04_订单主表'[F_04_送货日期], '01_Calendar'[C01_Dates] )
  86. ) //送货日期需要激活关系。
  87. VAR T12 =
  88. SUMMARIZE (
  89. T11,
  90. '01_Calendar'[C01_Dates],
  91. 'T00_产品表'[F_01_产品编号],
  92. 'T01_门店表'[F_01_门店编号],
  93. "@出库", [0002_产品数量_出库]
  94. )
  95. VAR T13 =
  96. SUMMARIZE (
  97. T12,
  98. [F_01_产品编号],
  99. [F_01_门店编号],
  100. "@μd",
  101. VAR P0 = [F_01_产品编号]
  102. VAR M0 = [F_01_门店编号]
  103. VAR T_FILTER =
  104. FILTER ( T12, [F_01_产品编号] = P0 && [F_01_门店编号] = M0 )
  105. VAR AVG0 =
  106. AVERAGEX ( T_FILTER, [@出库] )
  107. RETURN
  108. AVG0,
  109. "@σd",
  110. VAR P0 = [F_01_产品编号]
  111. VAR M0 = [F_01_门店编号]
  112. VAR T_FILTER =
  113. FILTER ( T12, [F_01_产品编号] = P0 && [F_01_门店编号] = M0 )
  114. VAR STDE0 =
  115. IFERROR ( STDEVX.S ( T_FILTER, [@出库] ), 0 )
  116. RETURN
  117. STDE0
  118. )
  119. VAR T =
  120. NATURALINNERJOIN ( T03, T13 )
  121. VAR z = [0010_产品数量_安全库存_z]
  122. VAR SS =
  123. //SS= z * SQRT( σd ^ 2 * μL + σL ^ 2 * μd ^ 2 )
  124. SUMX ( T, z * SQRT ( [@σd] ^ 2 * [@μL] + [@σL] ^ 2 * [@μd] ^ 2 )
  125. )
  126. RETURN
  127. SS

三、总结

1、安全库存作为库存管理的一种重要参考,本案例中使用的是标准正太分布的理性情况,所以在实际的生产生活中还要根据业务特点再调整。

2、本案例给出了一种统计学意义下安全库存使用 DAX 计算思路。

3、另外关于库存计算的理解,历史累计对应到 DAX 中也就很好写了,首先找到业务的时间起点,因为时间起点不会变,也可以直接写死,再找到当前的时间点,结合 DATESBETWEEN 就能构建我们需要的各种业务时间描述了。

by 焦棚子

155_模型_Power BI & Power Pivot 进销存之安全库存的更多相关文章

  1. 151-模型-Power BI&Power Pivot模型DAX函数使用量分析

    151-模型-Power BI&Power Pivot模型DAX函数使用量分析 1.背景 我们在 Power BI 或者 Power Pivot 项目中会写很多的 DAX 表达式.在最后项目交 ...

  2. 158_模型_Power BI 使用 DAX + SVG 打通制作商业图表几乎所有可能

    158_模型_Power BI 使用 DAX + SVG 打通制作商业图表几乎所有可能 一.背景 最近对 Power BI 中使用 SVG 比较感兴趣,今天我们使用 DAX + SVG 复刻一下 Ze ...

  3. 159_模型_Power BI 地理分析之形状地图

    159_模型_Power BI 地理分析之形状地图 声明以下地图元素仅供学习交流所用,如需地图公开使用请提前做好报审工作. 一.背景 当企业的体量达到一定体量的时候,保持稳定的增长是非常重要的事情.本 ...

  4. 浩瀚技术团队... 安卓智能POS移动PDA开单器 开单器 进销存系统 进销存系统

    浩瀚技术团队... 智能POS移动PDA开单器 开单器 进销存系统 进销存系统 点餐 会员管理 会员管理 深度解读 手机APP移动办公到底是什么? 快速打单POS·不仅仅是快那么简单!  

  5. 寒冬之下,浩瀚智能开单收银打印扫描POS为何能在批发零售门店商场 车销行业 风靡!:进销存+打印扫描POS机

    是一款适用于商超.餐饮.服装鞋帽.家电专营等等具有零售行业特点的企业,供企业管理人员用于管理.监控本品牌的市场占有率.门店覆盖区域.网点分布合理性等经济地理信息的工具平台. 1,功能一:业务抄单文章来 ...

  6. PDA手持机 移动开单进销存系统 现场出打印凭据和扫码 新的亮点

    传统车销模式弊端:1.手写开单,效率低,动作慢2.现场手写开单明细不能打印,产品明细不规范3.电脑办公人员及车销人员对车上的库存情况掌握不清楚,销售人员对每种产品销售价格不清楚4.老板对员工工作的管控 ...

  7. 【.NET实战教程】北风网基于ASP.NET多层架构下的企业级进销存软件全程培训

    .Net进销存系统详细课程大纲(开发工具采用VS2008+sqlsever2005) [小编提醒:现在学习的话,可以使用vs2012+sql 2008 学习的是思路,教学环境不一定要一模一样]1.项目 ...

  8. Net通用进销存管理系统 + 开发文档+ 使用说明

    通用进销存管理系统 + 开发文档+ 使用说明Net源码下载 包括下面的模块基础资料模块采购管理模块库存管理模块商务管理模块营业管理模块维修管理模块会员管理模块财务管理模块 Net通用进销存管理系统 + ...

  9. 一秒钟看懂SaaS、CRM、OA、ERP、HR、进销存

    自2014年以来,SaaS.CRM.OA.ERP.HR.APM.进销存.财务系统等,这些名词大量出现在微信朋友圈.电视楼宇广告和千百万融资资讯中.它们到底是什么意思?相互之间又有什么区别?在这个飞速发 ...

随机推荐

  1. SpringBoot-总结

    SpringBoot一站式开发 官网:https://spring.io/projects/spring-boot Spring Boot可以轻松创建独立的.基于Spring的生产级应用程序,它可以让 ...

  2. eclipse 下 SpringBoot 工程使用Maven打包

    eclipse 下 SpringBoot 工程使用Maven打包 1. pom.xml 添加打包配置 点击查看代码 <!-- 打包使用 --> <build> <plug ...

  3. RMI反序列化学习

    RMI学习 1.RMI简介 RMI(Remote Method Invocation),远程方法调用方法,其实就是本地java虚拟机要调用其他java虚拟机的方法,两个虚拟机可以是运行在相同计算机上的 ...

  4. 帝国CMS批量提取正文内容到简介

    最近接到一个帝国CMS模板改版项目,自带的数据可能是采集的,以前的简介字段内容只截取了60个字,新模板的简介60字符太少了,不美观,想让简介都截取200个字,怎么批量修改呢,文章太多了手动改肯定不行, ...

  5. JavaWeb项目端口占用问题

    今天使用springboot编写项目的时候安装了一个插件,重启了idea,但是项目忘记终止连接了,再打开idea启动项目发现端口被占用 控制台输出: ************************* ...

  6. JavaScript学习总结8-DOM

    今天学习了DOM的增删改查 innerText可以用来修改文本的内容,但是无法识别标签,要修改标签样式使用innerHTML 删除节点的步骤:先获取父节点,在通过父节点删除子节点 注意:删除节点是一个 ...

  7. python中常用内置函数和关键词

    Python 常用内置函数如下: Python 解释器内置了很多函数和类型,您可以在任何时候使用它们.以下按字母表顺序列出它们. 1. abs()函数 返回数字的绝对值. print( abs(-45 ...

  8. Android第1-2周作业

    作业1:安装环境,截图编程界面,截图运行界面 作业2:九宫格 <?xml version="1.0" encoding="utf-8"?> < ...

  9. 理解ASP.NET Core - 授权(Authorization)

    注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 之前,我们已经了解了ASP.NET Core中的身份认证,现在,我们来聊一下授权. 老规矩,示 ...

  10. Linux编译安装-软件

    编译源码的项目工具 C.C++的源码编译:使用make项目管理器 configure脚本 --> Makefile.in --> Makefile 相关开发工具: autoconf: 生成 ...