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

如何在DAX中基于全量日期范围计算报表的平均每日唯一用户?

解决DAX中覆盖全日期范围的平均日活用户计算问题

原代码的问题在于只统计了有报表使用记录的日期,那些没人访问报表的日期被排除在外,导致平均值被拉高。要修正这个问题,需要先构建「过去12个月所有日期 + 所有报表」的全量组合,再计算每个组合的日活(无访问则为0),最后求平均。

修改后的DAX度量值

6.2 average unique daily visitors = 
VAR Past12MonthsDates =
    // 获取过去12个月的所有日期(基于日期维度表)
    DATESINPERIOD(
        'Dates Dim_Dates'[TheDate],
        TODAY(),
        -12,
        MONTH
    )
VAR AllReportCombinations =
    // 获取所有唯一的报表组合(文件夹+报表名)
    DISTINCT(
        SELECTCOLUMNS(
            'z_Report_usage Report_runs',
            "Folder_Name", 'z_Report_usage Report_runs'[Folder_Name],
            "Report_name", 'z_Report_usage Report_runs'[Report_name]
        )
    )
VAR DateReportCrossJoin =
    // 生成日期和报表组合的笛卡尔积,确保每个报表每天都有记录
    CROSSJOIN(Past12MonthsDates, AllReportCombinations)
VAR DailyUserCounts =
    // 计算每个日期-报表组合的唯一用户数,无访问则返回0
    ADDCOLUMNS(
        DateReportCrossJoin,
        "User count",
        VAR CurrentDate = [TheDate]
        VAR CurrentFolder = [Folder_Name]
        VAR CurrentReport = [Report_name]
        RETURN
            CALCULATE(
                DISTINCTCOUNT('z_Report_usage Report_runs'[User_crsid]),
                'z_Report_usage Report_runs'[Folder_Name] = CurrentFolder,
                'z_Report_usage Report_runs'[Report_name] = CurrentReport,
                'z_Report_usage Report_runs'[Run_Date] = CurrentDate // 替换为报表使用表的实际日期字段名
            ) + 0 // 无结果时返回0
    )
RETURN
    // 计算所有日期-报表组合的用户数平均值
    AVERAGEX(DailyUserCounts, [User count])

关键修改说明

  • Past12MonthsDates:明确筛选出过去12个月的所有日期,确保不遗漏任何一天。
  • AllReportCombinations:提取所有存在的报表组合,避免遗漏报表。如果有专门的报表维度表,建议直接用维度表替代这里的DISTINCT查询,性能更优。
  • DateReportCrossJoin:通过笛卡尔积生成「每日+每报表」的全量组合,这是解决问题的核心——确保无访问的日期也被纳入计算。
  • DailyUserCounts:对每个组合计算当日用户数,用+0确保无访问时返回0(DISTINCTCOUNT无结果会返回BLANK,加0转为0)。
  • 注意:请将代码中的'z_Report_usage Report_runs'[Run_Date]替换为报表使用表中记录访问日期的实际字段名。

额外优化建议

如果报表数量很多,笛卡尔积可能会影响性能,此时可以:

  • 使用专门的报表维度表(包含所有Folder_Name和Report_name)替代从使用表提取的AllReportCombinations。
  • 考虑在日期表中预先标记过去12个月的日期,减少计算量。

内容的提问来源于stack exchange,提问作者SamuelEJ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 07:00:05