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

DAX中SUMMARIZE与FILTER实现复现性指标的面积图展示问题

DAX面积图统计连续达标用户问题解决

需求

统计过去连续[meses]个月内,每月操作次数≥[n_veces]的唯一用户数,以日期(月度)为X轴展示该指标的变化趋势。

现有DAX代码

TotalUsuariosRecurrentes = 

VAR SELECTOR = IF([Recurrencia numerico] = 365,12,[meses])
VAR SELECTOR_veces = [n_veces]

VAR hoy        = TODAY()
VAR FechaIni   = EDATE(hoy,SELECTOR * -1)
VAR FechaFin   = hoy

VAR ResumenUsuarios = 
    SUMMARIZE(
        FILTER(
            Tabla,
            Tabla[EndOfMonth] >= FechaIni && Tabla[EndOfMonth] <= FechaFin
        ),
        Tabla[UserId],
        Tabla[EndOfMonth],
        "SumaVisitas", SUM(Tabla[N_VISITAS])
    )

VAR UsuariosRecurrentes = 
    SELECTCOLUMNS(
        FILTER(
            SUMMARIZE(
                ResumenUsuarios,
                [UserId],
                "MesesConVisitas", COUNTROWS(
                    FILTER(
                        ResumenUsuarios,
                        [UserId] = EARLIER([UserId]) &&
                        [SumaVisitas] >= SELECTOR_veces
                    )
                )
            ),
            [MesesConVisitas] >= SELECTOR
        ),
        "UserId", [UserId]
    )

RETURN
    CALCULATE(
        DISTINCTCOUNT(Tabla[UserId]),
        FILTER(
            Tabla,
            Tabla[UserId] IN UsuariosRecurrentes &&
            Tabla[EndOfMonth] >= FechaIni && Tabla[EndOfMonth] <= FechaFin
        )
    )

参数说明

  • [n_veces]:操作次数阈值(整数)
  • [meses]:需要连续达标的月份数(整数)
  • [Recurrencia numerico]:切片器参数,选择“Mensual”时为30,否则为365(整数)

问题现象

  • 参数可正常筛选表格,但当[meses]取值大于1时,面积图停止显示数据
  • 预期效果:近3个月(X轴)每月显示1个符合条件的用户(该用户过去3个月每月至少完成2次操作),但仅KPI可视化能正常显示总数,无法展示趋势

问题根源

原度量值存在两个核心问题:

  1. 固定时间窗口:使用TODAY()作为时间窗口的终点,忽略了面积图X轴的月度上下文,导致所有月份都计算“从今天倒推N个月”的用户,而非“截至该月份倒推N个月”的用户
  2. 上下文冲突:计算逻辑未响应X轴的日期筛选,当X轴是单个月份时,原公式的全局时间窗口与局部日期上下文冲突,导致无数据返回

修改后的DAX代码

TotalUsuariosRecurrentes_Tendencia = 
VAR SELECTOR = IF([Recurrencia numerico] = 365, 12, [meses])
VAR SELECTOR_veces = [n_veces]

-- 获取当前上下文的最大日期(适配X轴的月度维度)
VAR FechaFin_Contexto = MAX(Tabla[EndOfMonth])
VAR FechaIni_Contexto = EDATE(FechaFin_Contexto, -SELECTOR)

-- 按用户+月度汇总操作次数
VAR ResumenUsuarios = 
    SUMMARIZE(
        FILTER(
            ALL(Tabla), -- 移除局部上下文,确保计算完整的时间窗口
            Tabla[EndOfMonth] >= FechaIni_Contexto && Tabla[EndOfMonth] <= FechaFin_Contexto
        ),
        Tabla[UserId],
        Tabla[EndOfMonth],
        "SumaVisitas", SUM(Tabla[N_VISITAS])
    )

-- 筛选出在时间窗口内每个月都达标的用户
VAR UsuariosCumplen = 
    SELECTCOLUMNS(
        FILTER(
            SUMMARIZE(
                ResumenUsuarios,
                Tabla[UserId],
                "MesesCumplidos", COUNTROWS(
                    FILTER(
                        ResumenUsuarios,
                        Tabla[UserId] = EARLIER(Tabla[UserId]) &&
                        [SumaVisitas] >= SELECTOR_veces
                    )
                )
            ),
            [MesesCumplidos] = SELECTOR -- 必须刚好等于要求的连续月份数
        ),
        "UserId", Tabla[UserId]
    )

RETURN
    -- 统计符合条件的用户数,确保响应当前上下文的日期(仅保留该月份的用户记录)
    CALCULATE(
        DISTINCTCOUNT(Tabla[UserId]),
        Tabla[UserId] IN UsuariosCumplen,
        Tabla[EndOfMonth] = FechaFin_Contexto
    )

关键修改点

  1. 替换TODAY()为MAX(Tabla[EndOfMonth]),让时间窗口随X轴的月份动态变化,支持历史趋势展示
  2. 使用ALL(Tabla)确保在计算用户达标情况时,不受X轴单个月份的上下文限制,能完整计算连续N个月的达标情况
  3. 最终计数时添加Tabla[EndOfMonth] = FechaFin_Contexto,确保每个X轴月份只统计截至该月符合条件的用户数
  4. 将[MesesConVisitas] >= SELECTOR改为[MesesCumplidos] = SELECTOR,精准匹配“连续N个月每月都达标”的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 01:00:06