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

PowerBI中如何筛选上月属于完整周日-周六周的数据?

解决PowerBI中统计上月完整周日-周六周数据的问题

核心思路

要实现仅保留完全包含在上月内的周日-周六周,关键是判断每个周的WeekBeginDate(周日)和WeekEndDate(周六)是否都属于上月,再基于这个筛选计算各天的事件平均发生数。

步骤1:在日期表标记上月完整周

在datedim表中添加计算列,标记该日期所在的周是否为上月的完整周:

IsLastMonthFullWeek = 
VAR CurrentMonth = 'Date'[Year] * 100 + 'Date'[Month]
VAR LastMonth = 
    IF(
        'Date'[Month] = 1,
        ('Date'[Year] - 1) * 100 + 12,
        'Date'[Year] * 100 + ('Date'[Month] - 1)
    )
VAR WeekBeginMonth = YEAR('Date'[WeekBeginDate]) * 100 + MONTH('Date'[WeekBeginDate])
VAR WeekEndMonth = YEAR('Date'[WeekEndDate]) * 100 + MONTH('Date'[WeekEndDate])
RETURN
    IF(WeekBeginMonth = LastMonth && WeekEndMonth = LastMonth, 1, 0)

这个列会把所有属于上月完整周的日期标记为1,其他为0,彻底排除跨月的周。

步骤2:计算上月完整周的数量

创建度量值统计上月完整周的总数,用于后续计算平均值:

LastMonthFullWeekCount = 
CALCULATE(
    DISTINCTCOUNT('Date'[YearWeek]),
    'Date'[IsLastMonthFullWeek] = 1,
    ALL('Date')
)

步骤3:计算各天的事件平均发生数

假设你的事件表为Events,包含事件日期EventDate和事件计数EventCount(若需统计事件数量,替换为COUNT(Events[EventID])),创建度量值计算平均:

AvgEventPerDay = 
VAR TotalDailyEvents = 
    CALCULATE(
        SUM(Events[EventCount]),
        RELATED('Date'[IsLastMonthFullWeek]) = 1,
        PREVIOUSMONTH('Date'[Date])
    )
VAR FullWeekNum = [LastMonthFullWeekCount]
RETURN
    DIVIDE(TotalDailyEvents, FullWeekNum, 0)
  • PREVIOUSMONTH确保只计算上月数据
  • DIVIDE避免除零错误,无完整周时返回0

矩阵可视化设置

  1. 将datedim表的WeekDay(周日-周六)拖到矩阵的行区域
  2. (可选)将YearWeek拖到列区域,筛选器中设置IsLastMonthFullWeek = 1
  3. 将AvgEventPerDay拖到值区域

这样就能得到上月每个周几的事件平均发生数,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 07:15:25