如何创建包含预期运行日期的表?

问题描述 投票:0回答:1

在 power BI 中,我有一个名为“Job Catalogue”的表,其中包含以下数据:

职位编号 姓名 类型 频率
1 备份 每日 2
2 报告 每周 3
3 评论 每月 15

频率代表以下内容:

如果“每日”,则为一天中执行任务的次数。

如果“每周”,是执行任务的星期几。

如果“每月”,是执行任务的月份中的某一天。

我还有一个使用下一个 DAX 公式动态创建的“日期”表: 日期 = 日历(开始日期,结束日期)

因此,如果我创建从 1 月 1 日到 1 月 2 日(2024 年)的“日期”表,则预期运行应该是:

职位编号 日期
1 2024-01-01
1 2024-01-01
1 2024-01-02
1 2024-01-02
2 2024-01-02

作业 ID 1,每天出现 2 次。

作业 ID 2,出现 1 次,因为 1 月 2 日是一周的第 3 天。

作业 ID 3,不会出现,因为“日期”表中没有第 15 天,但如果该日期存在,则应该存在。

使用 DAX,如何创建“预期运行”表?

我无法使用“CROSSJOIN”,因为“日期”和“职位目录”之间没有关系。

powerbi dax
1个回答
0
投票

我们可以使用

GENERATE
来补充每日跑步的水分,并使用
CROSSJOIN
(或
GENERATE
)来帮助进行每周和每月的跑步,然后根据需要进行过滤。

Expected Runs = 
  var tblDaily =
    CROSSJOIN(
      SELECTCOLUMNS(
        GENERATE(
          FILTER( 'Job Catalogue', [Type] = "Daily" ),
          GENERATESERIES( 1, [Frequency] )
        ), 
        "Job ID", [Job ID]
      ),
      ALL(Dates[Date])
    )

  var tblWeeklyMonthly = 
    SELECTCOLUMNS(
      FILTER(
        CROSSJOIN( ALL(Dates[Date]), FILTER( 'Job Catalogue', [Type] <> "Daily" ) ),
        ( [Type] = "Weekly" && WEEKDAY([Date], 1) = [Frequency] ) ||
        ( [Type] = "Monthly" && DAY([Date]) = [Frequency] )
      ),
      "Job ID", [Job ID],
      "Date", [Date]
    )

  return UNION( tblDaily, tblWeeklyMonthly )

© www.soinside.com 2019 - 2024. All rights reserved.