SSAS - факты, произошедшие за определенный период времени - PullRequest
1 голос
/ 20 сентября 2010

Я действительно не знаю, как обращаться с фактами, которые произошли за определенный период времени. Я имею дело с фактами, которые произошли в конкретную дату.

Ясно, что мои факты имеют дату начала и окончания. Итак, допустим, моя начальная дата 01.01.2008, а моя конечная дата 01.01.2011. Мне нужно узнать количество тех фактов, которые произошли в 2009 году, и тех, которые произошли в этом году. То же самое могло случиться в оба года. Способ установить факт является частью 2009 года - проверить на 12/31/2009.

Я думал о измерениях StartDate и EndDate, используя диапазоны дат (от первой даты моего измерения StartDate до 31.12.2009 и с 31.12.2009 до последней даты в моем измерении EndDate). Я хотел бы присоединиться к ним.

Я попробовал, это работает, но ДЕЙСТВИТЕЛЬНО медленно.

Есть мысли?

Ответы [ 3 ]

2 голосов
/ 29 сентября 2010

Я нашел решение для того, что я хотел. Дэвид и Крис для тех, кто знает! Вот чего я хотел достичь, но мне не хватало синтаксиса 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)

Довольно просто. Я думаю, что мой вопрос не был ясен, поэтому я получил разные ответы; -)

0 голосов
/ 28 сентября 2010

Вы всегда можете использовать диапазон дат с двумя временными измерениями, такими как:

Выберите [дата начала]. [Год]. [2009]: [дата окончания]. [Год]. [2010] на 0 из куба

Если я правильно понял вопрос. Два временных измерения должны хорошо работать вместе. У меня есть два в проекте, который я делаю на работе, и они довольно быстро работают вместе. Убедитесь, что вы установили их в разделе измерения измерения куба, чтобы можно было различать две даты.

0 голосов
/ 20 сентября 2010

Вам просто нужно одно измерение даты DimDate. Ваша таблица фактов может иметь 2 внешних ключа для DimDate, один для начальной даты и один для конечной даты.

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
...