[英]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.