2016-09-22 108 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等)。