维度ID记录也可以用作列(属性)



维度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天,用户层次结构将允许用户这样做。

在进行这样的bucket时,我几乎总是在聚合事实而不是"过期"维度上创建物理bucket列。

我可以理解这样构建这个维度的诱惑,因为它非常"灵活",但随着您的发现,它使使用自动化工具(如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

最新更新