Агрегация рекурсивных вычислений на уровне дня - PullRequest
0 голосов
/ 26 июля 2010

Я пытаюсь настроить расчет куба. В настоящее время я получаю обменные курсы, которые будут отправлены в начале месяца. Иногда они меняются в течение месяца, и я получу курс для этой валюты и далее.

Первоначальная проблема заключается в том, что LastNonEmpty использует сомнительную гранулярность, что означает, что когда я запрашиваю по дням, у большинства дней нет обменных курсов, поэтому вычисления не выполняются. Я заменил показатель обменного курса, сначала рекурсивным расчетом, но позже следующим:

WITH  
MEMBER [Measures].[EOD]
AS 
    Aggregate({NULL:[Date].[Calendar Y M D].CurrentMember}, [Measures].[End Of Day Rate])

Таким образом, при просмотре по измерению даты он получит самый последний обменный курс. Это позволяет ежедневный расчет следующим образом:

MEMBER [Measures].[Converted]
AS
    SUM 
    ( 
        {[Currency].[Currency].[Currency] * [Date].[Calendar Y M D].CurrentMember},
        (
            (   
                [Measures].[Sales]
            )
            / [Measures].[EOD]
        )
    )

Наконец, я использую это в запросе:

SELECT
{
    [Measures].[Converted]
}
ON COLUMNS,
NON EMPTY
{
    [Date].[Calendar Y M D].[Calendar Day].&[2010-Q3-08-01] : 
    [Date].[Calendar Y M D].[Calendar Day].&[2010-Q3-08-31] 
}
ON ROWS
FROM [Cube]

Это все работает нормально, но в идеале я бы предпочел делать запросы по годам / месяцам, так как это отчеты на конец месяца. Я могу суммировать все это на уровнях кода, но я бы предпочел, чтобы MDX мог делать это сам.

Проблема в том, что вычисления выполняются почти рекурсивно на уровне дня, тогда я бы хотел, чтобы они были свернуты до уровня месяца (или даже года).

Я пробовал мастер конвертации валют, меняя обменный курс на агрегированный по времени выше, но пытаясь просмотреть куб в SSMS, заблокировал сервер, так как он пытался выполнить агрегацию для всего календаря: (

Какие-либо предложения о том, какой подход лучше всего использовать?

1 Ответ

1 голос
/ 27 июля 2010

Если вы использовали представления или именованные запросы в DSV вместо таблиц, то вы можете настроить представление или именованный запрос, чтобы ограничить данные днями, в которые вы загружали данные обменного курса.Я не уверен, что это будет соответствовать потребностям вашего бизнеса, но вы могли бы устранить проблемы с пустыми данными с помощью этого подхода.В конце концов, нет никакой пользы для загрузки данных, которые не содержат значения, или, что еще хуже, предварительной загрузки предполагаемого обменного курса, который необходимо будет перезаписать, когда фактические цифры станут доступны.

...