聚合存储大纲的 64 位维大小限制
每个维的 Essbase 聚合存储 (ASO) 多维数据集大纲不能超过 64 位。
维所需的位数是任何 0 级子项使用的最大位数,包括替代层次结构中的 0 级子项和关联的属性维。对于成员编号,属性维被视为其基本维的备用层次。
通常,用于确定维中任何成员所需的位数的公式可以表示为:
#_bits_member’s_parent + log(x)其中 x 是父项的子项数量。
例如,如果成员的父代是成员 A(需要 5 位),而 A 具有 10 个子代,则每个子代所需的位数为:
5 +log(10) = 9 bits维或层次的顶级成员通常使用 0 位。但是,当一个或多个顶级成员由仅标签成员组成时,仅标签成员不会收到成员编号(因为它们不被视为存储的成员)。因此,如果第一个非标签生成中存在 x 成员,则这些成员将使用日志 ( x ) 位。剩下的孩子都是正常编号的。
同样,如果维或层次是动态的,则仅存储或共享的 0 级成员接收成员编号。这些成员所需的位数是 log( x ),其中 x 是所存储或共享的 0 级别成员的数量(即不是公式成员的 0 级成员的数量)。
但是,如果任何替代层次已存储(非共享)0 级成员,则维中每个层次的每个成员(包括关联的属性维)都使用额外的日志 ( x ) 位,其中 x 是此基本维的层次和关联属性维的总数。
以下示例使用 ASOsamp.Basic 数据库中的“产品”维:

“产品”维有两个层次结构:“所有商品”和“高端商品”,这是一个替代层次结构。高端商品有一个存储级别 0 的成员:存储成员。“产品”维没有任何关联的属性维。
所有商品和高端商品使用 log(2) = 1 位。
注意:
如果替代层次结构“高端商品”没有任何存储的 0 级成员,则每个层次结构的顶层成员(以及关联的属性维)将使用 0 位。
计算每个级别 0 子项所需的位数:
All Merchandise = 1 bit
Personal Electronics, Home Entertainment, Other = 1 + log(3) = 3 bits
Digital Cameras/Camcorders, Handhelds/PDAs, Portable Audio = 3 + log(3) = 5
Children of Digital Cameras/Camcorders = 5 + log(3) = 7
Children of Handhelds/PDAs = 5 + log(3) = 7
Children of Portable Audio = 5 + log(2) = 6
Televisions, Home Audio/Video = 3 + log(2) = 4
Children of Televisions = 4 + log(5) = 7
Children of Home Audio/Video = 4 + log(4) = 6
Computers and Peripherals = 3 + log(1) = 3 **
Systems, Displays, CD/DVD drives = 3 + log(3) = 5
Children of Systems = 5 + log(2) = 6
High End Merchandise = 1 bit
Flat Panel, HDTV, Stored Member = 1 + log(3) = 3 bits
成员计算机和外设的位数 (3) 与其父其他位数相同。
“产品”维度中任何 0 级子代使用的最大位数为 7(数字摄像机和电视机的子代)。因此,产品使用 7 位,这小于 64 位的尺寸限制。
如果维大小超过 64 位:
-
保存大纲时, Essbase 会生成以下错误:
Hierarchy [DimensionName] is too complex. It exceeds the maximum member number width of 64 bits. See application log for details. -
Essbase 将类似以下消息的消息记录在应用程序日志中:
Member number for member [level0member] requires [65] bits to encode Member [level0member] contributes [5] bits to member number Member [level1parent] contributes [20] bits to member number Member [level2parent] contributes [20] bits to member number Member [level3parent] contributes [20] bits to member number
要修复错误,请使用以下建议之一:
-
如果可能,请删除消息中引用的任何成员的某些同级。通过两个功率来减少兄弟姐妹的数量可以节省一个位。例如,假设 level0member 为成员编号贡献了 5 位,具有 18 个同级,包括其自身。将同级数减少到 16 个或更少可节省一个位,因为 log(16) = 4。同样,将兄弟姐妹数减少到 8 或更少会节省两个位。
-
对消息中引用的成员的一些同级重新分类。例如,将 level0member 18 个兄弟姐妹的一半移动到没有那么多子女的另一父代。或者,创建一个新的父代作为 level1parent 的同级,并将 level1parent 的子代的一半移动到新成员下。这种方法节省了一点。
-
结合一些中间层次。例如,将 level0member 及其所有兄弟姐妹移动为 level2parent 的子代,然后删除 level1parent。这种方法更涉及,但它可以节省许多比特。