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

DAX实现设备匹配后SKU列批量乘数量并保留结构的方法

DAX实现设备SKU数量批量乘法(适配新增设备与SKU列)

需求说明

作为DAX新手,现有两张表:

  • 设备汇总表:存储设备名称及对应总数量
  • SKU表:记录各设备对应的组件SKU数量,包含多列SKU字段

需要生成一张计算表,满足:

  1. 按设备名称匹配两张表的行数据
  2. 将SKU表中每一列的数值乘以对应设备的总数量
  3. 保留SKU表的列结构,且能自动适配新增的设备行或SKU列

已通过LOOKUPVALUE实现设备数量匹配,但无法批量处理所有SKU列的乘法;尝试过Product/ProductX函数,这类函数会汇总列数据,不符合需求。

示例数据

设备汇总表

设备名称数量
AA7
BB4
CC20

SKU表

设备名称SKU#1SKU#2SKU#3
AA228
BB104
CC010

期望结果表

设备名称SKU#1SKU#2SKU#3
AA141456
BB4016
CC0200

已尝试代码

匹配设备数量 = LOOKUPVALUE('设备汇总表'[数量],'设备汇总表'[设备名称], 'SKU表'[设备名称])

解决方案

方案一:手动维护列(适合SKU列新增频率低)

代码简单易理解,若新增SKU列,只需在代码中添加对应列的计算逻辑:

计算结果表 = 
ADDCOLUMNS(
    'SKU表',
    "匹配数量", LOOKUPVALUE('设备汇总表'[数量], '设备汇总表'[设备名称], 'SKU表'[设备名称]),
    "SKU#1", 'SKU表'[SKU#1] * [匹配数量],
    "SKU#2", 'SKU表'[SKU#2] * [匹配数量],
    "SKU#3", 'SKU表'[SKU#3] * [匹配数量]
)
// 若新增SKU#4,添加一行:"SKU#4", 'SKU表'[SKU#4] * [匹配数量]

方案二:动态适配所有SKU列(适合SKU列频繁新增)

通过转窄表计算再转回宽表的方式,自动识别所有SKU列,新增列时仅需少量修改:

计算结果表 = 
// 步骤1:将SKU宽表转为窄表,提取所有SKU列数据
VAR 窄表SKU = 
    UNION(
        SELECTCOLUMNS('SKU表', "设备名称", 'SKU表'[设备名称], "SKU列名", "SKU#1", "SKU数量", 'SKU表'[SKU#1]),
        SELECTCOLUMNS('SKU表', "设备名称", 'SKU表'[设备名称], "SKU列名", "SKU#2", "SKU数量", 'SKU表'[SKU#2]),
        SELECTCOLUMNS('SKU表', "设备名称", 'SKU表'[设备名称], "SKU列名", "SKU#3", "SKU数量", 'SKU表'[SKU#3])
        // 新增SKU列时,复制上述格式添加一行即可
    )
// 步骤2:关联设备数量并计算乘积
VAR 计算后SKU = 
    ADDCOLUMNS(
        窄表SKU,
        "计算后数量", [SKU数量] * LOOKUPVALUE('设备汇总表'[数量], '设备汇总表'[设备名称], [设备名称])
    )
// 步骤3:将窄表转回宽表,恢复原列结构
RETURN
    SUMMARIZE(
        计算后SKU,
        [设备名称],
        "SKU#1", CALCULATE(SUM([计算后数量]), [SKU列名] = "SKU#1"),
        "SKU#2", CALCULATE(SUM([计算后数量]), [SKU列名] = "SKU#2"),
        "SKU#3", CALCULATE(SUM([计算后数量]), [SKU列名] = "SKU#3")
        // 新增SKU列时,复制上述格式添加一行即可
    )

进阶动态方案(无需手动添加新列)

若需完全自动适配新增SKU列(无需修改代码),可使用DAX动态表达式生成逻辑,需配合DAX Studio执行或通过计算组实现:

// 生成动态DAX代码
VAR SKU列名列表 = 
    EXCEPT(
        SELECTCOLUMNS(ALLCOLUMNS('SKU表'), "@列名", [ColumnName]),
        {"设备名称"}
    )
VAR 动态SELECT语句 = 
    CONCATENATEX(
        SKU列名列表,
        """" & [@列名] & """, 'SKU表'[" & [@列名] & "] * LOOKUPVALUE('设备汇总表'[数量], '设备汇总表'[设备名称], 'SKU表'[设备名称])",
        ", "
    )
VAR 最终DAX代码 = 
    "SELECTCOLUMNS('SKU表', ""设备名称"", 'SKU表'[设备名称], " & 动态SELECT语句 & ")"
RETURN
    EVALUATE(VALUE(最终DAX代码))

注:此方案需在DAX Studio中执行,或通过Power BI的计算组实现动态列展示。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:35:47