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

Power BI中按条件添加另一表列:DAX/Power Query实现

如何通过日期关联两张表的百分比字段?

完全可以通过日期范围匹配来实现需求,这是处理「随时间更新的维度数据」的典型场景——核心是为Table1的每一条记录,找到对应时间点上生效的PERCENTAGE值(也就是该记录DATE之前最近的START_DATE对应的百分比)。如果业务规则允许,也可以用近似日期匹配,但前者更贴合“百分比随START_DATE更新生效”的逻辑。

方法1:日期范围精准匹配(推荐)

通过为Table2的每条记录标记生效时间区间,再匹配Table1的DATE落在哪个区间内:

WITH ranked_table2 AS (
    SELECT 
        ACCOUNT,
        START_DATE,
        PERCENTAGE,
        -- 获取同账户下下一条记录的START_DATE,作为当前百分比的失效日期
        LEAD(START_DATE) OVER (PARTITION BY ACCOUNT ORDER BY START_DATE) AS END_DATE
    FROM Table2
)
SELECT 
    t1.DATE,
    t1.ACCOUNT,
    t1.RESULTS,
    t2.PERCENTAGE
FROM Table1 t1
LEFT JOIN ranked_table2 t2
    ON t1.ACCOUNT = t2.ACCOUNT
    AND t1.DATE >= t2.START_DATE
    -- 若当前是该账户的最后一条记录,END_DATE为NULL,直接匹配
    AND (t1.DATE < t2.END_DATE OR t2.END_DATE IS NULL)

方法2:找最近生效的记录

如果只需要每个Table1记录对应最新的、不晚于其DATE的START_DATE的百分比,用LATERAL JOIN(PostgreSQL、SQL Server支持)或相关子查询更简洁:

SELECT 
    t1.DATE,
    t1.ACCOUNT,
    t1.RESULTS,
    t2.PERCENTAGE
FROM Table1 t1
LEFT JOIN LATERAL (
    SELECT PERCENTAGE
    FROM Table2 t2
    WHERE t2.ACCOUNT = t1.ACCOUNT
      AND t2.START_DATE <= t1.DATE
    ORDER BY t2.START_DATE DESC
    LIMIT 1
) t2 ON TRUE

近似日期匹配(仅业务允许时使用)

如果不需要严格的生效时间逻辑,只是想找最接近Table1.DATE的START_DATE对应的百分比,可以调整排序规则:

SELECT 
    t1.DATE,
    t1.ACCOUNT,
    t1.RESULTS,
    t2.PERCENTAGE
FROM Table1 t1
LEFT JOIN LATERAL (
    SELECT PERCENTAGE
    FROM Table2 t2
    WHERE t2.ACCOUNT = t1.ACCOUNT
    -- 按日期差绝对值排序,取最接近的一条
    ORDER BY ABS(DATEDIFF(day, t1.DATE, t2.START_DATE))
    LIMIT 1
) t2 ON TRUE

注意:这种方法可能匹配到DATE之后的START_DATE,需要根据业务规则确认是否允许。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 19:20:04