1

一定期間に起こった事実をどのように処理すればよいのかよくわかりません。私は、特定の日に起こった事実を必ず扱います。

明らかに、私のファクトには start_date と end_date があります。たとえば、start_date が 2008 年 1 月 1 日で、end_date が 2011 年 1 月 1 日であるとします。2009 年に発生した事実と今年発生した事実の数を取得する必要があります。同じ事実が両方の年に起こった可能性があります。事実が 2009 年の一部であると判断する方法は、2009 年 12 月 31 日をチェックすることです。

日付範囲を使用して、StartDate ディメンションと EndDate ディメンションについて考えていました (つまり、StartDate ディメンションの最初の日付から 2009 年 12 月 31 日まで、および 2009 年 12 月 31 日から EndDate ディメンションの最後の日付まで)。私はそれらに参加します。

試してみましたが、動作しますが、本当に遅いです。

何かご意見は?

4

3 に答える 3

2

私が望んでいた解決策を見つけました。アンサーのデビッドとクリス!これが私が達成したかったことですが、MDX構文が欠けていました:

SELECT  [Measures].[NumberX] ON COLUMNS
FROM    [MyCube]
WHERE   ([START DATE].[REFDATE].FirstMember:[START DATE].[REFDATE].&[2009-12-31T00:00:00],
        [END DATE].[REFDATE].&[2010-01-01T00:00:00]:[END DATE].[REFDATE].LastMember)

ものすごく単純。私の質問は明確ではなかったと思います。そのため、異なる回答が得られました;-)

于 2010-09-29T11:53:51.980 に答える
0

次のような 2 つの時間ディメンションでいつでも日付範囲を使用できます。

[開始日].[年].[2009]:[終了日].[年].[2010]を選択 立方体から 0 で

質問を正しく理解している場合。2 つの時間ディメンションはうまく連動するはずです。仕事で行っているプロジェクトに 2 つあり、一緒に作業するのはかなり高速です。2 つの日付を区別できるように、キューブのディメンションの使用セクションでそれらを設定してください。

于 2010-09-28T18:49:38.473 に答える
-1

日付ディメンション DimDate が 1 つだけ必要です。ファクト テーブルは、DimDate への 2 つの外部キーを持つことができます。1 つは開始日用で、もう 1 つは終了日用です。

FactTable
{
    FactID int,
    StartDate int,
    EndDate int
    -- Other fields
}

DimDate
{
    DimDateID int,
    Year int,
    Month int,
    Day int,
    -- Other fields if needed
}

2009 年に該当するすべてのファクトを取得するには、次を使用します。

SELECT f.FactID FROM FactTable f
INNER JOIN DimDate dStart ON dStart.DimDateID = f.StartDate
INNER JOIN DimDate dEnd ON dEnd.DimDateID = f.EndDate
WHERE dStart.Year <= 2009
  AND dEnd.Year >= 2009
于 2010-09-20T14:35:45.143 に答える