Резюме
Я новичок в MDX, но меня попросили улучшить конвертацию валюты
функциональность в кубе. Сама проблема кажется простой.
Для любого заданного выбранного периода получите последнюю дату и используйте ее в качестве даты отчетности для конвертации валюты.
Например, пользователь выбирает периоды с января 2018 по октябрь 2018. Последняя дата будет 31-октябрь-2018.
Конвертация валют - много в одну отчетную валюту, поэтому мы будем использовать курсы с 31 октября 2018 года.
Методы пробовал
Я пробовал разные способы получить последнюю дату, используя:
- МАКС (с существующими и без)
- ClosingPeriod
- Отдельная группа измерения курсов валют и размер даты
Они отлично работают, если пользователь выбирает один период, а расчет только для этого периода.
Однако проблема заключается в том, что в течение нескольких периодов (например, с начала года или в расчете LTD) конечная ставка берется из каждого месяца.
Например, каждая позиция в соответствующем месяце будет конвертирована с использованием значения ставки за период за этот месяц (7,285 января), а не с использованием значения в октябре 2018 года 7,027.
Период | Оценить в период | LastDate | LastDateExisting
январь 2018 | 7,285 | 20191231 | 20180131
февраль 2018 | 7.273 | 20191231 | 20180228
март 2018 | 7.275 | 20191231 | 20180331
апр. 2018 | 7.201 | 20191231 | 20180430
май 2018 | 7.146 | 20191231 | 20180531
июнь 2018 | 7.118 | 20191231 | 20180630
июль 2018 | 7.116 | 20191231 | 20180731
сент. 2018 | 7.102 | 20191231 | 20180930
окт. 2018 | 7,027 | 20191231 | 20181031
Пример кода
Вот пример метода MAX, который я нашел в различных поваренных книгах MDX для получения последней даты. Я предполагаю, что из-за CurrentMember я получаю результаты за период. Я понимаю, что это нормальное поведение MDX, но из-за требования нужно было бы это сломать.
Пример MAX без существующего является самым близким, поскольку он возвращает ту же дату, но я не уверен, что это можно легко отфильтровать по фактическому периоду закрытия?
WITH
MEMBER Measures.[LastDate] AS
MAX( [Accounting Date].[Year – Quarter – Month – Date].[Date].MEMBERS,
IIF( [Measures].[Rate at Period] = 0,
NULL,
[Accounting Date].[Year – Quarter – Month – Date].CurrentMember.Member_Key
)
)
MEMBER Measures.[LastDateExisting] AS
MAX( EXISTING [Accounting Date].[Year – Quarter – Month – Date].[Date].MEMBERS,
IIF( [Measures].[Rate at Period] = 0,
NULL,
[Accounting Date].[Year – Quarter – Month – Date].CurrentMember.Member_Key
)
)
Ожидаемые результаты
Мне бы хотелось, чтобы в последнем столбце даты отображались все "20181031", как показано ниже.
Период | Ставка за период (отменено) | LastDate
январь 2018 | 7,027 | 20181031
февраль 2018 | 7,027 | 20181031
март 2018 | 7,027 | 20181031
апр 2018 | 7,027 | 20181031
май 2018 | 7,027 | 20181031
июнь 2018 | 7,027 | 20181031
июль 2018 | 7,027 | 20181031
сентябрь 2018 | 7,027 | 20181031
окт. 2018 | 7,027 | 20181031
Любая помощь оценена и с радостью предоставит вам дополнительную информацию, если она вам понадобится.