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

如何将日期分类的DAX代码转换为Power Query的M语言

问题描述

需要为**表1(模型版本表)的每条记录,匹配表2(日期表)**中大于等于该记录版本日期的最小日期,作为版本分类。现有实现该逻辑的DAX代码,需转换为Power Query的M语言实现:

  • 表1字段:Model(模型)、Version Number(版本日期)
  • 表2:包含日期列表字段(假设字段名为DateList)
  • 对应DAX代码:
DateAg = 
CALCULATE ( 
    MIN ( 'Date'[DateList]),
    FILTER ( 
        'Date',
        'Date'[DateList] >= 'EI'[Version]
    )
)
Power Query M语言实现方案

核心实现逻辑

在模型版本表中添加自定义列,通过「筛选符合条件的日期 + 取最小值」的方式完成匹配,具体操作如下:

分步操作

  1. 确保ModelVersions(表1)和DateTable(表2)已加载到Power Query编辑器中
  2. 选中ModelVersions表,点击「添加列」→「自定义列」,输入以下代码:
= List.Min(
    List.Select(
        DateTable[DateList],
        (date) => date >= [Version Number]
    )
)

完整可复用脚本

如果需要直接套用的完整查询脚本,可参考(注意替换表名和字段名):

let
    // 加载模型版本表
    ModelVersions = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
    // 加载日期表
    DateTable = Excel.CurrentWorkbook(){[Name="表2"]}[Content],
    // 转换列类型为日期(避免类型不匹配导致错误)
    FixModelDateType = Table.TransformColumnTypes(
        ModelVersions,
        {{"Version Number", type date}}
    ),
    FixDateTableType = Table.TransformColumnTypes(
        DateTable,
        {{"DateList", type date}}
    ),
    // 添加版本分类列
    AddVersionCategory = Table.AddColumn(
        FixModelDateType,
        "VersionCategory",
        each List.Min(
            List.Select(
                FixDateTableType[DateList],
                (date) => date >= [Version Number]
            )
        )
    )
in
    AddVersionCategory

补充处理说明

  • 如果存在无匹配日期的记录(所有日期都小于当前版本日期),List.Min会返回null,可以添加判断逻辑处理这种场景:
= let
    filteredDates = List.Select(DateTable[DateList], (date) => date >= [Version Number])
in
    if List.IsEmpty(filteredDates) then null else List.Min(filteredDates)
  • 必须保证Version Number和DateList的字段类型为日期类型,否则会出现判断错误,上述完整脚本已包含类型转换步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:52:46