如何在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编辑器中操作,步骤如下:
- 选中
table42进入Power Query编辑器 - 按
productId分组,分组选项选择「所有行」,新列命名为「组数据」 - 添加自定义列,公式:
Table.Max([组数据], "date")(提取每组中日期最大的记录) - 展开自定义列的
date和amount字段 - 删除多余的「组数据」列
对应的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
相关产品推荐
相关产品推荐

