calc - 3维之间的分配
问题描述
使用 PBCS 中的计算管理器进行分配。维度:
-账户-
人员
-项目
分配自:
Account001 -> No Person -> No Project = 100;
至:
Account001 -> 人员 A -> 项目 I = 20;
Account001 -> 人 B -> 项目 II = 80;
按司机:
司机 -> 人员 A -> 项目 I = 2;
司机 -> 人 B -> 项目 II = 8;
有没有比下面的代码更好的方法?
我尝试了标准分配功能,但分配的数据没有人员维度信息。
结果是 Account001 -> no Person -> Project I
而不是 Account001 -> Person A -> Project I
FIX ({Entity},/*DIM:Year*/"FY19",/*DIM:Version*/"Working",/*DIM:Customer*/"No Customer",/*DIM:Period*/"Jun",/*DIM:HSP_View*/"BaseData",/*DIM:Scenario*/"Actual")
FIX ( /*DIM:Person*/@RELATIVE("Total Person",0))
FIX ( /*DIM:Project*/@RELATIVE("Total Project", 0))
/*STARTCOMPONENT:SCRIPT*/
SET CREATENONMISSINGBLK ON;
/*ENDCOMPONENT*/
/*STARTCOMPONENT:FORMULA*/
"A534001" = "534001"->"P000"->"No Project" * 100 / 100 * "Man-hour" / "Man-hour"->"Total Person"->"Total Project";
/*Project expense for one person = Total entity Expense * manhour of that person of that project / manhour of total person of total project */
/*ENDCOMPONENT*/
ENDFIX
ENDFIX
ENDFIX
想知道是否有更好的方法来实现这一点。非常感谢。
解决方案
使用 Essbase 函数 @MDALLOCATE。您需要花费一些时间来研究文档并使其按要求运行,因为这是一个复杂的功能,并且所有观点都需要正确设置。
我建议你也这样做:
- 使用您的测试设置创建 SmartView 表(选项卡:分配来源、驱动程序、结果)
- 有一个明确的块所有脚本,以确保@MDALLOCATE 真的在创建块
- 创建一个非常小的数据集,您可以在其上设置您的 FIX
- 遍历计算脚本/业务规则以使其工作
过程是:
- 运行#2,从#1 发送数据,运行#3,检查#1 中的结果
尽量避免“SET CREATEONMISSINGBLK ON;” 越多越好。我已经看到分配中的这种结构导致计算时间为 6 小时(!),@MDALLOCATE 它缩短到大约 6 分钟。