有人可以解释以下Essbase代码:FIX,@ relative

时间:2019-01-14 22:59:06

标签: essbase

有人可以向我解释下面的Essbase代码吗?这是我第一次查看任何Essbase代码,我对它的实际作用感到困惑。

FIX(&Mth, &Yr, &Version,
        "Sector1","Sector2", @relative("Source Code",0), @relative("Channel", 0) )
    FIX("AccountNo","DepNo")

    DATACOPY "1A11"->"A-500" TO "1BCD"->"C-800"; 

    ENDFIX
ENDFIX

根据我的搜索,以下是我的理解:

  1. 创建一个新的命令块,该命令块将数据库计算限制为该子集。

  2. 将以下成员传递到要使用的命令中:

    • Mth
    • 版本
  3. 返回以下字段:

    • Sector1
    • Sector2
    • 返回源代码成员的0级成员-表示它返回源代码总数的成员,不包含子对象(无其他维)
    • 返回Channel成员的0级成员-表示它返回不带子级(没有其他维度)的Channel成员
  4. 开始一个新的命令块,并将以下成员传递到要使用的命令中:

    • 帐户编号
    • DepNo
  5. 将单元格1A11,A-500的范围复制到范围1BCD,C-800

以上是我从oracle文档中对每个函数的了解,但是我实际上无法弄清楚正在发生什么。

1 个答案:

答案 0 :(得分:1)

欢迎来到Essbase的世界;刚开始时可能会有些令人生畏,特别是如果您是多维概念的新手。您正在正确地分析calc脚本。

尽量不要将FIX语句本身视为命令块。 FIX用于选择多维数据集中的一部分单元格。多维数据集中的每个数据都有一个特定的地址,该地址由每个维度的一个成员加上实际数据值本身组成。例如,维度为时间,年份,场景和位置的多维数据集可能在Jan->2018->Actual->Washington处具有特定的数据。多维数据集中数据的可能排列数量会很快变得非常大。例如,如果您的组织有4年的数据,一年中的12个月,100个地点,10000个帐户,3个版本和10个部门,则您所谈论的是4 * 12 * 100 * 10000 * 3 * 10 = 1.4十亿个不同的数据潜在地址(单元)–对于多维数据集来说,这实际上很小,因为它们会变得更大。

也就是说,FIX语句用于缩小计算操作的范围,而不是在ENTIRE多维数据集(在我的假设示例中为所有14亿个像元)上操作,FIX本质上限制了计算符合您指定的某些条件的单元格。在这种情况下,第一个FIX语句将计算限制为特定的月份,年份,版本,扇区,源和渠道。请注意,MthYrVersion上的&表示将使用替换变量。这意味着您的服务器或多维数据集具有替换变量值集,例如变量Mth = "Jan"Yr = "FY2018",而Version可能是"Working""Final"或类似名称。我猜想Sector1和Sector2可能是同一维度中的两个不同成员。 @RELATIVE("Source Code", 0)是一个函数,用于查找指定成员的0级成员(维度中的叶/底部成员,即在其下面没有子级的成员)。

换句话说,第一个FIX语句将计算范围缩小到特定版本中的特定年份中的特定月份(而不是所有月份,所有年份,所有版本),以及该特定月份/年/版本(对于部门1或部门2),它固定在源代码和渠道维度中的所有0级/底部/叶成员上。

除了外部FIX,下一个FIX语句进一步缩小了当前要计算的像元范围。看到像这样嵌套的FIX语句并不少见。

最后,我们进入实际发生的部分:数据复制。在给定的FIX上下文中,此DATACOPY命令表示对于当前FIX中的每个单元,将值从源复制到目标。相对于使用跨维运算符(->)而言,DATACOPY只是DATACOPY从“源”到“目标”而已,它更直接一些……但是从时间/年份的维度上可能更容易理解。例如,假设数据副本是这样写的:

DATACOPY "FY2018"->"Dec" TO "FY2019"->"Jan";

在此DATACOPY中,我要告诉Essbase,对于给定的FIX上下文,我要将值从年末(年份为FY2018,月份为12月)复制到下一个年初年(数据值为年份为2019财政年度,月份为1月)。您的DATACOPY以类似的方式工作,但是使用成本中心或其他方式。一切都取决于多维数据集的设置方式。