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

如何通过DAX创建虚拟表计算带到期日产品的账户余额?

解决方案:DAX度量值实现按日计算到期前账户余额

正确DAX度量值(两种写法)

写法一:遍历产品判断有效期

每日有效余额 = 
VAR 当前日期 = MAX(Dim_Date[Date ID])
RETURN
SUMX(
    VALUES(Dim_Expiry_Date[Product Code]),
    IF(
        当前日期 <= CALCULATE(MAX(Dim_Expiry_Date[Expiry Date])),
        CALCULATE(SUM(Fact_Account_Opening_Balance[Amount])),
        0
    )
)

写法二:先筛选有效产品再求和

每日有效余额 = 
VAR 当前日期 = MAX(Dim_Date[Date ID])
VAR 有效产品集合 = 
    FILTER(
        ALL(Dim_Expiry_Date),
        Dim_Expiry_Date[Expiry Date] >= 当前日期
    )
RETURN
CALCULATE(
    SUM(Fact_Account_Opening_Balance[Amount]),
    TREATAS(有效产品集合, Fact_Account_Opening_Balance[Product Code])
)

逻辑说明

  1. 获取当前日期:通过MAX(Dim_Date[Date ID])获取筛选上下文对应的单日日期(若需适配多日筛选,可根据需求调整为MIN或其他逻辑)
  2. 匹配有效产品:
    • 写法一:遍历每个产品,判断当前日期是否在该产品的到期日范围内,是则累加该产品的期初总余额
    • 写法二:先筛选出所有到期日≥当前日期的产品,再通过TREATAS将有效产品集合关联到期初余额表,仅对有效产品的余额求和
  3. 数据模型前提:需确保Fact_Account_Opening_Balance(期初余额表)与Dim_Expiry_Date(到期日表)通过Product Code建立一对多关系,Dim_Date(日期表)作为日历表用于日期筛选

验证结果

  • 11月1日-5日:三款产品均有效,总余额=3000+7000+11000=21000
  • 11月6日-11日:B产品到期,总余额=3000+11000=14000
  • 11月12日-30日:仅C产品有效,总余额=11000

原代码问题分析

  • 原代码中latestdate和latestexpirydate使用全局MIN值,未关联单个产品的到期日与当前筛选日期的对应关系
  • 交叉连接后筛选逻辑错误,无法正确匹配每个日期下的有效产品集合,导致求和结果不符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:15:35