事实表的最佳做法取决于两个过程

我正在为在线业务构建星型模式。电子邮件通讯是关键过程之一。

但是分析取决于两个过程,我无法弄清楚如何对其进行最佳建模。

以下是该过程的工作方式:

  • 人员访问网站
  • 人员填写网络表单,并在我们的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以及诸如“订单状态”,“付款状态”和“退款状态”之类的维度。

但是我的搜索都没有找到这个常见问题的答案。当然,必须有一个针对该问题的术语和一个解决方案的模式名称,以便我可以了解更多信息?

ljm88888888 回答:事实表的最佳做法取决于两个过程

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2854412.html

大家都在问