【问题标题】:How to handle situation where-in date table has duplicates?如何处理输入日期表重复的情况?
【发布时间】:2023-01-10 23:01:35
【问题描述】:

在数据库中我有一个日期表。日期表有每个客户的日历。例如说有 10 个客户,日历是 5 年,那么我在这个表中有 10 * 5 * 365 条记录。

当我将此表导入 Power BI 时,它不允许我将其标记为日期表(由于重复)。

由于它有重复的日期,当我创建从该表到事实表的关系时,它被创建为 M:M 关系(msdn 文档提到 M:M 会降低模型性能)。

在报告上,我有一个切片器以确保只选择 1 个客户端,这样日历就不会重复并且视觉效果很好。

问题:

  1. 如果我选择继续将其用作我的日期表而不将其标记为日期表,我不能在 Power BI 中做什么?哪些东西对我不起作用?可能是某些 DAX 函数(比如什么?)?
  2. 处理此问题的方法是什么,以便我可以将其转换为正确的日期表?

【问题讨论】:

    标签: powerbi dax powerquery data-modeling


    【解决方案1】:
    1. 如果没有合适的日期表,时间智能功能将无法工作。此外,应尽可能避免多对多,因为这会使 DAX 的其余部分变得非常复杂。
    2. 根据定义,日期表只是一个没有重复的维度和涵盖整年的完整日期范围。您可以从 PQ 中的事实表创建此维度。

      真正的问题是为什么每个客户都有自己的日历?客户 1 的日历和客户 2 的日历有什么区别?

      多对多关系是“有限”关系,并且在很多方面都不像正常的一对多关系(例如,没有用于缺少维度键的空白行)。这是一个非常详细的主题,您最好从这里的专家那里阅读:https://www.sqlbi.com/articles/strong-and-weak-relationships-in-power-bi/

      关于每个客户有不同的日历表,我想我现在明白了,解决方案可能很复杂。如果您只有几个客户,我很想将这些日历创建为标准日期表的附加列。例如日期 - 日 - 月 - 年 - 等等 - 客户类型 1 FY 开始,客户类型 2 FY 开始

      理想情况下,每个客户端之间都有一些共性,因此您可以像我对客户端类型而不是单个客户端所做的那样通用化特殊列。

      从事实表创建维度表在 PBI 中很常见。您可以通过引用事实表、删除其他列、删除重复项来执行此操作,然后剩下一个维度表以连接到模型中的事实表。

    【讨论】:

    • 你能举个例子吗make the rest of your DAX very complicated
    • 为什么每个客户都有日历 - 这是因为每个客户都有自己的会计年度开始、结束、周数。
    • You can create this dimension from your fact table in PQ. 是什么意思?
    • 我现在会更新我的答案。
    • 这个怎么样 - 我创建了一个基于 dax 的日期表 (MAIN_DATETBL = calendarauto()) 并将其作为日期表。然后将此日期表连接到我的多客户端日期表 (MULTICLIENT_DATETBL),然后将该表 (MULTICLIENT_DATETBL) 指向我的事实表的日期列。您是否看到这种方法可能出现的任何问题?只要我在报告上放置一个切片器以确保在 MULTICLIENT_DATETBL 中仅过滤 1 个客户端,一切都应该正常工作。
    猜你喜欢
    • 2014-05-03
    • 2014-09-17
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 2016-01-10
    相关资源
    最近更新 更多