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 など) の使用がより困難になり、ファクト テーブルを常に更新して、新しい「期限切れ」のディメンション値。

代わりに、事実の上に置かれ、毎日再構築される集計を構築するだけではどうですか (または、DB が十分に強力な場合はビューも)。例として請求書を使用します。

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 日未満のすべての請求書を例にすると、最初の 2 つの列のいずれかが 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 に答える