【问题标题】:How to analyze data between two fact tables?如何分析两个事实表之间的数据?
【发布时间】:2020-05-28 06:49:10
【问题描述】:

我有两个要一起分析的事实表,但它们之间没有一个直接链接。我必须使用多个维度来关联它们。所以我有一个更直接的例子,假设我有一个订单表和一个推荐表:

  • 订单

    • 订单编号
    • 订单行号
    • SalesRepresentativeId
    • 订购日期
    • 客户 ID
    • 产品编号
  • 推荐

    • ReferralId
    • 推荐日期
    • 有效期
    • 客户 ID
    • SalesRepresentativeId

这两个表位于两个不同的区域,因此很难一起分析它们。到目前为止,我已经决定这两张表是我的事实。并尝试使用它们共享的维度来关联它们。

但是,我不能保证每个订单只有一个推荐人,反之亦然。我需要应用的规则是在推荐日期和到期日期之间找到第一个订单商品,所有其他维度都匹配。但我还必须考虑到,如果订单已经分配给另一个推荐人,如果可能的话,它应该采用下一个可用的订单项目。

如果没有找到订单,我最终要计算的是推荐人的年龄,或迄今为止的年龄。

我可以看到在 Python 或 C# 中执行此操作的方法。但是是否可以在 DAX 中使用度量或计算字段来执行此操作?这样做有意义吗?例如,如果我要在早期的 Python 脚本中提前计算,我是否将我的事实合并到一个表中?

【问题讨论】:

  • 如果它们在数据模型中连接(正确),您应该能够为您需要的任何计算列/度量编写 DAX 查询

标签: powerbi data-modeling data-analysis


【解决方案1】:

在 Power BI DAX 中绝对可以做到这一点。但是,我想说在数据模型中而不是在 DAX 中更容易做到这一点。如果您精通 Python 脚本,则可以使用它来创建单个事实表。这将使您的所有进一步计算和测量更易于创建。

如果您仍想为此使用 DAX,请使用以下步骤:

第 1 步:根据 Customer ID 和 SalesRepID 创建 Orders 和 Referral 之间的关系 (您必须连接字段才能创建关系)

第 2 步:然后您必须创建一个过滤列,用于检查订单日期是否介于推荐日期和到期日期之间。比如:

 FILTER_FLAG = IF(Orders[OrderDate]>=RELATED(Referral[ReferralDate]) &&
                  Orders[OrderDate]<=RELATED(Referral[ExpirationDate]),1,0)

第 3 步:现在您必须创建一个排名变量来选择每个订单商品的最短订单日期。您还应该确保在计算中过滤 FILTER_FLAG=1。以下链接应该有助于实现这一目标:

https://community.powerbi.com/t5/Desktop/Summarize-and-Rank-by-multiple-columns-and-rows/td-p/330108

创建后,您可以简单地使用 Rank=1 的记录进行分析。如前所述,实现这一点可能有点复杂,所以我建议使用 Python 脚本预先创建一个表。希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-03
    • 2023-02-22
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2019-04-11
    相关资源
    最近更新 更多