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 单据流转的目的 单据流转主要为了实现业务关系的流转,并记录相互之间的关系.例如从销售订单生成销货单,两张单据之间有对应的关 ...
随机推荐
- 《CSS世界》笔记二:盒模型四大家族
上一篇:<CSS世界>笔记一:流/元素/尺寸下一篇:<CSS世界>笔记三:内联元素与对齐 写在前面 在读<CSS世界>第四章之前,粗浅的认为盒模型无非是margin ...
- 记一次用mpvue框架搭建的小程序
介绍 mpvue (github 地址请参见)是一个使用 Vue.js 开发小程序的前端框架.框架基于 Vue.js 核心,mpvue 修改了Vue.js 的 runtime 和 compiler 实 ...
- SQL之总结(四)---null问题的处理
概述:如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录.这意味着该字段将以 NULL 值保存. NULL 值的处理方式与其他值不同. NULL 用作未知的或不适 ...
- 【每日日报】第三十四天---Scanner类的应用
1 今天继续看书 Scanner类的应用 1 package File; 2 import java.util.Scanner; 3 4 public class ScannerDemo { 5 pu ...
- java中抽象类和抽象方法到底什么关系?请举例说明!
抽象类和抽象方法什么关系?抽象类中可能有抽象方法,也可能没有抽象方法.那位说,就跟没说一样,那抽象类和抽象方法都叫抽象,他们必定有关系,那关系是什么呢?如果一个类中有抽象方法,它必须得是抽象类. An ...
- Spring 和 SpringMVC 常用注解和配置(@Autowired、@Resource、@Component、@Repository、@Service、@Controller的区别)
Spring 常用注解 总结内容 一.Spring部分 1.声明bean的注解 2.注入bean的注解 3.java配置类相关注解 4.切面(AOP)相关注解 5.事务注解 6.@Bean的属性支持 ...
- Input框搜索关键字高亮显示
ruleTitle(text, val) { if (!val) return text; const result = text.replace( new RegExp(val, "g&q ...
- Python raise...from... 是啥?
调试程序时看某些库的源代码,发现有如下代码读不懂,不理解后面这个from干什么用的. try: ... except KeyError: raise **Error('') from None try ...
- SpringBoot利用自定义注解实现通用的JWT校验方案
利用注解开发一个通用的JWT前置校验功能 设计的预期: 系统中并不是所有的应用都需要JWT前置校验,这就需要额外设计一个注解Annotation来标识这个方法需要JWT前置校验.例如: @GetMap ...
- SpringMVC-设置编码过滤器
1.接上文->springmvc获取请求参数链接 2.在web.xml配置编码过滤器 <!-- 配置编码过滤器--> <filter> <filter-name&g ...