116_Power Pivot 先进先出原则库龄库存计算相关
博客:www.jiaopengzi.com
一背景
前面写过了一个关于进销存的案例,留一个话题就是先进先出的库存计算。
刚好有朋友提了相关这样的需求。先来看看效果。

说明:
1、按照先进先出的原则,计算库存的库龄结构,如效果图。
2、特别说明下先进先出,即先入库产品先出库,从而有了库龄。
3、工作中更多会用批次来管理,案例中没有批次,需要写出库龄结构是有些绕。
4、感谢q友阳光岁月提供数据素材。
二、数据源
1、data
原始脱敏数据,大约6万多条,其中数据是erp导出的,需要清洗。

2、维度表:品号

3、日期表

4、事实表:入库

5、事实表:出库

6、关系

7、注意
这个数据里面没有期初库存,即入库汇总即库存总和。
三、上dax
1、入库
入库:=SUM('入库'[入库数量])
2、出库
出库:=SUM('出库'[出库数量])
3、库存
库存:=IF ( '入库'[入库] - '出库'[出库] = 0, BLANK (), '入库'[入库] - '出库'[出库] )
4、库龄0_30
库龄0_30:=
VAR MIND =
FIRSTDATE ( '日期表'[日期] )
VAR X = 0
VAR Y = 30
VAR MAXD =
FIRSTDATE ( DATESINPERIOD ( '日期表'[日期], TODAY () - X, - Y, DAY ) )
VAR LD =
LASTDATE ( DATESINPERIOD ( '日期表'[日期], TODAY () - X, - Y, DAY ) )
VAR CURT =
DATESINPERIOD ( '日期表'[日期], TODAY () - X, - Y, DAY )
VAR T1 =
DATESBETWEEN ( '日期表'[日期], MIND, MAXD )
VAR T2 =
DATESBETWEEN ( '日期表'[日期], MIND, LD )
VAR KC1 =
CALCULATE ( '入库'[入库], T1 )
VAR KCN =
CALCULATE ( '入库'[入库], CURT )
VAR KCA =
CALCULATE ( '入库'[入库], T2 )
VAR CK = '出库'[出库]
VAR RS1 = KC1 - CK
VAR RS2 = KCA - CK
VAR RS =
SWITCH ( TRUE (), RS1 > 0, KCN, RS2 > 0, RS2, BLANK () )
VAR RST =
SUMX (
SUMMARIZECOLUMNS (
'品号'[品号],
'品号',
"T", SWITCH (
TRUE (),
CALCULATE ( '入库'[入库], T1 ) - '出库'[出库]
> 0, CALCULATE ( '入库'[入库], CURT ),
CALCULATE ( '入库'[入库], T2 ) - '出库'[出库]
> 0, CALCULATE ( '入库'[入库], T2 ) - '出库'[出库],
BLANK ()
)
),
[T]
)
RETURN
IF ( ISFILTERED ( '品号'[品号] ), RS, RST )
5、库龄30_60,库龄60_90,库龄90_180,库龄180_360,库龄360以上几个逻辑都是一样,只是参数X,Y不一样;如下图。

6、库龄360以上
由于本案例数据只有2018年以后的数据,所以Y参数(见下图)需要特殊处理下
库龄360以上:=
VAR MIND =
FIRSTDATE ( '日期表'[日期] )
VAR X = 360
VAR Y =
DATEDIFF ( MIND, TODAY () - 360, DAY )
VAR MAXD =
FIRSTDATE ( DATESINPERIOD ( '日期表'[日期], TODAY () - X, - Y, DAY ) )
VAR LD =
LASTDATE ( DATESINPERIOD ( '日期表'[日期], TODAY () - X, - Y, DAY ) )
VAR CURT =
DATESINPERIOD ( '日期表'[日期], TODAY () - X, - Y, DAY )
VAR T1 =
DATESBETWEEN ( '日期表'[日期], MIND, MAXD )
VAR T2 =
DATESBETWEEN ( '日期表'[日期], MIND, LD )
VAR KC1 =
CALCULATE ( '入库'[入库], T1 )
VAR KCN =
CALCULATE ( '入库'[入库], CURT )
VAR KCA =
CALCULATE ( '入库'[入库], T2 )
VAR CK = '出库'[出库]
VAR RS1 = KC1 - CK
VAR RS2 = KCA - CK
VAR RS =
SWITCH ( TRUE (), RS1 > 0, KCN, RS2 > 0, RS2, BLANK () )
VAR RST =
SUMX (
SUMMARIZECOLUMNS (
'品号'[品号],
'品号',
"T", SWITCH (
TRUE (),
CALCULATE ( '入库'[入库], T1 ) - '出库'[出库]
> 0, CALCULATE ( '入库'[入库], CURT ),
CALCULATE ( '入库'[入库], T2 ) - '出库'[出库]
> 0, CALCULATE ( '入库'[入库], T2 ) - '出库'[出库],
BLANK ()
)
),
[T]
)
RETURN
IF ( ISFILTERED ( '品号'[品号] ), RS, RST )

四、总结
1、老样子业务逻辑转换dax上下文;
2、案例中先进先出运用的是累计计算的思路;
3、案例中总计行需要单独写,使用SUMMARIZECOLUMNS(office2013之前版本请使用SUMMARIZE)聚合,搭配迭代函数SUMX计算。
SUMMARIZECOLUMNS function (DAX)
附注:


本来想把异常数据删掉的,后来想想就留着吧,有兴趣的朋友可以实际操作看看。
注意:
数据动态用的是today来写的,拿到附件以后,得出来的结果和截图自然不一样,如果需要验证,把电脑日期回调至2019年1月13日即可。
by 焦棚子
116_Power Pivot 先进先出原则库龄库存计算相关的更多相关文章
- 【MM系列】SAP库龄报表逻辑理解
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP库龄报表逻辑理解 第一篇 ...
- 【MM系列】SAP SAP库龄报表逻辑理解
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP SAP库龄报表逻辑理解 ...
- SAP库龄表
&---------------------------------------------------------------------* *& Report ZFIR005 *& ...
- 用友ERP T6技术解析(六) 库龄分析
2.4 库存管理 2.4.1 库龄分析 介绍:库存账龄是在某时间节点,某种或某类存货的库存时间的加权平均值,跟库存周转率关系明显,库存周转率越高,库存账龄越低,可是二者又不是反比关系.不能简单把库 ...
- Odoo:全球第一免费开源ERP库龄表的简单实现方法(无需二开)
问题背景 希望查看库龄超过30天的货物,该如何实现?此种简单数据查询需要二开吗? 解决方案 方法一:Stock Quant列表视图增加过滤器 <filter string="库龄超30 ...
- 通过IP地址和子网掩码与运算计算相关地址
通过IP地址和子网掩码与运算计算相关地址 知道IP地址和子网掩码后可以算出 网络地址 广播地址 地址范围 本网有几台主机 例一:下面例子IP地址为192.168.100.5 子网掩码是255.255. ...
- 备库Seconds_Behind_Master的计算
背景 在mysql主备环境下,主备同步过程如下,主库更新产生binlog, 备库io线程拉取主库binlog生成relay log.备库sql线程执行relay log从而保持和主库同步. 理论上主库 ...
- PHP用mb_string函数库处理与windows相关中文字符
昨天想批处理以前下载的一堆文件,把文件里的关键内容用正则匹配出来,集中处理.在操作文件时遇到一个问题,就是windows操作系统中的编码问题. 我们都知道windows中(当然是中文版),文件名和文件 ...
- java IO选择流的原则及其与IO流相关类的关系
1 按照用途进行分类 1.1 按照数据的来源(去向)分类 是文件:FileInputStream, FileOutputStream, FileReader, FileWriter 是byte[]:B ...
随机推荐
- Numpy常用random随机函数汇总
Numpy常用random下的随机函数汇总 官方文档地址:https://docs.scipy.org/doc/numpy-1.14.0/reference/routines.random.html ...
- Bootstrap 之 Metronic 模板的学习之路 - (1)总览
写在前面 bootstrap 的模板非常多,Envato 上有着各种各样的免费及付费模板.Metronic 是我最喜欢的模板之一(看一眼就喜欢上的那种),当前售价 $28 ,觉得赞的,不妨支持一下作者 ...
- SQL之总结(一)
导游通项目之总结SQL 1.选择前面的某几个 oracle: select * from tb_article where rownum<5 order by article_id ...
- 我的python学习记_02
流程控制 算术运算符: + 加(在字符串中拼接作用) - 减 * 乘 / 除 // 商 % 取余 ** 次幂 比较运算符: > 是否大于 >= 是否大于等于 < 是否小于 != 是否 ...
- python计算项目净现值和内部回报率
代码: import numpy as np from numpy import irr import warnings def project(number, period_list): rate ...
- Smith数的判断
题目描述: smith数是指满足下列条件的可分解的整数: 其所有位数上的数字和等于其全部素数因子的数字之和. 例如,9975是smith数,9975=3*5*5*7*19,即9975的数字和=因子的数 ...
- 关于json对象的使用小结!
json是前后端数据交互的关键.后端提供的接口中的数据几乎都是通过json来表现的,所以,需要对这个json做一些小结: 这里要推进谷歌的插件Fehelp前端助手,这个可以清楚的看到json的数据: ...
- Typora 设置图片自动上传
使用 PicGo-Core(command line) 下载 PicGo-Core 依次点击 文件 -> 偏好设置 -> 图像 来到下图所示界面: 点击①位置选择 PicGo-Gore(c ...
- 关于allegro找不到env文件解决方法
使用allegro的友人时对于env文件并不陌生.在我们设计的过程中经常使用env文件设置快捷键从而达到快速拉线的目的.但是新安装的allegro软件中会找不到env文件,因为今天自己碰到了这件事,并 ...
- Factorials and Powers of Two
分析:我们可以看出这道题目的描述并不是很复杂,就是说对于一个给定的整数n,我们能否把他拆成k个powerful的数,也就是说这k个数要么是2的幂次,要么是某个数的阶乘,并且我们要让当前的k越小越好:然 ...