选择一个月份, 自动往前推3个月显示清单

YM格式必须是 202501类似的整数,

 

 

首先根据上面的表新增一个日期表:

日期表 = VALUES('Sheet1'[ym])
 
在主表里新增一个度量值,
selected = 
VAR ym_selected = SELECTEDVALUE('日期表'[ym])  // 假设 '日期表' 是独立的日期表
VAR ym_current = SELECTEDVALUE('Sheet1'[ym])  // 当前行的 ym 值
VAR ym_1 = IF(MOD(ym_selected, 100) = 1, ym_selected - 89, ym_selected - 1)
VAR ym_2 = IF(MOD(ym_1, 100) = 1, ym_1 - 89, ym_1 - 1)
RETURN 
    IF(
        ym_current IN {ym_selected, ym_1, ym_2},
        "Y",
        "N"
    )

  

图表区域放一个 日期表的筛选器,

放主表的明细.并且在Filters里设置 selected="Y" 

即可.

 

 

==============================================

图表列标题动态显示最近3个月的(根据选择确定最近3个月)

data表: Customer, YM, Amt 3列,

创建2个日期标:

ym_base = DISTINCT(VALUES('data'[YM]))   (在关系模型里, 用它的YM和data标的YM连起来 , 1对多关系)
YM_Parameter = DISTINCT(VALUES('data'[YM]))    单独的表, 筛选器用.
在data里增加一个度量值:
Amt SelectedAndPrevious2 = 
VAR SelectedYM = SELECTEDVALUE(YM_Parameter[YM])
VAR CurrentYM = SELECTEDVALUE(ym_base[YM])

// 计算前1个月
VAR PrevMonth1 = 
    IF(
        MOD(SelectedYM, 100) = 1,  // 如果是1月
        INT(SelectedYM/100 - 1)*100 + 12,  // 上年12月
        SelectedYM - 1  // 其他情况直接减1
    )

// 计算前2个月
VAR PrevMonth2 = 
    SWITCH(
        MOD(SelectedYM, 100),
        1, INT(SelectedYM/100 - 1)*100 + 11,  // 1月前2个月是上年11月
        2, INT(SelectedYM/100 - 1)*100 + 12,  // 2月前2个月是上年12月
        SelectedYM - 2  // 其他情况直接减2
    )

// 检查当前YM是否是需要显示的月份
VAR IsVisible = 
    CurrentYM = SelectedYM || 
    CurrentYM = PrevMonth1 || 
    CurrentYM = PrevMonth2

RETURN
IF(
    IsVisible,
    SUM(data[Amt]),
    BLANK()
)

  

 

ym_base 和 data表关联起来.

图表区域:

行 : Customer,

列 ym_base[YM]

值 data[Amt]

 

切片器: YM_Parameter 

设置单选模式, 采用倒序排序 (即打开的时候默认选择了最大的, 那么往前推2个月, 就是最大的3个月被选择)

 

 
 
 

 

 

 

posted @ 2025-07-23 15:30  CrossPython  阅读(10)  评论(0)    收藏  举报