【发布时间】:2014-08-21 16:27:45
【问题描述】:
我想为我们的用户建模一个事实表,以帮助我们计算 DAU(每日活跃用户)、WAU(每周活跃用户)和 MAU(每月活跃用户)。 这些措施的定义如下: 1. DAU 是过去 28 天内每天活跃的用户。 2. WAU是过去28天内每7天至少有1天活跃的用户 3. MAU 是在过去 28 天内至少活跃 20 天的用户
我已经用我的事实表和用户维度表构建了一个 SSAS 多维数据集,如下所示
事实:{ 日期、用户 ID、活动名称} 维度:{日期、user_id、性别、年龄、国家/地区}
现在我想在这些数据上构建一个多维数据集,以便我们可以查看过去 28 天任何一天的所有度量。
我最初想在 SQL 服务器中为所有用户存储 28 天的数据,然后对日期进行不同的计数,以查看他们属于哪些度量值。但事实证明这非常昂贵,因为每天的数据量很大。几乎1000 万行。
所以我的下一个想法是对事实表进行建模(在将其移至 SQL 之前),使其具有一个名为“active_status”的新列,它是一个 32 位二进制类型列。
基本上,我将存储一个二进制数(或等效十进制数),例如 11000001101111011111111111111,它在用户处于活动状态的日子设置了一个位,在用户不活动的日子设置了一个位。
这样我可以在一天内压缩 28 天的数据,然后再加载到数据集市 现在的问题是,我认为 MDX 不支持像常规 SQL 那样对计算成员的表达式中的列进行按位运算。我希望使用 MDX 创建计算度量 daily_active_users、weekly_active_users 和monthly_active_users,它查看用户的这个 active_status 位并执行按位运算来确定状态。
关于如何解决这个问题的任何建议?如果 MDX 不允许按位,我还能做些什么 SSAS 来实现这一点。
感谢您的帮助
补充说明: @弗兰克
有趣的想法是使用视图进行从位集到维度类别的转换..但我担心它不会起作用。因为我很少有维度连接到具有多对多关系的事实表......例如:我有一个名为 DimLanguage 的维度和另一个名为 DimCountry 的维度,它们具有多对多关系。最终我想在多维数据集中做的是根据维度组合计算 COUNT(DISTINCT UserId) 的 DAU/WAU/MAU。所以对于前;如果用户不是维度国家 US 的 MAU,因为他在 28 天中只有 15 天处于活动状态......但他将被考虑
【问题讨论】:
-
我是否正确理解单个用户的修复类别为 DAU、WAU 或 MAU,并且这与日期无关?或者您是否希望为用户提供此位集,代表过去 28 天到今天为止的每一天?
-
no.. 一个用户可以同时是 DAU 和 WAU 和 MAU。是的,我想要代表过去 31 天到今天的每一天的用户位集。 MAU 定义将来可能会从 28 天变为整个月,即 31 天,因此我想将其保持在 31