背景:我正在对通话详细记录(CDR)数据进行分析,以便根据客户的通话时长,通话时间(假日通话或非假期通话,商务通话)来识别客户或非商务电话),订户年龄组和性别。数据来自两个表名cdr (include card_number, service_key, calling, called, start_time, clear_time, duration column)
和subscriber_detail (include subscriber_name, subscriber_address, DOB, gender column)
我已经设计了OLAP,如下所示。
Call_date包含年,月,日的通话日期。 Call_time是第二次调用的时间。
问题: - 如果我们在第二天接受call_time,那么它每天都有86400列(可能是维数的诅咒),因此我们认为通过采用30秒的时间脉冲来降低其维度(电信在脉冲的基础上收取金钱,30是我们上下文的脉冲持续时间)。 第一个问题是: - 这是用脉冲持续时间替换时间的最佳方法吗?并且秒是: - 如果一个用户在脉冲范围上进行多于2次呼叫,则可能会导致问题,即首次呼叫在21:01:00开始,在21:01:05结束,他开始第二次在21:01:15致电,在21:01:20结束。如何解决这类问题。
答案 0 :(得分:5)
如果我是你,我会将时间分成10分钟的时段,并使用链接列表在给定时间段内存储多个持续时间,因此总时间尺寸为144(限制仅限下滚10分钟)。
答案 1 :(得分:2)
我会在几秒钟内保持start_call_time,end_call_time和ellapsed_call_time。
然后使用ellapsed_time并不意味着立方体的维度为86400个成员;您可以设置'范围/带状'维度:即使用间隔而不是瞬间构建的维度。例如,对于icCube(www),这是可能的。