Получение результатов только за четные годы - PullRequest
0 голосов
/ 18 ноября 2018

MDX имеет приятную особенность, благодаря которой я могу указать диапазон членов:

SELECT ([Canada],[2006]:[2011]) on Rows,
      [Measures].members on Columns
FROM [Sales]

Можно ли рассчитать набор четных лет: {[2006], [2008], [2010]}?Я ищу способ, который бы работал для больших наборов, чтобы вручную не указывать годы.

Ответы [ 3 ]

0 голосов
/ 22 ноября 2018

Попробуй это. Я использовал приключенческие работы для запроса. Для логики мода я получил помощь от Mod Logic

WITH 
MEMBER [Measures].[Data Type] AS 
[Date].[Day of Year].CurrentMember.Properties ("Member_Value",TYPED) 

MEMBER [Measures].[IsEven] as
[Measures].[Data Type]-Int([Measures].[Data Type]/2)*2 

select {[Measures].[Internet Order Count]  }
on columns,
filter (
[Date].[Day of Year].[Day of Year],
[Measures].[IsEven]=0)
 on rows 
from [Adventure Works]
0 голосов
/ 24 ноября 2018

Плюс у вас может быть столбец в измерении даты, имеющий 1,0, чтобы указать, является ли год четным или нечетным.Затем просто используйте этот столбец в запросе MDX, не нужно выполнять все вышеуказанные манипуляции

0 голосов
/ 18 ноября 2018

Вы можете фильтровать свою функцию, используя функцию фильтра , объявленную функцию и MOD функцию (MOD возвращает остаток от деления - как% в Java ):

WITH
  FUNCTION isEven(Value _number) as Mod( Int(_number) , 2 ) = 0
SELECT
  FILTER( [Date].[Date].[Year] as t, isEven( Year( t.current.key) ) )  on 0
FROM [Cube]

Если вы часто используете этот фильтр, вы можете создать объявленную функцию FilterEven один раз в скрипте (то же самое для isEven ())

...