我正在为在线业务构建星型模式。电子邮件通讯是关键过程之一。
但是分析取决于两个过程,我无法弄清楚如何对其进行最佳建模。
以下是该过程的工作方式:
- 人员访问网站
- 人员填写网络表单,并在我们的CRM中记录为联系人
- 人员收到一个链接,要求他确认这是否真的是他的电子邮件
- 人员点击该链接并被确认
- 人员现在可以接收我们的电子邮件
注册和确认过程在不同的时间进行。大多数人会在同一天单击确认链接,但我们会在注册后几天内发送两封后续电子邮件,因此有些人可能仅在几天后确认电子邮件。
最重要的是,一个人可以在网站上多次注册。我们大多数的注册人都是交换电子邮件地址以换取诸如eBook之类的资源的人。
只要我们系统中未将该人的电子邮件标记为已确认,我们就会要求该人在每次注册时进行确认。
由于我们有多个优惠,因此人们要求电子书A,电子书B和电子书C并仅在几次注册后进行确认的情况并不少见。
在事实表中,每个未确认电子邮件的注册都标记为ConfirmationRequested-> True。
如果该人单击任何确认请求电子邮件的确认链接,则应认为他对每个注册都已确认。
我要如何分析数据
- 看看我们有多少次注册
- 查看重新注册的注册人数以及CRM(新电子邮件地址)中的新联系人多少
- 查看有多少新联系人已确认其电子邮件地址(并成为正式用户)
- 查看要求重新注册以确认其电子邮件的人数以及有多少人这样做了
- 分析人们确认电子邮件地址需要多长时间
- 分析确认率
- 按联系人的确认状态过滤联系人,并分析已确认或未确认的人的共同点
我真的不关心与注册隔离的确认。
出于我的目的,我希望有一个ConfirmationStatus维度为...
- 如果已在注册后7天内确认,则为“已确认”
- 如果该人尚未确认,但自注册以来还没有过去7天,则“待定”
- 如果未在7天内确认该人(即使该人稍后再确认),则为“未确认”
最重要的是,我通常在星期一查看此报告,以分析前一周并将其与其他周进行比较。 (我已经在一个平面表格中找到了此报告的工作版本,但我正在尝试学习如何构建正确的星型图。)
这还有一个额外的挑战,例如,在周日注册的联系人只有不到一天的时间来确认,并且会拖低确认率,如果与上周所有联系人都拥有完整联系人的前一周相比,最近一周看起来会很糟糕7天确认。
因此,我计算了所有周的“在注册周内确认”的确认计数和比率,以进行苹果与苹果的比较。
如何对此建模...
我考虑了以下选项...
选项1:独立的事实表 由于这些是在不同时间发生的独立过程,因此我了解到我应该创建独立的事实表,然后跨通用维度进行钻取。
我可以计算注册请求表中要求确认的注册,然后通过联系和日期维度计算注册后一周内的确认。
但这不允许我按确认状态过滤注册。
这就是为什么我在考虑...
选项2:结合了注册和确认的事实表
我在想这样的事情:
| Dim Signup Info | | | Dim Contact | | | Fact Signups | |
|-----------------------|------|---|-------------|------|---|----------------------|----|
| SignupInfoKey | SK | | ContactKey | SK | | SignupDateKey | FK |
| SignupType | SCD1 | | Name | SCD1 | | ConfirmationDate | FK |
| ConfirmationRequested | SCD1 | | Email | SCD1 | | SignupInfoKey | FK |
| ConfirmationSucceeded | SCD1 | | ... | | | ContactKey | FK |
| ConfirmationStatus | SCD1 | | | | | SignupId | DD |
| | | | | | | SignupDateTime | DD |
| | | | | | | ConfirmationDateTime | DD |
| | | | | | | Signups | M |
| | | | | | | NewContacts | M |
| | | | | | | Confirmationmin | M |
| | | | | | | ConfirmationDays | M |
事实上,我需要ConfirmationDate来计算报告时间的“一周内确认”度量(我正在使用powerbi,在这里很容易)。我当然也可以创建一个维度“ ConfirmedWIthinWeek”,然后基于该维度进行过滤,但是它不会那么灵活...例如,如果以后我决定每天或每月查看数据,该怎么办?
另一个需要考虑的问题是,在过去7天中,每次增量负载都需要重新处理和更新事实表。
我知道这对维度来说还可以,但事实表也可以吗?
所以我的问题是
- 选项2是好的解决方案还是有更好的方法呢?
- 可以更新事实表还是不建议这样做?
总的来说,我的问题是:我想念什么?
这似乎是很常见的事情。一个明显的例子是一个订单星,它的事实表列包含AmountOrdered,AmountPaid,AmountRefunded以及诸如“订单状态”,“付款状态”和“退款状态”之类的维度。
但是我的搜索都没有找到这个常见问题的答案。当然,必须有一个针对该问题的术语和一个解决方案的模式名称,以便我可以了解更多信息?