【发布时间】:2020-06-30 00:12:14
【问题描述】:
我有以下格式的 excel 数据结构
我想做的就是把它变成这个。简而言之,对于每个 ID,我想记录与前一天的值差异,如果前一天没有值,我们只保留当前值。
作为中间步骤,我试图将原始数据转换成类似的东西,但我不确定如何在简单的 Excel 数据透视表或 Power 查询转换中进行。
【问题讨论】:
标签: excel pivot-table powerquery
我有以下格式的 excel 数据结构
我想做的就是把它变成这个。简而言之,对于每个 ID,我想记录与前一天的值差异,如果前一天没有值,我们只保留当前值。
作为中间步骤,我试图将原始数据转换成类似的东西,但我不确定如何在简单的 Excel 数据透视表或 Power 查询转换中进行。
【问题讨论】:
标签: excel pivot-table powerquery
您的示例有问题,因为 [v1-v2] 与 [v5-v4, v3-v2, v8-v7] 的方法不同,但我认为后者是正确的
看看这是否适合你
假设数据在名为 Table1 的范围内的 3 列中,列标题为 Dates, ID, Value
您可以使用...高级编辑器...粘贴到 PowerQuery ...
为该 ID 创建一个值为昨天的列,如果未找到任何内容,则返回 null。然后做减法,然后旋转
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Dates", type date}, {"ID", type text}, {"Value", Int64.Type}}),
Yesterday = Table.AddColumn(#"Changed Type" , "Yesterday", (i) => List.Sum(Table.SelectRows( #"Changed Type", each ([ID] = i[ID] and Date.AddDays([Dates],1) = i[Dates]))[Value]), type number ),
#"Replaced Value" = Table.ReplaceValue(Yesterday,null,0,Replacer.ReplaceValue,{"Yesterday"}),
#"Added Custom" = Table.AddColumn(#"Replaced Value", "Custom", each [Value]-[Yesterday]),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Value", "Yesterday"}),
#"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(#"Removed Columns", {{"Dates", type text}}, "en-US"), List.Distinct(Table.TransformColumnTypes(#"Removed Columns", {{"Dates", type text}}, "en-US")[Dates]), "Dates", "Custom", List.Sum)
in #"Pivoted Column"
【讨论】: