MDX 过滤器日期小于今天

MDX Filter date less than today

我想以某种方式在数据集中过滤我的查询,其中我得到从月初到昨天的日期。第一部分很简单,我从报告参数中传递了月份,所以我从一个月中的每一天都得到了值,但不知何故我必须将其限制到昨天。我尝试将此表达式放在 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))

解决方法: 由于我通过参数日期传递了月份,因此仅限于当前月份。这让我可以这样做:

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

我这样做的方式很丑陋,但它有效(它可能需要维护,明年将日期更改为 20170101 等等)。

您已经有类似的东西了:

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

Returns:

大多数多维数据集都有多级日期层次结构 - 因此您可以将代码更改为类似这样的内容,这样明年您就不需要更改硬编码位:

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]' 那么我得到以下信息: