2016-09-22 261 views
1

我想以某种方式在数据集中过滤我的查询,其中我从月初到昨天获得了日期。第一部分很简单,我从报告参数中通过一个月,所以我从每个月的每一天都得到了值,但不知何故我必须将其限制到昨天。我试着把这个表达式放在where子句中,但它没有工作,因为我没有行的日期:FILTER([Date of shipment].[Date], [Date of shipment].[Date] < Format(Now(), "yyyyMMdd")。 我知道我可以过滤行,但重要的是,我不希望日期显示在行上。MDX筛选日期小于今天

编辑:此外,我可以使用主报告提供的参数,这是昨天的日期。但是,如何限制日期而不将其放在行上?像这样的东西不起作用:IIF(STRTOSET(@ShipmentDate, CONSTRAINED).Count = 1, STRTOSET(@ShipmentDate, CONSTRAINED), [Shipment Date].[Date] < @ShipmentDate))

回答

1

你已经有类似这样的东西:

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

+0

谢谢,这是非常好的。我会用你的解决方案。 – Dodzik

0

解决方案: 因为我有过月通过参数日期限于本月。这让我做到这一点:

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

方式,我这样做是丑陋的,但它的工作原理(这可能需要mainteance,在明年改变日期20170101等)。