SAC Planning 高级计算公式-2

计算规则

基于事实表数据集

如果你不做其他的限定,下面的这个公式就是计算A产品的revenue,用Price*Quantity。但是你这里都没管时间。

复制代码
MEMBERSET [d/Product] ="A"
DATA([d/Account] ="Revenue")=RESULTLOOKUP([d/Account]="Price") * RESULTLOOKUP([d/Account]="Quantity")

如果我要计算下面这个公司2018年四季度的所有收入。那用高级公式可以这么弄。

Account Product Entity Date Value
Price Sparkling Water * Oct.2018 500
Price Sparkling Water * Nov.2018 600
Price Sparkling Water * Dec.2018 700
Quantity Sparkling Water Germany Oct.2018 50
Quantity Sparkling Water Germany Nov.2018 70
Quantity Sparkling Water Germany Dec.2018 90
Quantity Sparkling Water France Oct.2018 30
Quantity Sparkling Water France Nov.2018 50
Quantity Sparkling Water France Dec.2018 80
复制代码
MEMBERSET [d/Date]=("201810","201811","201812")

DATA([d/Account] ="Revenue")=RESULTLOOKUP([d/Account] ="Price",[d/Entity]="*") * RESULTLOOKUP([d/Account]="Quantity")

这里面的第一个RESULTLOOKUP去找它的范围了:

Account Product Entity Date Value
Price Sparkling Water * Oct.2018 500
Price Sparkling Water * Nov.2018 600
Price Sparkling Water * Dec.2018 700

第二个RESULTLOOKUP也去找它的范围了:

Account Product Entity Date Value
Quantity Sparkling Water Germany Oct.2018 50
Quantity Sparkling Water Germany Nov.2018 70
Quantity Sparkling Water Germany Dec.2018 90
Quantity Sparkling Water France Oct.2018 30
Quantity Sparkling Water France Nov.2018 50
Quantity Sparkling Water France Dec.2018 80

然后去做乘法,是怎么样的呢?

Account Account Product Entity Date Value (Price) Value (Quantity) Result
Price Quantity Sparkling Water Germany Oct.2018 500 50 25000
Price Quantity Sparkling Water Germany Nov.2018 600 70 42000
Price Quantity Sparkling Water Germany Dec.2018 700 90 63000
Price Quantity Sparkling Water France Oct.2018 500 30 15000
Price Quantity Sparkling Water France Nov.2018 600 50 30000
Price Quantity Sparkling Water France Dec.2018 700 80 56000

在最后的DATA()里返回值就会是这样的计算值。

Account Product Entity Date Value
Revenue Sparkling Water Germany Oct.2018 25000
Revenue Sparkling Water Germany Nov.2018 42000
Revenue Sparkling Water Germany Dec.2018 63000
Revenue Sparkling Water France Oct.2018 15000
Revenue Sparkling Water France Nov.2018 30000
Revenue Sparkling Water France Dec.2018 56000

新建数据

复制代码
MEMBERSET [d/Date]=BASEMEMBER([d/Date]. [h/YQM],"2018")

DATA([d/Audit]="LogicCalc")=RESULTLOOKUP([d/Audit]="Input",[d/Date]=PREVIOUS(12))

当我想新生成数据,比如上面把Audit = Input的从2017年1-12月的数据重新复制到Audit = LogicCalc的所有维度下,复制到2018年。

如果2017年只有半年有数据,那2018年的7-12月份也不会被填充,这时候就要去把CONFIG.GENERATE_UNBOOKED_DATA 设置成ON

符号反转

SAC计划中有四种财务账户类型:AST资产LEQ负债INC收入EXP费用

每一种账户类型都有一个预定义的符号。

不过高级公式默认是用绝对值计算的。

复制代码
DATA([d/Account] ="Revenue")=RESULTLOOKUP([d/Account]="Income") + RESULTLOOKUP([d/Account]="Expense")

比如INCOME是100,EXPENSE是50,结果会显示150.

如果你想用S4里设置好的EXP类型是负号。那你就把CONFIG.FLIPPING_SIGN_ACCORDING_ACCTYPE 设置成ON 。

复制代码
CONFIG.FLIPPING_SIGN_ACCORDING_ACCTYPE=ON

DATA([d/Account] ="Revenue")=RESULTLOOKUP([d/Account]="Income") + RESULTLOOKUP([d/Account]="Expense")

使用维度的属性值限定维度值

在MEMEBERSET里直接限定维度的值。

复制代码
MEMBERSET [d/Entity].[p/Region]="Europe"

这个比较简单,是限定所有属性里有Europe的Entity是哪些。

维度属性值定义计算

这个下面的就比较有意思了。

可以用维度的属性来定义计算范围。

举例,你有一个特定的维度,它带了一个计算属性还有一个上级分组属性。

Entity Calculation SisterMember
Sales Europe Y Sales Total
Sales Asia Y Sales Total
Sales Allowance Y Sales Cost Total
Sales Rebate Y Sales Cost Total
Sales Total
Sales Cost Total

代码是这么写:

复制代码
MEMBERSET [d/Entity].[p/Calculation] ="Y"

DATA() = RESULTLOOKUP([d/Sales] = [d/Sales].[p/SisterMember] )

MEMBERSET的返回值是"Sales Europe", "Sales Asia", "Sales Allowance", "Sales Rebate",先把4个calculation是Y的成员选出来。

下一行是为前面MEMBERSET选中的成员,设置他们的DATA值等于他们各自的sistermember的DATA值。RESULTLOOKUP来找对应的sistermember的结果。所以最后会是"Sales Europe", "Sales Asia"的值被填充成Sales Total的值, "Sales Allowance", "Sales Rebate"的值被填充成Sales Cost Total的值。

最终结果显示为:

相关推荐
Francek Chen7 天前
【大数据处理与分析】数据仓库Hive:09 Hive 编程实践
大数据·数据仓库·hive·hadoop·sql
全栈陈序员10 天前
【Git】从入门到精通(二)—— Git安装与初次配置
数据仓库·git
程序员梅雨10 天前
【从零开始学习数据仓库 | 第三篇】: Flume——数据采集基石
java·大数据·数据仓库·后端·学习·flume
注塑机数据采集联网12 天前
数据采集网关入门:ZK-D1/D3从零开始构建你的数据运用
大数据·数据仓库·人工智能·物联网·数据库架构·注塑机网关
roman_日积跬步-终至千里12 天前
【数据建模入门】从一家小店看懂数仓与机器学习:先理业务,再串技术
数据仓库·人工智能·机器学习·数据分析·数据建模
程序员梅雨13 天前
【从零开始学习数据仓库 | 第二篇】: 拉链表 & 数仓分层
大数据·数据仓库·学习
roman_日积跬步-终至千里13 天前
数仓开发的三层责任:业务定义、模型设计与 SQL 实现
数据库·数据仓库·sql·数据建模
geovindu14 天前
SQL Data Sampling and Approximation Techniques using postgreSQL 18
大数据·数据库·数据仓库·sql·postgresql·数据库开发·数据库架构
程序员梅雨15 天前
【从零开始学习数据仓库 | 第一篇】:维度建模理论
大数据·数据仓库·学习·阿里云·数据分析
棣廷15 天前
初识数据仓库——数仓分层到DataX数据采集
数据仓库