当前位置: 代码迷 >> Sql Server >> SSAS计算成员,求时间段内非重复值的有关问题
  详细解决方案

SSAS计算成员,求时间段内非重复值的有关问题

热度:72   发布时间:2016-04-24 09:04:14.0
SSAS计算成员求救,求时间段内非重复值的问题
SSAS的计算成员中:
SUM( 
(
ParallelPeriod( 
[时间维度].[时间层次].[月],
1, 
[时间维度].[时间层次].CurrentMember 
) : [时间维度].[时间层次].CurrentMember)
,[Measures].[成交客户数]
)
这样俺系可以算出一段时间内的客户累计的,但是不对啊,要一段时间内的非重复的客户,
我这里拉了一个,[Measures].[客户编码]的无聚合的度量。
期间段内的非重复客户要怎么写呢?-。-

------解决思路----------------------
没有在后面做过非重复,一般在筛选集合数据的时候,已经做好。后期cube的mdx计算起来比较简单。

------解决思路----------------------
计算一段时间内的用户数量  ,我们使用 exists 来判断一个用户是否买过物品,具体察看exists的用法,这里我们没有定义时间段而是直接使用了年来作为各个时间段,我们可以根据实际要求来自己定义需要的set区间


WITH MEMBER [Measures].[CustomerNum] AS 
 (
  EXISTS([Customer].[Customer].[Customer],,"Internet Sales")
          
 ).COUNT

SELECT {[Measures].[Internet Sales Amount],[Measures].[CustomerNum]} ON 0,
[Date].[Calendar].[Calendar Year] ON 1
FROM [Adventure Works]

 

如果我们只关注用户数量我们可以把度量去掉 
WITH MEMBER [Measures].[CustomerNum] AS 
 (
  EXISTS([Customer].[Customer].[Customer],,"Internet Sales")
          
 ).COUNT

SELECT {[Measures].[CustomerNum]} ON 0,
[Date].[Calendar].[Calendar Year] ON 1
FROM [Adventure Works]


 


------解决思路----------------------
我不知道你是要计算在一定时间内的注册用户数,还是有购物记录的用户数,其实这两个在处理上是一样的,所以这个问题应该是很容易处理的
------解决思路----------------------

--MDX  写法如下
WITH MEMBER [Measures].[CustomerNum] as
  Exists([Customer].[Customer].[Customer].members,
         [Date].[Calendar Year].currentmember  ,"Internet Orders"
  ).count
  
select  [Measures].[CustomerNum] on 0 ,
     [Date].[Calendar Year].members on 1
from [Adventure Works]
--你可以将 上面的计算列嵌入到你cube 中 然后查询时候直接调用就可以了 
Create MEMBER [Measures].[CustomerNum] as
  Exists([Customer].[Customer].[Customer].members,
         [Date].[Calendar Year].currentmember  ,"Internet Orders"
  ).count