Дата фильтра MDX меньше, чем сегодня

Я хочу отфильтровать свой запрос в наборе данных таким образом, чтобы у меня были даты с начала месяца до вчерашнего дня. Первая часть проста, я передаю месяц из параметров отчета, поэтому я получаю значения каждый день в месяце, но каким-то образом я должен ограничить это до вчерашнего дня. Я попытался поместить это выражение в предложение where, но оно не сработало вообще, поскольку у меня нет даты в строках: FILTER([Date of shipment].[Date], [Date of shipment].[Date] < Format(Now(), "yyyyMMdd"), Я знаю, что могу фильтровать строки, но важно то, что я не хочу, чтобы Дата отображалась в строках.

Изменить: дополнительно я могу использовать параметр, предоставленный основным отчетом, который является вчерашней датой. Но как мне ограничить дату, не помещая ее в строки? Нечто подобное не работает: IIF( STRTOSET(@ShipmentDate, CONSTRAINED).Count = 1, STRTOSET(@ShipmentDate, CONSTRAINED), [Shipment Date].[Date] < @ShipmentDate))

2 ответа

Решение

У вас уже есть что-то похожее на это:

SELECT 
  {} ON 0
 ,
    [Date].[Calendar].[Date].&[20050101]
  : 
    StrToMember
    ('[Date].[Calendar].[Date].&[20050105]'   //<<hard-coded to illustrate 
     ,constrained
    ) ON 1
FROM [Adventure Works];

Возвращает:

Большинство кубов имеют многоуровневую иерархию дат - так что вы можете изменить свой код на что-то вроде того, чтобы в следующем году вам не нужно было менять жестко закодированный бит:

SELECT 
  {} ON 0
 ,
    Descendants
    (
      Exists
      (
        [Date].[Calendar].[Calendar Year].MEMBERS
       ,StrToMember
        (@ShipmentDate
         ,constrained
        )
      ).Item(0)
     ,[Date].[Calendar].[Date]
    ).Item(0)
  : 
    StrToMember
    (@ShipmentDate
     ,constrained
    ) ON 1
FROM [Adventure Works];

Если @ShipmentDate установлен в '[Date].[Calendar].[Date].&[20060105]' тогда я получаю следующее:

Решение: Поскольку у меня прошел месяц через параметры, даты были ограничены текущим месяцем. Это позволило мне сделать это:

[Shipment date].[Datw].&[20160101] : STRTOMEMBER(@ShipmentDate, constrained)

То, как я это сделал, ужасно, но это работает (может потребоваться обслуживание, изменить дату на 20170101 в следующем году и т. Д.).

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