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

如何通过Tabular Editor C#脚本为PowerBI度量值首个=后添加换行?

在Tabular Editor中用C#脚本实现DAX度量值首个=后换行

单个度量值处理

如果仅需给单个选中的度量值添加换行,可通过字符串定位替换实现,自动适配=前后有无空格的情况:

// 选中单个度量值后执行此脚本
var measure = Selected.Measures.FirstOrDefault();
if (measure == null) return;

// 定位第一个"="的位置
var eqIndex = measure.Expression.IndexOf('=');
if (eqIndex == -1) return;

// 跳过=后的所有空格,找到第一个非空格字符位置
var startIndex = eqIndex + 1;
while (startIndex < measure.Expression.Length && char.IsWhiteSpace(measure.Expression[startIndex]))
{
    startIndex++;
}

// 在=后插入换行符
var newExpression = measure.Expression.Insert(startIndex, Environment.NewLine);
measure.Expression = newExpression;

批量处理(结合FormatDax函数)

Tabular Editor自带的FormatDax函数不会自动在度量名后换行,可先批量格式化DAX代码,再统一给所有度量值的首个=后添加换行:

// 遍历模型中所有度量值
foreach(var measure in Model.AllMeasures)
{
    // 先调用FormatDax格式化公式
    measure.Expression = TabularEditor.TOMWrapper.Formatter.FormatDax(measure.Expression);
    
    // 定位第一个"="的位置
    var eqIndex = measure.Expression.IndexOf('=');
    if (eqIndex == -1) continue;
    
    // 跳过=后的空格,定位到第一个非空格字符
    var startIndex = eqIndex + 1;
    while (startIndex < measure.Expression.Length && char.IsWhiteSpace(measure.Expression[startIndex]))
    {
        startIndex++;
    }
    
    // 插入换行符
    measure.Expression = measure.Expression.Insert(startIndex, Environment.NewLine);
}

// 刷新Tabular Editor界面显示
Refresh();

效果示例

处理前的度量公式:

Count = DIVIDE (
    COUNT ( Tests[Lot] ),
    DISTINCTCOUNT ( Tests[Part Number] )
)

处理后的度量公式:

Count = 
DIVIDE (
    COUNT ( Tests[Lot] ),
    DISTINCTCOUNT ( Tests[Part Number] )
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:21:14