0

维度ID记录,也可以用作列(属性)吗?我不知道这是否可行,或者如果我这样做是否违反最佳实践。这是我为什么要问这个问题以及我在寻找什么的更详细的解释:我有一个只有 6 条记录的维度,称为逾期维度。它如下所示:

    PastDueBandDimID     PastDueMin     PastDueMax     PastDueDesc
    _____________________________________________________________________
    1                    0              0              Current
    _____________________________________________________________________
    2                    1              29             1-29 Days Past Due

并且持续 30-59 天/60-89 天/90-180 天。这种模式总体上工作正常,但我想用这些数据创建一个用户层次结构,所以我可以用不同的方式对其进行分组。所以我想做的是在 DSV 中创建名为 1-29 / 30-59.... 的附加字段,并在这些字段中引用 DimID,这样我就可以创建我的层次结构。我觉得这不是一个好方法,但我没有其他想法。任何建议表示赞赏!我想将我的报告分组(不是全部,而是一些)0-59 天和 60-180 天,并且用户层次结构将使用户能够执行此操作。

4

1 回答 1

2

在进行这样的分桶时,我几乎总是在聚合事实而不是“逾期”维度上创建物理桶列。

我可以理解像这样构建这个维度的诱惑,因为它非常“灵活”,但是当您发现它使使用自动化工具(例如 ssas)变得更加困难时,并且迫使您不断更新事实表以反映新的“逾期”维度值。

相反,为什么不只是构建一个基于您的事实并每天重建的聚合(如果您的数据库足够强大,甚至是一个视图)。以发票为例:

Invoice
Invoice Due Date
PastDueLTE29 (1 if <= 29, 0 otherwise)
PastDue30to59 (1 if >= 30 and <= 59, 0 otherwise)
PastDue60to89 (1 if >= 60 and <= 89, 0 otherwise)
PastDue90to180 (1 if >= 90 and <= 179, 0 otherwise)
PastDueGTE180 (1 if >= 180, 0 otherwise)

然后,如果您想分组,假设所有发票逾期 < 60 天,您只需过滤前两列中的任何一列 = 1。

如果你真的想要一个层次结构,你不能在你的表中添加几列吗?

我真的不喜欢在列名中使用“级别”......但是:

PastDueBandDimID
PastDueLevel1Name ("Past Due" or "Current")
PastDueLevel2Name ("1-60" or "61-180" or "180+")
PastDueLevel3Name ("1-30", "31-60", "61-90", "90+"
PastDueLevel3Min
PastDueLevel3Max
于 2012-08-03T14:32:08.213 回答