列表维成员如果选定日期落在开始日期和结束日期之间,则实际记录SSAS MDX

时间:2014-07-16 17:58:21

标签: sql ssas mdx powerpivot

我有一个包含发票行项目的事实表,由于这些订单项是订阅,因此需要包含开始日期和结束日期

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

如果' 2/10 / 2013'如果选中,则客户列表应返回(LineItem:1,2,3): 客户A. 客户B

如果' 5/15/2013'如果选中,则客户列表应返回(LineItem:3): 客户B

接下来,客户也希望按产品过滤,所以:

如果' 3/20/2013'选中并选择产品A,客户列表应返回(LineItem:3): 客户B

在SQL中这很容易:

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

我不确定如何在SSAS中解决此问题以及如何处理“选定日期”'如果这是另一个维度?如果是这样,它如何与事实表相关?

或者可以通过其他方式在Excel / PowerPivot端完成此操作吗?

我最初的方法是创建一组命名客户 - 但我不知道如何根据日期范围等创建它。

任何帮助将不胜感激! 谢谢

1 个答案:

答案 0 :(得分:0)

如果你能够编写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子句是两个集合的交叉乘积:一组开始日期,包含从维度中出现的第一个到所选日期的所有开始日期,以及包含从所选日期到所有日期的所有结束日期的结束日期之一立方体中的最后一个。

但是,我不认为用户可以通过某种方式让Excel以某种方式运行此类型的语句,除非通过VBA或Excel插件解决方案。我认为这应该是可能的,但没有经验。