2017-07-25 31 views
0

我剛剛實現了一個處理客戶和新聞訂閱的SSAS結構。SSAS(查找mdx度量)在某個日期的某個類別中統計不同的客戶

我負責的一種簡單的問題,我不會在現在解決..

這裏是我的事實表中的一個的簡單摘錄:

日期|貓|聯繫方式

201401 | noSub | Paul
201403 | Multi | Paul
201602 |單聲道| jean
201604 |單聲道| Paul
201604 | Multi | Paul
201609 | noSub | jean
201703 | Multi |保羅

我希望得到一個措施(contactNumber),它給了我多少跟有在要求的時間類別中..

我創建這個措施:(DC_Contact是一個計數不同的接觸中)

[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)

回答

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] 
}     

但更大的問題是目前性能...... 但我不明白如何在不減少數據量的情況下提高性能。

Regards

相關問題