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

PowerBI中用DAX基于参考表新增关联Day ref列的需求

PowerBI DAX实现「Relevant Day ref」列的方案

需求说明

现有三张表:ProductDate、ProductStock、DayReference,需在ProductDate表中新增「Relevant Day ref」列,根据每行的产品编号和星期几匹配ProductStock表对应的Day ref值,且不建立多对多关系。已知ProductStock表中同一产品的同一星期几不会对应多个Day ref。

各表结构

ProductDate表

Product numberDateDay of week
5JR382022年9月16日星期五
5JR382022年9月17日星期六
5JR382022年9月18日星期日
7QP132022年9月12日星期一
7QP132022年9月13日星期二
7QP132022年9月14日星期三
7QP132022年9月15日星期四
7QP132022年9月16日星期五
7QP132022年9月17日星期六
7QP132022年9月18日星期日

ProductStock表

Product numberDay refStock
5JR38FriO20
5JR38WEnd65
7QP13MFriO7
7QP13MidWeek13
7QP13WEnd18

DayReference表

Day refDay of week
FriO星期五
MFriO星期一
MFriO星期五
WEnd星期六
WEnd星期日
MidWeek星期二
MidWeek星期三
MidWeek星期四

预期结果

Product numberDateDay of weekRelevant Day ref
5JR382022年9月16日星期五FriO
5JR382022年9月17日星期六WEnd
5JR382022年9月18日星期日WEnd
7QP132022年9月12日星期一MFriO
7QP132022年9月13日星期二MidWeek
7QP132022年9月14日星期三MidWeek
7QP132022年9月15日星期四MidWeek
7QP132022年9月16日星期五MFriO
7QP132022年9月17日星期六WEnd
7QP132022年9月18日星期日WEnd

实现方案

方案一:直接计算列匹配

在ProductDate表中添加计算列,使用以下DAX公式:

Relevant Day ref = 
VAR CurrentProduct = ProductDate[Product number]
VAR CurrentDay = ProductDate[Day of week]
RETURN
CALCULATE(
    VALUES(ProductStock[Day ref]),
    FILTER(
        ALL(ProductStock),
        ProductStock[Product number] = CurrentProduct
        && ProductStock[Day ref] IN CALCULATETABLE(
            VALUES(DayReference[Day ref]),
            DayReference[Day of week] = CurrentDay
        )
    )
)

公式解释

  1. 定义变量:获取当前行的产品编号和星期几,存入CurrentProduct和CurrentDay
  2. 筛选匹配:从DayReference表中找出当前星期几对应的所有Day ref,再筛选ProductStock表中产品编号匹配且Day ref属于该集合的记录
  3. 返回结果:用VALUES提取唯一的Day ref值(已知无重复,结果唯一)

方案二:辅助表优化(适合大数据量)

先创建辅助表提前生成映射关系,再用LOOKUPVALUE匹配,性能更优:

步骤1:创建辅助表

ProductDayMapping = 
SELECTCOLUMNS(
    NATURALINNERJOIN(ProductStock, DayReference),
    "Product number", ProductStock[Product number],
    "Day of week", DayReference[Day of week],
    "Day ref", ProductStock[Day ref]
)

步骤2:在ProductDate表添加计算列

Relevant Day ref = 
LOOKUPVALUE(
    ProductDayMapping[Day ref],
    ProductDayMapping[Product number], ProductDate[Product number],
    ProductDayMapping[Day of week], ProductDate[Day of week]
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:05:11