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

如何在Power BI中基于table42的最大日期创建新表

解决方案:Power BI中提取每个productId最新日期的记录

方法一:DAX创建新表(适合直接在数据模型中生成)

方案1:先聚合最大日期再筛选

新表 = 
VAR 各产品最大日期 = 
    SUMMARIZE(
        table42,
        table42[productId],
        "MaxDate", MAX(table42[date])
    )
RETURN
    CALCULATETABLE(
        table42,
        TREATAS(各产品最大日期, table42[productId], table42[date])
    )

逻辑:先通过SUMMARIZE得到每个productId对应的最大日期,再用TREATAS将这个结果作为筛选条件,从原表中匹配出对应记录。

方案2:直接取每组最新记录

新表 = 
GENERATE(
    VALUES(table42[productId]),
    TOPN(
        1,
        FILTER(table42, table42[productId] = EARLIER(table42[productId])),
        table42[date], DESC
    )
)

逻辑:遍历每个唯一的productId,筛选出该产品的所有记录后,取日期最大的1条。

方法二:Power Query处理(适合数据清洗阶段)

如果习惯在Power Query编辑器中操作,步骤如下:

  1. 选中table42进入Power Query编辑器
  2. 按productId分组,分组选项选择「所有行」,新列命名为「组数据」
  3. 添加自定义列,公式:Table.Max([组数据], "date")(提取每组中日期最大的记录)
  4. 展开自定义列的date和amount字段
  5. 删除多余的「组数据」列

对应的M代码:

let
    源 = table42,
    按产品分组 = Table.Group(源, {"productId"}, {{"组数据", each _, type table [productId=text, amount=number, date=date]}}),
    提取最新记录 = Table.AddColumn(按产品分组, "最新记录", each Table.Max([组数据], "date")),
    展开字段 = Table.ExpandRecordColumn(提取最新记录, "最新记录", {"date", "amount"}, {"date", "amount"}),
    删除冗余列 = Table.RemoveColumns(展开字段,{"组数据"})
in
    删除冗余列

原代码问题说明

你之前的代码存在两处核心错误:

  • #table的第二个参数需要是行数据的集合,而不是单独的列数组,直接传入整列会导致结构不匹配
  • MAX('Table42'[DATE])是整个表的全局最大日期,不是每个productId对应的最大日期,无法实现分组筛选的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:45:45