Я пытаюсь настроить расчет куба. В настоящее время я получаю обменные курсы, которые будут отправлены в начале месяца. Иногда они меняются в течение месяца, и я получу курс для этой валюты и далее.
Первоначальная проблема заключается в том, что 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, заблокировал сервер, так как он пытался выполнить агрегацию для всего календаря: (
Какие-либо предложения о том, какой подход лучше всего использовать?