这是我的衡量标准:
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
答案 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。这也是我也可以尝试的。
我也有进入客户的时期。我用它来了解当前客户是否“新”。也许有可能无法从开头那里浏览所有期间维度,而是从客户的“期间”浏览......