我有一个数据表,其中记录了成本节省数据,每个项目有1行。它具有总体项目类型数据,例如年度支出,年度节省等,但也包含节省的月份。为了处理这些数据,我使用PowerQuery将其转换为表格,但重复了一些列,例如存在储蓄的每个月的年度支出,因此我可能会得到10行的储蓄是正确的,但是年度支出重复了10次。我可以只删除保留其他数据的那些列中的重复项吗?
我已经搜索并尝试了各种解决方案,但没有找到可行的解决方案。我没有设置数据表格式,所以可以打开任何东西。
下面是数据样本
PowerQuery示例
正如您将看到的,每行都显示了“基线支出”,“协商支出”,“储蓄额”,我需要在数据透视/切片器中使用它们。
任何帮助将不胜感激。
此致
基思
答案 0 :(得分:0)
我认为一个解决方案可能是“仅保留每个项目的前 1 个年度支出”。更抽象地讲,“仅将第一个列X
的第一个值保留在Y
列中”。
下面是一些模拟/虚拟数据。我只想将突出显示的值保留在annual spend
列中(因为突出显示的值是每个“项目”的第一个“年度支出”数字)。
这是我用来实现此目的的M
代码。 (要尝试,open the Query Editor > Advanced Editor (near top right) > copy-paste code below to there > OK
)。
let
OnlyKeepFirstValueInColumn = (someTable as table, columnsToNullify as list) as table =>
let
firstRow = Table.FirstN(someTable, 1), // This assumes first row contains a non-blank value.
remainingRows = Table.Skip(someTable, 1),
loopAndNullify = List.Accumulate(columnsToNullify, remainingRows, (tableState, currentHeader) => Table.TransformColumns(tableState, {{currentHeader, each null}})),
combined = firstRow & loopAndNullify
in combined,
FirstValueOfColumnsPerGroup = (someTable as table, groupByColumns as list, columnsToNullify as list) =>
let
group = Table.Group(someTable, groupByColumns, {{"toCombine", each OnlyKeepFirstValueInColumn(_, columnsToNullify), type table}}),
combined = Table.Combine(group[toCombine])
in combined,
aggregatedTable = Table.FromColumns({Text.ToList("aaabbbccccdddeeefg"), List.Repeat({1000}, Text.Length("aaabbbccccdddeeefg"))}, type table [project=text, annual spend=number]),
transformed = FirstValueOfColumnsPerGroup(aggregatedTable, {"project"}, {"annual spend"})
in
transformed
要理解的重要一点是这一行:
transformed = FirstValueOfColumnsPerGroup(aggregatedTable, {"project"}, {"annual spend"})
您应在其中替换的
aggregatedTable
,其中包含表的任何变量/表达式{"project"}
和“项目”列的名称相同(请保留大括号{}
,因为如果需要的话,它们可以让您通过几列){"annual spend"}
,其中要保留第一个值的列的名称(保留大括号{}
)这就是我得到的(我认为与您想要的类似):
1 为简单起见,我们说“ first”是指第一行中的值。它本来可以表示“第一个非空值”或“满足某些特定条件或逻辑的第一个值”,但您的数据表明,更简单的定义可以正常工作。