如何在语义模型中过滤日期,包括或排除未来日期

计划数据或上一年的数据显示在今天日期之后的情况很常见。但未来的数据可能会令人困惑。如何添加切片器来显示或隐藏未来的数据?让我们看看如何做到这一点。这篇文章《如何在语义模型中过滤日期,包括或排除未来日期》首先出现在《走向数据科学》上。

来源:走向数据科学

假设我们有三个度量:

  • 销售额
  • 销售额预算
  • 上年销售额
  • 当我们查看包含这些数字的表格时,我们会看到以下内容(假设我们拥有截至 2025 年 7 月底的当前数据):

    虽然结果是正确的,但我的用户可能需要两个不同的视图:

  • 仅查看根据现有数据的结果
  • 包括预算数据和 PY 数据
  • 我有多种方法可以做到这一点:

  • 使用不同的过滤器创建单独的视觉效果。
  • 再次使用不同的过滤器为两个视图创建两个页面。
  • 告诉我的用户使用日历切片器根据需要过滤数据。
  • 但我想将我的报告设计得尽可能用户友好,而不重复任何内容。

    因此,我想添加一个切片器,以便用户可以选择是否包含未来数据或仅查看当前数据。

    创建日期过滤表

    我的日期表包括不同时期的索引列:天、周、月、季度和年。

  • 当前周期的行包含 0
  • 过去期间的行包含负数
  • 期货期间的行包含正数
  • 让我们看看使用 DayIndex 列在 SQL 中实现的一个小示例的行:

    使用此列,我构建了一个带有附加列的表来充当切片器。

    我获取了索引最大为 0 的所有行,并将它们标记为“仅当前数据”。

    然后,我追加 (UNION) 日期表中的所有行并将它们标记为“包含未来数据”。

    我使用 SQL 完成此操作,但您可以使用 Power Query 或您选择的任何其他语言完成此操作。

    现在,我将此表导入到 Power BI

    展开数据模型

    将此表添加到 Power BI 后,我在新表和日期表之间创建了一个新关系:

    交叉过滤器方向必须设置为两者,因为日期过滤器表中的 DateKey 列不唯一:

    因此,过滤方向将仅为“日期 -> 日期过滤器”,这是行不通的。

    我想通过日期过滤器表来过滤日期表。因此,我必须将过滤器方向设置为“两者”。

    结果

    接下来,我在报告中添加了一个切片器: