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

请求将指定Excel条件公式转换为DAX公式

解决Excel公式转DAX的问题

嘿,我来帮你搞定这个DAX转换!先把你的Excel公式逻辑拆解清楚,这样转换起来就一目了然了:

你的原公式核心逻辑是:

  • 当当前行和上一行的代码(B列)相同,且**当前行N列是"Extraordinary Trip"**时:
    • 如果上一行N列不是"Extraordinary Trip",就返回上一行的C列日期
    • 如果上一行N列也是"Extraordinary Trip",就返回上一行的E列日期
  • 所有其他情况,直接返回当前行的C列日期

DAX实现方案(两种写法)

方法1:用OFFSET函数(DAX 2021及以上版本支持,更简洁)

这个函数可以直接定位到上一行,非常直观,前提是你要有一个能确定行顺序的排序列(比如行号、业务日期,和Excel里的行顺序一致):

Extraordinary Trip Date = 
VAR CurrentCode = [代码] // 替换成你表中对应B列的列名
VAR CurrentN = [N列] // 替换成你表中对应N列的列名
// 获取上一行的上下文,这里的排序列要选能确定行顺序的字段
VAR PrevRow = OFFSET(-1, ALLSELECTED('你的表名'), ORDERBY('你的表名'[排序列], ASC))
VAR PrevCode = MAXX(PrevRow, [代码])
VAR PrevN = MAXX(PrevRow, [N列])
VAR PrevC = MAXX(PrevRow, [C列]) // 对应原Excel的C列
VAR PrevE = MAXX(PrevRow, [E列]) // 对应原Excel的E列

RETURN
IF(
    CurrentCode = PrevCode && CurrentN = "Extraordinary Trip",
    IF(
        PrevN <> "Extraordinary Trip",
        PrevC,
        PrevE
    ),
    [C列]
)

方法2:兼容旧版DAX(用CALCULATE+行号)

如果你的DAX版本不支持OFFSET,可以先给表加一个行号列,再通过行号定位上一行:

首先给表添加行号(如果没有现成的):

带行号的表 = ADDCOLUMNS('你的表名', "行号", RANKX('你的表名', [C列], , ASC, Dense))

然后基于带行号的表写计算列:

Extraordinary Trip Date = 
VAR CurrentCode = [代码]
VAR CurrentRowIndex = [行号]
VAR CurrentN = [N列]

VAR PrevCode = CALCULATE(MAX([代码]), FILTER('带行号的表', [行号] = CurrentRowIndex - 1))
VAR PrevN = CALCULATE(MAX([N列]), FILTER('带行号的表', [行号] = CurrentRowIndex - 1))
VAR PrevC = CALCULATE(MAX([C列]), FILTER('带行号的表', [行号] = CurrentRowIndex - 1))
VAR PrevE = CALCULATE(MAX([E列]), FILTER('带行号的表', [行号] = CurrentRowIndex - 1))

RETURN
IF(
    CurrentCode = PrevCode && CurrentN = "Extraordinary Trip",
    IF(
        PrevN <> "Extraordinary Trip",
        PrevC,
        PrevE
    ),
    [C列]
)

注意事项

  • 一定要确保排序列/行号的顺序和你Excel中的行顺序完全一致,否则会取到错误的上一行数据
  • 替换代码中的'你的表名'和所有列名,匹配你实际的模型字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 11:07:34