114_Power Pivot 销售订单之销售额、成本、利润率相关
博客:www.jiaopengzi.com
一、背景
双十二回来后遇到一个比较有意思的计算销售额和利润率的需求(见下文说明)。
先看下效果。


说明:
1、订单表中不体现销售价格,如上图《出库》。
2、销售价格单独管理,如上图《价格表》;
说明:价格是不断调整的,以上图红色填充的sku1为例,
即
2018/12/1至2018/12/10销售价:592,
2018/12/11至2018/12/13销售价:581,
2018/12/14后销售价:500。
3、库存每月1号给出一个当月期初库存如上图《期初库存》,包含成本价和数量
4、入库商品的成本价是浮动的如上图中黄色填充sku1,
即
2018/12/1期初成本价:201,
2018/12/10入库成本价:201,
2018/12/11入库成本价:211,
约定:成本价按照加权平均求得
以sku1为例:
总成本=201100+201100+211*200=82400
总数量=100+100+200=400
成本单价=82400/400=206
二、数据源
1、出库

2、期初库存

3、入库

4、价格表

5、关系

三、上度量值
1、订单数量
订单数量:=DISTINCTCOUNT('出库'[订单id])
2、出库
出库:=SUM('出库'[数量])
3、期初
期初:=SUM('期初库存'[数量])
4、入库
入库:=SUM('入库'[数量])
5、销售价
销售价:=SUM('价格表'[售价])
6、库存
库存:=
VAR TF1 =
IF ( MAX ( '出库'[日期] ) < MAX ( '日期表'[date] ), FALSE (), TRUE () )
VAR TF2 =
ISFILTERED ( '日期表'[date] )
RETURN
SWITCH (
TRUE (),
TF1 && TF2, CALCULATE ( '度量值'[期初], DATESMTD ( '日期表'[date] ) )
+ CALCULATE ( '度量值'[入库], DATESMTD ( '日期表'[date] ) )
- CALCULATE ( '度量值'[出库], DATESMTD ( '日期表'[date] ) ),
TF2 = FALSE (), CALCULATE ( '度量值'[期初], DATESMTD ( '日期表'[date] ) )
+ CALCULATE ( '度量值'[入库], DATESMTD ( '日期表'[date] ) )
- CALCULATE ( '度量值'[出库], DATESMTD ( '日期表'[date] ) )
)
7、销售额
销售额:=
SUMX (
ADDCOLUMNS (
'出库',
"单价", CALCULATE (
[销售价],
FILTER (
ALL ( '价格表' ),
'价格表'[日期] <= '出库'[日期]
&& '价格表'[日期]
>= TOPN (
1,
CALCULATETABLE (
VALUES ( '价格表'[日期] ),
FILTER ( ALL ( '价格表' ), '价格表'[日期] <= '出库'[日期] && '价格表'[sku] = '出库'[sku] )
),
'价格表'[日期], DESC
)
&& '价格表'[sku] = '出库'[sku]
)
)
),
'出库'[数量] * [单价]
)
8、成本
成本:=
VAR DS =
STARTOFMONTH ( '出库'[日期] )
VAR DE =
ENDOFMONTH ( '出库'[日期] )
VAR T1 =
DATESBETWEEN ( '日期表'[date], DS, DE )
VAR T2 =
SUMMARIZE (
sku,
sku[sku],
"CC", DIVIDE (
SUMX (
CALCULATETABLE ( '期初库存', DS, ALL ( '日期表'[date] ) ),
'期初库存'[成本价] * '期初库存'[数量]
)
+ SUMX ( CALCULATETABLE ( '入库', T1, ALL ( '日期表'[date] ) ), '入库'[成本价] * '入库'[数量] ),
SUMX ( CALCULATETABLE ( '期初库存', DS, ALL ( '日期表'[date] ) ), '期初库存'[数量] )
+ SUMX ( CALCULATETABLE ( '入库', T1, ALL ( '日期表'[date] ) ), '入库'[数量] )
)
)
RETURN
SUMX (
ADDCOLUMNS ( '出库', "成本单价", SUMX ( FILTER ( T2, [sku] = '出库'[sku] ), [CC] ) ),
[成本单价] * [数量]
)
9、利润率
利润率:=DIVIDE('度量值'[销售额]-'度量值'[成本],'度量值'[销售额])
四、总结
1、根据业务创建相关度量值上下文;
2、本案例中难点主要在度量值6、销售额和7、成本;
3、销售额中价格巧妙使用TOPN,成本中对加权求平均dax的转换。
4、如有先进先出的需求,体现在批次管理即可,本案例不是先进先出的案例。
by焦棚子
114_Power Pivot 销售订单之销售额、成本、利润率相关的更多相关文章
- 112_Power Pivot 销售订单按 sku 订单类型特殊分类及占比相关
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 经过了一个双十一后,天天面对的都是订单.于是有了关于销售订单按sku类型分类的需求. 说明:(暂且不讨论这样分类 ...
- 113_Power Pivot 销售订单之重复购买率及购买间隔天数相关
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 1.背景 在论坛中看到朋友在提复购率(重复购买率)等相关问题,今天把结果贴出来. 问题原贴:计算订单中的老顾客复购率 感谢 ...
- [SAP ABAP开发技术总结]SD销售订单定价过程
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 转载]SAP囚徒 - 通过销售订单领用到成本中心,FI替代
转载]SAP囚徒 - 通过销售订单领用到成本中心,FI替代 原文地址:SAP囚徒 - 通过销售订单领用到成本中心,FI替代实现不同成本中心记账科目不同作者:SAP囚徒 物品领用通常是库存管理的范畴 ...
- SAP 销售订单交货对成本中心记账
销售订单发货不计入主营业务成本,而是直接接入费用科目,与成本中心挂钩的业务经常发生.不少公司只是简单地处理交货,计入主营业务成本,然后财务再手工将成本归结到相关的成本中心.其实SAP系统是支持销售订单 ...
- VA01销售订单批导问题解决
1业务场景 事务代码:VA01创建销售订单,VA02修改销售订单 可以通过BAPI_SALESORDER_CREATEFROMDAT2批量创建 可以通过BAPI_SALESORDER_CHANGE批量 ...
- sap 中怎样把非限制库存转为销售订单库存?
把非限制库存转为销售订单库存: MB1B 移动类型413 把销售订单库存转为非限制库存: MB1B移动类型411 E 切记!
- Netsharp快速入门(之11) 销售管理(开发销售订单工作区)
作者:秋时 杨昶 时间:2014-02-15 转载须说明出处 4.3 销售订单开发 4.3.1 部件工作区设置 1.创建部件工作区,建工作区向导中要注意勾选组合并系部分.具体要建立的部 ...
- Netsharp快速入门(之13) 销售管理(单据流转 销售订单生成发货单)
作者:秋时 杨昶 转载须说明出处 4.5 单据流转 4.5.1 单据流转的目的 单据流转主要为了实现业务关系的流转,并记录相互之间的关系.例如从销售订单生成销货单,两张单据之间有对应的关 ...
随机推荐
- Numpy求解线性方程组
Numpy求解线性方程组 对于Ax=b,已知A和b,怎么算出x? 1. 引入包 2. 求解 验证
- 在页面未加载完之前显示loading动画
在页面未加载完之前显示loading动画 这里有很多比这篇博客还优秀的loading动画源码 我还参考这篇博客 loading动画代码demo 我的demo预览 <!DOCTYPE html&g ...
- 学习HTML5 history API
html5 在 history 对象上添加几个新的方法.事件.属性,用以增强开发者对于浏览器历史记录的控制.大体上说,新的API可以帮助我们在无刷新的情况下改变浏览器的url,新增或者替换之前的历史记 ...
- Episode 3:我们想要更好的社交网络
我们为什么爱看评论?怎样的人类文字最有效率?更「好」的手机设计.APP 设计?APP Store 已经十年了?这是 WEB VIEW 的第三期节目<我们想要更好的社交网络>. 链接描述 s ...
- 一块小饼干(Cookie)的故事-上篇
cookie 如果非要用汉语理解的话应该是 一段小型文本文件,由网景的创始人之一的卢 蒙特利在93年发明. 上篇是熟悉一下注册的大致流程,下篇熟悉登录流程以及真正的Cookie 实现基本的注册功能 我 ...
- Initialization failed for 'https://start.spring.io
本文精华(没空的小伙伴,直接看精华部分即可) 1.精华1: 开发/下载项目的时候考虑系统必备的版本兼容性 2.精华2: 通过火狐浏览器访问官网的旧版本,下载到任意需要的项目版本,然后通过项目导入ide ...
- 在Wireshark中使用过滤器——显示过滤器
在Wireshark运行过程中选择搜索(Ctrl-F),第一个默认的搜索选项就是显示过滤器. 显示过滤器用于捕获文件,用来告诉Wireshark只显示那些符合过滤条件的数据包. 显示过滤器比捕获过滤器 ...
- numpy教程05---ndarray的高级操作
欢迎关注公众号[Python开发实战], 获取更多内容! 工具-numpy numpy是使用Python进行数据科学的基础库.numpy以一个强大的N维数组对象为中心,它还包含有用的线性代数,傅里叶变 ...
- Java基础之浅谈集合
Java基础知识.关于List.Set.Map接口的了解,以及ArrayList.LinkedList.HashSet.TreeSet.HashMap.TreeMap...
- Java基础语法02——流程控制
流程控制:顺序结构.分支结构(if-else.switch-case).循环结构(for.while.do-while)