127_Power Pivot&Power BI DAX计算订单商品在库时间(延伸订单仓储费用)
博客:www.jiaopengzi.com
一、背景
前面已经写过一个先进先出的库龄案例,在业务发生又有这样一个需求:先进先出前提,需要按照订单计算每个商品在库时间,也就是说计算一个订单中的商品从入库到出库的时间。
当已知商品的每天库存费用是多少时,可计算出每个订单的仓储费用,用在仓储的内部结算中。
关键点在于计算出单位库存在库天数,同时也引出了本文的案例(如需计算仓储费用加上一个商品单价即可,本文不单独说明)。
案例如下:

二、数据源

1、本案例中暂时没有用到日期表,养成良好的建模习惯也是很有必要的。
2、单位库存在库天数的计算逻辑见《图1》。
三、上DAX
单位库存在库天数:=
VAR T0=ADDCOLUMNS('入库',"@累计入库",
VAR dateruku='入库'[入库日期]
VAR skuruku='入库'[SKU]
VAR T01=FILTER('入库','入库'[SKU]=skuruku&&'入库'[入库日期]<=dateruku)
RETURN
SUMX(T01,[入库数量])
) VAR T1=ADDCOLUMNS('出库',"@累计出库",
VAR datechuku='出库'[出库日期]
VAR skuchuku='出库'[SKU]
VAR T11=FILTER(ALL('出库'),'出库'[SKU]=skuchuku&&'出库'[出库日期]<=datechuku)
RETURN
SUMX(T11,[出库数量])
)VAR T2=ADDCOLUMNS(ALL('出库'),"@累计出库",
VAR datechuku_all='出库'[出库日期]
VAR skuchuku_all='出库'[SKU]
VAR T21=FILTER(ALL('出库'),'出库'[SKU]=skuchuku_all&&'出库'[出库日期]<=datechuku_all)
RETURN
SUMX(T21,[出库数量])
)
VAR T3=ADDCOLUMNS(T1,"@result",
VAR dateck=[出库日期]
VAR ljck=[@累计出库]
VAR skuac=[SKU]
VAR T31=FILTER(T2,[SKU]=skuac&&[出库日期]<dateck)//前一个@累计出库
VAR MAXCK=MAXX(T31,[@累计出库])
VAR T32=FILTER(T0,[SKU]=skuac&&[入库日期]<=dateck&&[@累计入库]>=MAXCK)
VAR T33=ADDCOLUMNS(T32,"@库存",
VAR datemin=MINX(T32,[入库日期])
RETURN
IF([入库日期]=datemin,[@累计入库]-MAXCK,[入库数量])
)
VAR T34=FILTER(T33,[@累计入库]-ljck>=0)
VAR datemax=MINX(T34,[入库日期])//累计@库存刚好满足订单需求的最大日期
VAR T35=FILTER(T33,[入库日期]<=datemax)
VAR T36=ADDCOLUMNS(T35,"@天数",DATEDIFF([入库日期],dateck,DAY)+1,"@数量",IF([@累计入库]-ljck>0,[@库存]-([@累计入库]-ljck),[@库存]))
RETURN
SUMX(T36,[@天数]*[@数量])
)
RETURN
SUMX(T3,[@result])
四、总结
1、案例本身没有太多复杂的DAX应用;
2、主要是T1和T2中ALL的应用,在T3的T31的外部筛选上下文的去除体现,业务逻辑转换上下文重点;
3、T3中涉及到多层的嵌套特别是T36,这个需要有空间想象力,可以借助Dax Studio去分步理解;
4、另外一个关于临时列“@”的命名要求,养成良好的DAX书写习惯。详见如下链接SQLBI文章。
Naming temporary columns in DAX - SQLBIwww.sqlbi.com
by 焦棚子
127_Power Pivot&Power BI DAX计算订单商品在库时间(延伸订单仓储费用)的更多相关文章
- 124_Power Pivot&Power BI DAX优化计算最大连续次数
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 最大连续次数或者是最大连续子序列问题,在DAX中如何快速计算呢? 思路 1.N-1:按照INDEX错位 2.ST ...
- 123_Power Pivot&Power BI DAX函数说明速查
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 说明 1.基于DAX Studio 2.9.2版本导出整理: 2.DAX Studio网站,及时更新下载,DAX学习利器: ...
- 129_Power Pivot&Power BI DAX不同维度动态展示&动态坐标轴
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 某天在和那还是叫我大铁吧 交流关于季度&月度同时展示的问题,感概中国式报表真的需求很微妙. 下面来看看到 ...
- 一起学微软Power BI系列-使用技巧(5)自定义PowerBI时间日期表
1.日期函数表作用 经常使用Excel或者PowerBI,Power Pivot做报表,时间日期是一个重要的纬度,加上做一些钻取,时间日期函数表不可避免.所以今天就给大家分享一个自定义的做日期表的方法 ...
- 122_Power Pivot&Power BI不连续日期的日环比
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 这两天有朋友在交流,dax中使用时间智能函数写日环比,一个 dateadd 就可以了.但是有些业务不是每天都连续 ...
- ajax 实现订单商品数量的增减及订单的删除进行异步更新界面
[转载]https://blog.csdn.net/luliuying_01/article/details/78177617?locationNum=8&fps=1 由于在做答辩项目,做到购 ...
- .NET平台开源项目速览(19)Power BI神器DAX Studio
PowerBI更新频繁,已经有点更不上的节奏,一直在关注和学习中,基本的一些操作大概是没问题,更重要的是注重Power Query,M函数,以及DAX的使用,这才是核心. 上个月研究了DAX的一些 ...
- 2019 Power BI最Top50面试题,助你面试脱颖而出系列<下>
Q:什么是附加题? A:这就是常说的送分可选题,可做可不做:也可以说是加分项,是难点提升题. Power BI 面试题 — 附加题 33)什么是 Power View? 答案: Power View是 ...
- PowerBI开发 第十五篇:Power BI的行级安全
Power BI支持行级安全(Row-Level Security,RLS)的权限控制,用于限制用户对Dashboard.报表和DataSet的访问.用户浏览的报表是相同的,但是看到的数据却是不同的. ...
随机推荐
- 隐藏IE10默认在input框输入内容后显示“X”按钮
::-ms-clear{display: none;} ::-ms-reveal{display: none;}
- D3.js中国地图下钻
使用d3.js实现中国地图及中国地图下钻到省市区 在可视化开发中,地图是很重要的一个环节,很多时候需要展现的不仅是国家地图,还需要能从国家进入到省市,看到区这样的下钻过程,今天我们就来实现这个效果. ...
- 设计模式之:抽象工厂模式AbstractFactoryPattern的实现
相比于工厂模式,抽象工厂模式的每个工厂可以创建产品系列,而不是一个产品: 抽象工厂用到的技术:接口.多态.配置文件.反射: 抽象工厂模式的设计原则: 实现客户端创建产品和使用产品的分离,客户端无须了解 ...
- Java/C++实现代理模式---婚介所
婚介所其实就是找对象的一个代理,请仿照我们的课堂例子"论坛权限控制代理"完成这个实际问题,其中如果年纪小于18周岁,婚介所会提示"对不起,不能早恋!",并终止业 ...
- 用Python爬取斗鱼网站的一个小案例
思路解析: 1.我们需要明确爬取数据的目的:为了按热度查看主播的在线观看人数 2.浏览网页源代码,查看我们需要的数据的定位标签 3.在代码中发送一个http请求,获取到网页返回的html(需要注意的是 ...
- 给一个非矩形数组(Nonrectangular Arrays)
Nonrectangular Arrays(非矩形数组) public class Test { public static void main(String[] args) { ...
- Spring5-IOC容器实现方式
spring提供了两个接口实现IOC容器 (1)BeanFactory:IOC容器基本实现,是Spring内部使用的接口,不提倡开发人员使用 特点:加载配置文件时侯不会创建对象,在获取对象时才会创建对 ...
- Go xmas2020 学习笔记 05、Arrays, Slices, and Maps
05-Arrays, Slices, and Maps. In memory. Array. Slice. fence post error. Compare Array and Slice . Ma ...
- 『忘了再学』Shell基础 — 10、Bash中的特殊符号(二)
提示:本篇文章接上一篇文章,主要说说()小括号和{}大括号的区别与使用. 8.()小括号 ():用于一串命令执行时,()中的命令会在子Shell中运行.(和下面大括号一起说明) 9.{}大括号 {}: ...
- Android第1-2周作业
作业1:安装环境,截图编程界面,截图运行界面 作业2:九宫格 <?xml version="1.0" encoding="utf-8"?> < ...