如何编写MDX语句或查询来选择上个月付款但尚未支付此(当月)月份的客户?

时间:2011-12-14 19:46:07

标签: sql-server-2008 ssas mdx ssas-2008

如何编写MDX语句或查询来选择上个月付款但尚未支付此(当月)月的客户?我有一个在Microsoft SQL Server Analysis Services R 2上设计和部署的数据立方体。我有一个客户维度和一个事实表。  请帮忙。

2 个答案:

答案 0 :(得分:0)

我假设您有一个[时间]维度,以及一个包含客户已付款的值的度量。我认为Filter()函数可以帮助您将所有客户端集合减少到您感兴趣的客户端。

SELECT {Filter({[Client].[SomeLevel].members}, ([Time].[LastMonth], [Measures].[whatever]) > 0 AND ([Time].[ThisMonth], [Measures].[whatever]) = 0} ON ROWS, {[Measures].[whatever]} ON COLUMNS FROM [CubeName]

你麻烦可能决定用什么代替我写的地方[时间]。[ThisMonth] - 在StackOverflow上查看其他答案,以选择“当前”日期。

答案 1 :(得分:0)

首先,您必须确定当前月份和上个月。一种方法是使用VBA!Date函数计算它。

因此,如果您的日期以[{1}}格式存储,并假设您有一个度量12/31/2014和一个带有Payment层次结构的日期维度,则以下代码可以为您提供帮助。

Year-Quarter-Month-Date

如果你想通过这个"当前"来自前端的值,使用WITH MEMBER [Measures].ValueThisMonth AS ( [Date].[Year-Quarter-Month-Date].CURRENTMEMBER.PARENT, [Measures].[Payment] ) MEMBER [Measures].ValueLastMonth AS ( [Date].[Year-Quarter-Month-Date].CURRENTMEMBER.PARENT.LAG(1), [Measures].[Payment] ) SELECT [Client].[Client Name].MEMBERS HAVING ISEMPTY([Measures].ValueThisMonth) AND NOT(ISEMPTY([Measures].ValueLastMonth)) ON 0 FROM [Your cube] WHERE StrToMember("[Date].[Year-Quarter-Month-Date].[Date].&[" + FORMAT(VBA![Date](), "MM/dd/yyyy") + "]" + "]") 子句中的参数。