簡體   English   中英

如果所選日期在實際記錄SSAS MDX中的開始日期和結束日期之間,則列出維度成員

[英]List Dimension Members if selected date falls between Start Date and End Date in fact records SSAS MDX

我有一個包含發票行項目的事實表,並且由於這些行項目是訂閱,因此涉及開始日期和結束日期

LineItem Customer       Product         OrderDate       StartDate       EndDate
1        Customer A     Product A       1/1/2013        1/1/2013        3/1/2013
2        Customer A     Product B       1/1/2013        1/1/2013        4/1/2013
3        Customer B     Product A       1/1/2013        2/1/2013        6/1/2013

客戶希望在Excel(數據透視表)中選定日期的活動客戶列表 他們想選擇一個日期,如果該日期介於任何發票行項目記錄的開始日期和結束日期之間,則應顯示客戶。 例如:

如果選擇了“ 1/5/2013”​​,則應返回“客戶列表”(LineItem:1、2):客戶A

如果選擇了“ 2013年2月10日”,則應返回“客戶列表”(LineItem:1、2、3):客戶A客戶B

如果選擇“ 2013年5月15日”,則應返回“客戶列表”(訂單項:3):客戶B

接下來,客戶也要按產品過濾,因此:

如果選擇了“ 2013年3月20日”並且選擇了“產品A”,則應返回“客戶列表”(訂單項:3):“客戶B”

在SQL中,這非常簡單:

Select Distinct Customer from Fact where @SelectedDate between StartDate and EndDate

我不確定如何在SSAS中解決此問題以及如何處理“選定日期”,這是否應該是另一個維度? 如果是這樣,它將與事實表有什么關系?

還是可以使用其他方式在Excel / PowerPivot端完成此操作?

另外,我最初的方法是創建客戶命名集-但我不確定如何根據日期范圍等創建它。

任何幫助將不勝感激! 謝謝

如果您能夠編寫MDX,則可以執行以下操作,假設存在一個事實維度表,事實表中有兩個外鍵指向該維度表,角色扮演維度命名為[Start Date][End Date] ,而@SelectedDate是與日期鍵格式匹配的字符串:

SELECT {}
       ON COLUMNS,
       [Customer].[Customer Name].Members
       ON ROWS
  FROM [Cube]
 WHERE (null : StrToMember('[Start Date].[Date].[' + @SelectedDate + ']'))
       *
       (StrToMember('[End Date].[Date].[' + @SelectedDate + ']'): null)

WHERE子句是兩組的叉積:一組開始日期,包含從維度中出現的第一個日期到所選日期的所有日期,以及一個終止日期,其中包含從所選日期到最后一個日期的所有結束日期。在多維數據集。

但是,除了通過VBA或Excel插件解決方案,我認為用戶不可能以某種方式使Excel運行這種類型的語句。 我認為應該有可能,但是對此沒有經驗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM