SSAS(寻找mdx指标)在

时间:2017-07-25 16:46:21

标签: ssas mdx msbi

我刚刚实施了一个SSAS结构,用于处理客户和新闻订阅。

我处理的是一个我现在还没解决的简单问题..

以下是我的一个事实表的简单摘录:

日期|猫|接触

201401 | noSub |保罗
201403 |多|保罗
201602 |单声道|牛仔
201604 |单声道|保罗
201604 |多|保罗
201609 | noSub |牛仔
201703 |多|保罗

我想获得一个度量(contactNumber),它会在请求时给出一个类别中有多少联系人。

我创建了这个度量:(DC_Contact是一个不同于联系的Count)

[Measures].[ContactNumber] = AGGREGATE( NULL : [Period].[Per Quarter].CURRENTMEMBER ,[Measures].[DC_Contact])

但是当我在201703年检查它时,它给了我 noSub = 2 (excepted 1) Multi = 2 (excepted 1) Mono = 2 (excepted 0)

在201604年我会 noSub = 2 (excepted 2) Multi = 1 (excepted 0) Mono = 1 (excepted 0)

2 个答案:

答案 0 :(得分:0)

如果我们缺少有关您的多维数据集结构的详细信息,那么很难帮助您,但您可能应该使用DistinctCount(BufferedIOBase.raw attribute

不要犹豫,添加有关您的结构的更多信息,这应该有助于您。

答案 1 :(得分:0)

感谢您的回答。 我找到了问题的解决方案

CREATE MEMBER CURRENTCUBE.[Measures].[mono] AS 
filter(
    GENERATE(
        DynamicContactSet,  
        tail(
       -- ORDER(
            filter(
                [Contact].[Contact PMID].currentmember
                * {null : [Period].[Per quarter].currentmember}
                * {null : [Period].[Per week].currentmember}
                * [Category].[Category].[Category]  
            ,[Measures].[max_date]>0) 
       -- ,[Measures].[max_date],desc)
        ,1)
    ),cint([Category].[Category].currentmember.MEMBER_KEY)= 1
).count
, VISIBLE = 0; 

CREATE MEMBER CURRENTCUBE.[Measures].[multi] AS
filter(
    GENERATE(
        DynamicContactSet,  
        tail(
       -- ORDER(
            filter(
                [Contact].[Contact PMID].currentmember
                * {null : [Period].[Per quarter].currentmember}
                * {null : [Period].[Per week].currentmember}
                * [Category].[Category].[Category]  
            ,[Measures].[max_date]>0) 
       -- ,[Measures].[max_date],desc)
        ,1)
    ),cint([Category].[Category].currentmember.MEMBER_KEY)= 2
).count
, VISIBLE = 0; 


CREATE MEMBER CURRENTCUBE.[Measures].[unsuscriber]  as 
filter(
    GENERATE(
        DynamicContactSet,  
        tail(
       -- ORDER(
            filter(
                [Contact].[Contact PMID].currentmember
                * {null : [Period].[Per quarter].currentmember}
                * {null : [Period].[Per week].currentmember}
                * [Category].[Category].[Category]  
            ,[Measures].[max_date]>0)
   -- ,[Measures].[max_date],desc)
    ,1)
    ),cint([Category].[Category].currentmember.MEMBER_KEY)=3
).count
, VISIBLE = 0; 


CREATE MEMBER CURRENTCUBE.[Measures].[notopin] as 
DynamicContactSet.count - (mono + multi + unsuscriber)
, VISIBLE = 0; 



CREATE MEMBER CURRENTCUBE.[Measures].[ContactNumber]  AS
CASE  
    WHEN cint([Category].[Category].currentmember.MEMBER_KEY)= 1 THEN mono
    WHEN cint([Category].[Category].currentmember.MEMBER_KEY)= 2 THEN multi
    WHEN cint([Category].[Category].currentmember.MEMBER_KEY)= 3 THEN unsuscriber
    ELSE notopin 
END
, VISIBLE = 1; 

然后我可以随时了解一个类别中有多少联系:

SELECT [Measures].[ContactNumber] on columns 
 ,(

   {[Period].[Per Quarter].[month].[M01-2000] 
   ,[Period].[Per Quarter].[month].[M01-2005]
   ,[Period].[Per Quarter].[month].[M01-2007]
   ,[Period].[Per Quarter].[month].[M01-2010]
   ,[Period].[Per Quarter].[month].[M01-2015]
   ,[Period].[Per Quarter].[month].[M01-2017]
   ,[Period].[Per Quarter].[month].[M12-2017]}
   ,[Category].[Category].[Category]
) ON rows

FROM [BI SUBSCRIPTION]
where
{                          
   [Contact].[Contact PMID].[jean paul]  
   [Contact].[Contact PMID].[jean michel] 
   [Contact].[Contact PMID].[jean françois]    
   [Contact].[Contact PMID].[jean christophe]    
   [Contact].[Contact PMID].[jean rachid] 
}                   

但现在更大的问题是表现...... 但我没有看到如何在不降低数据量的情况下提高性能。

此致