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
矩阵可视化设置
- 将
datedim表的WeekDay(周日-周六)拖到矩阵的行区域 - (可选)将
YearWeek拖到列区域,筛选器中设置IsLastMonthFullWeek = 1 - 将
AvgEventPerDay拖到值区域
这样就能得到上月每个周几的事件平均发生数,完全符合需求。
内容的提问来源于stack exchange,提问作者mstan
相关产品推荐
相关产品推荐

