繁体   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