MDX通过类别优化

时间:2017-08-09 18:31:13

标签: performance ssas mdx bigdata

这是我的衡量标准:

CREATE MEMBER CURRENTCUBE.[Measures].[ContactNumber]  AS 
nonempty(   
    UNORDER(
        (UNORDER([Contact].[Contact Id].[Contact Id].MEMBERS)   
        ,{linkmember([Period].[Per Quarter].currentmember,[Period Ending].[Per Quarter]).NextMember : STRTOMEMBER('TAIL([Period Ending].[Per Quarter].[' + [Period].[Per Quarter].currentmember.LEVEL.name +'],1)(0)')}
        ,{NULL :[Period].[Per Quarter].currentmember}       
        ,[Category].[Category].currentmember)
    )
,[MAX_BeginDate]
).count

它给了我一个时期某个类别中有多少客户

我的事实表很受欢迎

contact periodin periodout category
A       25       26        cat1
A       26       27        cat2
A       27       end       cat3
B       1        26        cat0
B       26       end       cat1
C       1        2         cat2
C       3        4         cat2
C       4        end       cat3

我的尺寸:

Period            regular by periodin 
Period ending     regular by periodout 
contact           regular by contact 
category          regular by category

所以对于26日,我会:

cat0       0
cat1       1(B)
cat2       1(A)
cat3       1(C)

如果有人认为有明显的改善...... 在2017年的一天,所有4个类别花了我超过1分钟-1分30秒。表格中有超过1亿行。每个客户至少有1个。日历始于2000年,有6000万客户。

谢谢

此致 Antho

2 个答案:

答案 0 :(得分:0)

也许这更快:

CREATE MEMBER CURRENTCUBE.[Measures].[ContactNumber]  AS 
 SUM(
   UNORDER(
        (UNORDER([Contact].[Contact Id].[Contact Id].MEMBERS)   
        ,{linkmember([Period].[Per Quarter].currentmember,[Period Ending].[Per Quarter]).NextMember : STRTOMEMBER('TAIL([Period Ending].[Per Quarter].[' + [Period].[Per Quarter].currentmember.LEVEL.name +'],1)(0)')}
        ,{NULL :[Period].[Per Quarter].currentmember}       
        ,[Category].[Category].currentmember)
    ), 
   IIF(
      ISEMPTY([MAX_BeginDate])
     ,NULL
     ,1
   )
)

我认为linkmember是一个缓慢的功能 - 您可以使用任何替代方案吗?

答案 1 :(得分:0)

感谢您的回答,

我相信我已经尝试用sum替换count函数而没有好的结果。 但是一旦我回去工作,我会尝试你的命题。

是的我可以通过使用级别,当前成员名称和strtomember函数重建每个成员来替换所有linkmember。这也是我也可以尝试的。

我也有进入客户的时期。我用它来了解当前客户是否“新”。也许有可能无法从开头那里浏览所有期间维度,而是从客户的“期间”浏览......