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

请求将Excel数据归一化VBA脚本转换为Power BI的DAX表达式

将Excel VBA归一化逻辑转换为Power BI的DAX表达式

我已将名为“Export”的Excel数据表导入Power BI,希望创建第二个数据表来展示数据的归一化结果。现有一段他人编写的Excel VBA脚本,但不知如何将其转换为DAX表达式,示例中V列对应铝、X列对应硼。

原VBA代码

Dim User As String
Dim LastRow As Long
Dim Ws As Worksheet

Set Ws = ActiveSheet
LastRow = Ws.Cells(Ws.Rows.Count, "A").End(xlUp).Row

'****Aluminum
Range("V:V").EntireColumn.Insert (Shift = xlToRight)
Range("V1").Value = "Norm_Al"
Range("v2:V" & LastRow).Formula = "=IfError(Sum(U2 / O2 * 100), """"")"
Range("v2:V" & LastRow).Formula = Range("v2:V" & LastRow).Value

'****Boron
Range("X:X").EntireColumn.Insert (Shift = xlToRight)
Range("X1").Value = "Norm_B"
Range("X2:X" & LastRow).Formula = "=IfError(Sum(W2 / O2 * 100), """"")"
Range("X2:X" & LastRow).Formula = Range("X2:X" & LastRow).Value

预期结果

生成包含Norm_Al和Norm_B两列的数据表:

  • Norm_Al列:每行U列数值除以O列数值后乘以100,计算出错时返回空值
  • Norm_B列:每行W列数值除以O列数值后乘以100,计算出错时返回空值

DAX解决方案

方法1:保留原表所有列并添加归一化列

使用ADDCOLUMNS函数,基于原Export表创建新表,添加两个归一化列:

归一化数据表 = 
ADDCOLUMNS(
    Export,
    "Norm_Al", DIVIDE([U], [O], BLANK()) * 100,
    "Norm_B", DIVIDE([W], [O], BLANK()) * 100
)

方法2:自定义保留列(仅保留需要的列)

如果不需要原表全部列,用SELECTCOLUMNS指定要保留的原列和新增列(示例中保留原表A列作为标识,可根据需求调整):

归一化数据表 = 
SELECTCOLUMNS(
    Export,
    "标识列", [A],
    "Norm_Al", DIVIDE([U], [O], BLANK()) * 100,
    "Norm_B", DIVIDE([W], [O], BLANK()) * 100
)

逻辑说明

  • VBA中的Sum是冗余的(仅单单元格计算),DAX直接用DIVIDE函数处理除法,第三个参数指定错误时返回BLANK(),对应VBA里的空字符串效果
  • 乘以100的逻辑和VBA一致,将比值转为百分比形式
  • 新建数据表后,可直接在Power BI中使用该表进行后续分析或可视化

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:53:11