You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Power BI中用DAX创建预期运行时间表(不可用CROSSJOIN)

用DAX创建「Expected Runs」表(无表关系且禁用CROSSJOIN)

需求回顾

现有两张无关联的表:

  1. 「Job Catalogue」任务清单表:
Job IDNameTypeFrequency
1BackupDaily2
2ReportWeekly3
3ReviewMonthly15

Frequency字段规则:

  • Daily:每日执行次数
  • Weekly:每周执行的星期几(示例中以周日为一周第1天,2024-01-02周二对应第3天)
  • Monthly:每月执行的日期
  1. 「Dates」动态日期表:由Dates = CALENDAR(StartDate, EndDate)生成,日期范围可动态调整

需生成符合预期的「Expected Runs」表,且禁止使用CROSSJOIN函数。

DAX实现代码

Expected Runs = 
-- 处理每日任务:按频率生成对应次数的行
VAR DailyJobs = 
    GENERATE(
        FILTER('Job Catalogue', 'Job Catalogue'[Type] = "Daily"),
        GENERATE(
            'Dates',
            GENERATESERIES(1, 'Job Catalogue'[Frequency], 1)
        )
    )
-- 处理每周任务:匹配对应星期几的日期
VAR WeeklyJobs = 
    GENERATE(
        FILTER('Job Catalogue', 'Job Catalogue'[Type] = "Weekly"),
        FILTER(
            'Dates',
            WEEKDAY('Dates'[Date], 1) = 'Job Catalogue'[Frequency]
        )
    )
-- 处理每月任务:匹配对应日期的日历日
VAR MonthlyJobs = 
    GENERATE(
        FILTER('Job Catalogue', 'Job Catalogue'[Type] = "Monthly"),
        FILTER(
            'Dates',
            DAY('Dates'[Date]) = 'Job Catalogue'[Frequency]
        )
    )
-- 合并三类任务结果,统一输出列
RETURN
UNION(
    SELECTCOLUMNS(DailyJobs, "Job ID", 'Job Catalogue'[Job ID], "Date", 'Dates'[Date]),
    SELECTCOLUMNS(WeeklyJobs, "Job ID", 'Job Catalogue'[Job ID], "Date", 'Dates'[Date]),
    SELECTCOLUMNS(MonthlyJobs, "Job ID", 'Job Catalogue'[Job ID], "Date", 'Dates'[Date])
)

代码逻辑说明

  1. DailyJobs:

    • 先筛选出所有每日任务,再与Dates表生成全量日期组合
    • 通过GENERATESERIES根据Frequency值生成对应次数的行,实现同一日期重复Frequency次的效果
  2. WeeklyJobs:

    • 筛选出每周任务,匹配Dates表中星期几与Frequency一致的日期
    • WEEKDAY(Date, 1)表示周日为一周第1天,若你的业务规则是周一为第1天,可将参数改为2
  3. MonthlyJobs:

    • 筛选出每月任务,匹配Dates表中日历日与Frequency一致的日期
  4. 结果合并:

    • 用SELECTCOLUMNS统一三类任务的输出列名,再通过UNION合并成最终表

验证示例结果

当Dates表范围为2024-01-01至2024-01-02时:

  • Job 1(Daily,Frequency=2):每个日期生成2行,共4行
  • Job 2(Weekly,Frequency=3):2024-01-02是周二(WEEKDAY值为3),生成1行
  • Job 3(Monthly,Frequency=15):日期范围内无15号,无输出行
    完全符合预期结果。

内容的提问来源于stack exchange,提问作者Eärandir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 13:16:23