Генерация диапазона месяцев с использованием многоуровневых иерархий

Я хочу отфильтровать месяцы [ComptaEcriture Date] выбрав только месяцы с [ComptaPlanId].[ComptaDateDebut] в [ComptaPlanId].[ComptaDateFin], но с тех пор [ComptaDateDebut] а также [ComptaDateFin] не из того же уровня, и бот не из того же измерения, что и [ComptaEcriture Date].[ComptaEcriture Date].[Month]Я не знаю, как этого добиться.

Если бы я мог генерировать диапазон месяцев, это было бы здорово. Мои размеры следующие:

Мои размеры

1 ответ

Решение

Предполагая, что вы проверяете, что PlanId не является участником All, вы можете использовать для этого функцию isAll MDX +.

Для набора мы скомбинируем функцию Filter с объявленной функцией, хотя мы могли бы поместить весь код в фильтр. Это выглядит как:

WITH
  FUNCTION inRange(Value _date,Value _start, Value _end) AS _start <= _date AND _date <= _end
  SET myDates as  Filter( [Date].[Date].[Month] as t, inRange(t.current.key, DateTime(2015,6,1), DateTime(2017,1,1)  ) )
SELECT
 myDates on 0
FROM [Cube]

И используя компактную и быструю версию:

SELECT
 Filter( [Date].[Date].[Month] as t, DateTime(2015,6,1) <= t.current.key AND t.current.key <= DateTime(2017,1,1) ) on 0
FROM [Cube]

Используя участников:

WITH
  FUNCTION inRange(Value _date,Value _start, Value _end) AS _start <= _date AND _date <= _end
  SET myDates as  Filter( [Date].[Date].[Month] as t, 
                    inRange(t.current.key, [ComptaDateDebut].currentmember.key, [ComptaDateFin].currentmember.key  ) 
                  )
SELECT
 myDates on 0
FROM [Cube]

Вы можете использовать contextMember вместо currentMember, который проверяет также в слайсере (FILTER BY или subselect)

Другие вопросы по тегам