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

Power BI DAX多关系过滤:如何基于双关联计算通话分钟余额?

解决方案:通过DAX度量值解决多对多关联下的筛选与余额计算问题

核心思路

由于月度记录表与每日记录表仅保留monthly records idx的活跃关系,导致账号筛选无法同步到月度表,因此需要在DAX度量值中手动指定账号与年月的双重筛选条件,分别计算当月购买分钟数和累计消耗分钟数,最终得到余额。

前提假设

数据模型需满足:

  • 用户账号表包含唯一AccountID
  • 月度记录表包含AccountID、YearMonth(格式建议为YYYYMM文本或月初日期)、PurchaseMinutes(购买分钟数)
  • 每日记录表包含AccountID、Date、UsageMinutes(消耗分钟数),且与月度表通过monthly records idx关联

最终DAX度量值

分钟余额 = 
VAR 当前账号 = SELECTEDVALUE(用户账号表[AccountID])
VAR 当前年月 = FORMAT(MAX(每日记录表[Date]), "YYYYMM")
VAR 当前日期 = MAX(每日记录表[Date])

-- 计算当月购买的总分钟数
VAR 当月购买 = 
    CALCULATE(
        SUM(月度记录表[PurchaseMinutes]),
        月度记录表[AccountID] = 当前账号,
        月度记录表[YearMonth] = 当前年月
    )

-- 计算截止到当前日期的累计消耗分钟数
VAR 累计消耗 = 
    CALCULATE(
        SUM(每日记录表[UsageMinutes]),
        每日记录表[AccountID] = 当前账号,
        FORMAT(每日记录表[Date], "YYYYMM") = 当前年月,
        每日记录表[Date] <= 当前日期
    )

-- 返回余额,空值替换为0避免错误
RETURN
COALESCE(当月购买, 0) - COALESCE(累计消耗, 0)

代码解释

  1. 变量定义:获取当前筛选上下文的账号ID、年月和日期,确保计算范围锁定在目标账号的当月数据内
  2. 当月购买计算:直接筛选月度表中匹配当前账号和年月的记录,求和购买分钟数
  3. 累计消耗计算:筛选每日表中匹配当前账号、年月,且日期不晚于当前日期的记录,求和消耗分钟数
  4. 余额计算:用COALESCE处理空值(如无购买/消耗记录),避免返回错误值

适配无AccountID的每日记录表

如果每日记录表未直接存储AccountID,仅通过monthly records idx关联月度表,可修改累计消耗部分的代码,通过关联月度表获取账号信息:

累计消耗 = 
    CALCULATE(
        SUM(每日记录表[UsageMinutes]),
        -- 通过月度表关联账号ID
        LOOKUPVALUE(月度记录表[AccountID], 月度记录表[_id], 每日记录表[monthly records idx]) = 当前账号,
        FORMAT(每日记录表[Date], "YYYYMM") = 当前年月,
        每日记录表[Date] <= 当前日期
    )

可视化设置

  • 选择折线图,X轴绑定每日记录表的Date字段,Y轴绑定上述分钟余额度量值
  • 添加用户账号表的AccountID作为切片器,选择单个账号时即可看到该账号当月余额的变化趋势(月初充值上升,每日使用下降)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:10:47