Как получить МАКСИМАЛЬНУЮ дату для конвертации валюты за несколько периодов, используя MDX - PullRequest
1 голос
/ 21 мая 2019

Резюме

Я новичок в 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

Любая помощь оценена и с радостью предоставит вам дополнительную информацию, если она вам понадобится.

1 Ответ

0 голосов
/ 23 мая 2019

Похоже, вы уже поняли этот бит:

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

Таким образом, чтобы получить Rate at Period (overridden), вы можете просто использовать найденную дату и сделать меру с помощью кортежа - единственное небольшое изменение в том, что вам нужно будет добавить элемент LastDate в иерархию, отличную от мер - Вы можете выбрать: в наших кубах я обычно выбираю иерархию Langauges, так как она редко используется:

WITH
MEMBER <OtherHierarchy>.[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.[Rate at Period (overridden)] AS
( 
  <OtherHierarchy>.[LastDate],
  [Measures].[Rate at Period]
) 
...