MDX过滤日期比今天少

时间:2016-09-22 09:29:34

标签: reporting-services ssas mdx business-intelligence ssas-2012

我想以某种方式在数据集中过滤我的查询,其中我从月初到昨天都有日期。第一部分很容易,我从报告参数中过了一个月,所以我从每个月的每一天都得到了值,但不知怎的,我必须将这个限制到昨天。我尝试将这个表达式放在where子句中,但由于我没有在行上设置日期,所以它根本不起作用:loc2。 我知道我可以过滤行,但重要的是,我不希望在行上显示日期。

编辑:另外我可以使用主报告提供的参数,即昨天的日期。但是如何限制日期而不将其放在行上?这样的事情不起作用:FILTER([Date of shipment].[Date], [Date of shipment].[Date] < Format(Now(), "yyyyMMdd")

2 个答案:

答案 0 :(得分:2)

你已经有类似的东西:

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

返回:

enter image description here

大多数多维数据集都有一个多级日期层次结构 - 因此您可以将代码更改为类似于明年您不需要更改硬编码位:

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

enter image description here

答案 1 :(得分:0)

解决方案: 由于我通过参数日期的月份被限制在当月。这让我可以这样做:

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

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