首页 > 解决方案 > 如何使用 Power Query 编辑器按 ID 删除自上一行以来没有更改的旧行

问题描述

我有一个包含三列的表:IDScoreDate

     Current Data
|---------------------|------------------|------------------|
|          ID         |       Score      |       Date       |
|---------------------|------------------|------------------|
|          123        |         3        |       05/01      |
|---------------------|------------------|------------------|
|          123        |         2        |       04/25      |
|---------------------|------------------|------------------|
|          123        |         2        |       04/20      |
|---------------------|------------------|------------------|
|          123        |         1        |       04/15      |
|---------------------|------------------|------------------|
|          123        |         2        |       04/10      |
|---------------------|------------------|------------------|
|          123        |         1        |       04/05      |
|---------------------|------------------|------------------|
|          456        |         6        |       04/30      |
|---------------------|------------------|------------------|
|          456        |         5        |       04/20      |
|---------------------|------------------|------------------|
|          456        |         4        |       04/10      |
|---------------------|------------------|------------------|
|          456        |         4        |       04/05      |
|---------------------|------------------|------------------|
|          456        |         6        |       04/01      |
|---------------------|------------------|------------------|
     Desired Table
|---------------------|------------------|------------------|
|          ID         |       Score      |       Date       |
|---------------------|------------------|------------------|
|          123        |         3        |       05/01      |
|---------------------|------------------|------------------|
|          123        |         2        |       04/25      |
|---------------------|------------------|------------------|
|          123        |         1        |       04/15      |
|---------------------|------------------|------------------|
|          123        |         2        |       04/10      |
|---------------------|------------------|------------------|
|          123        |         1        |       04/05      |
|---------------------|------------------|------------------|
|          456        |         6        |       04/30      |
|---------------------|------------------|------------------|
|          456        |         5        |       04/20      |
|---------------------|------------------|------------------|
|          456        |         4        |       04/10      |
|---------------------|------------------|------------------|
|          456        |         6        |       04/01      |
|---------------------|------------------|------------------|

我试图只显示 ID 值已更改的行。我认为使用“删除重复项”太过分了,并且排除了值从121到的时间2(我想显示所有四行/值,但它只显示最新的12)。

任何帮助,将不胜感激。谢谢

标签: powerbipowerquery

解决方案


听起来您正在尝试做的是标记排序列表中的所有行,其中 [ID=previous row ID] AND [Score=previous row Score]

添加一个索引,然后使用上一行引用ColumnName的值

= #"PreviousStepName"{[Index]-1}[ColumnName]

使用它来创建 if/then 公式来标记要删除的代码,然后删除它们

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type date}}),
#"Sorted Rows" = Table.Sort(#"Changed Type" ,{{"ID", Order.Ascending}, {"Date", Order.Descending}}),
#"Added Index" = Table.AddIndexColumn(#"Sorted Rows" , "Index", 0, 1),
#"Added Custom" = Table.AddColumn(#"Added Index" , "Custom", each if [Index]=0 then null else if [ID] = #"Sorted Rows"{[Index]-1}[ID] and [Score] = #"Sorted Rows"{[Index]-1}[Score] then "remove" else null),
#"Filtered Rows" = Table.SelectRows(#"Added Custom", each ([Custom] = null)),
#"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"Index", "Custom"})
in #"Removed Columns"

编辑以交换每个评论的排序和索引行


推荐阅读