功率查询计算标记的变化百分比
Power query calculate Percentage of changes in marks
我的 excel 中有一个学生数据集。让我在这里显示数据集。我有n个学校和各年学校取得的分数。
看到,在上面的数据集中,我想计算前两年的总分变化百分比。
Percentage of changes = (Current Year Total - Previous Year Total) / Previous Year Total * 100
看看 S1 学校,它在 2020 年没有化学科目,但在 2021 年有。所以在计算本年度总数时,我想从 2021 年开始避免化学。这就像苹果与苹果的比较。同样对于 2020 年,由于没有 2019 年的可用数据,因此 2020 年的变化百分比应该为 0 或 null。
我期待以下输出,
如何在 Power Query M 语言中执行此操作?
将所有数据加载到 Powerquery 中(数据 ... 来自 table/range [x] headers)如果粘贴到主页,这似乎有效...高级编辑器...确保使用您的 table 名称而不是 Table1,就像我的示例
我基本上做的是从年份中减去一个并将 table 合并到自身之上以找到前一年的值。然后,如果前一年的总数为零(缺少主题),则从当年删除该值。然后我对 Year 和 School 进行分组并进行计算,总计取决于 Total 和 revised-Total 中的较低者,因为不同的年份会对不同的列求和
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"School", type text}, {"Year", Int64.Type}, {"Subject", type text}, {"Total", Int64.Type}}),
#"Filtered Rows" = Table.SelectRows(#"Changed Type", each ([School] <> null)),
#"Added Custom" = Table.AddColumn(#"Filtered Rows", "Prior Year", each [Year]-1),
#"Merged Queries" = Table.NestedJoin(#"Added Custom", {"School", "Subject", "Prior Year"}, #"Added Custom", {"School", "Subject", "Year"}, "Table2", JoinKind.LeftOuter),
#"Expanded Table" = Table.ExpandTableColumn(#"Merged Queries", "Table2", {"Total"}, {"PriorYearTotal"}),
#"Added Custom2" = Table.AddColumn(#"Expanded Table", "RevisedTotal", each if [PriorYearTotal]=null then 0 else [Total]),
#"Grouped Rows" = Table.Group(#"Added Custom2", {"School", "Year"}, {
{"Total", each if List.Sum([RevisedTotal])=0 then List.Sum([Total]) else if List.Sum([RevisedTotal])<List.Sum([Total]) then List.Sum([RevisedTotal]) else List.Sum([Total]), type nullable number},
{"Percent", each (List.Sum([RevisedTotal])-List.Sum([PriorYearTotal]))/List.Sum([PriorYearTotal])*100, type nullable number}})
in #"Grouped Rows"
我的 excel 中有一个学生数据集。让我在这里显示数据集。我有n个学校和各年学校取得的分数。
看到,在上面的数据集中,我想计算前两年的总分变化百分比。
Percentage of changes = (Current Year Total - Previous Year Total) / Previous Year Total * 100
看看 S1 学校,它在 2020 年没有化学科目,但在 2021 年有。所以在计算本年度总数时,我想从 2021 年开始避免化学。这就像苹果与苹果的比较。同样对于 2020 年,由于没有 2019 年的可用数据,因此 2020 年的变化百分比应该为 0 或 null。
我期待以下输出,
如何在 Power Query M 语言中执行此操作?
将所有数据加载到 Powerquery 中(数据 ... 来自 table/range [x] headers)如果粘贴到主页,这似乎有效...高级编辑器...确保使用您的 table 名称而不是 Table1,就像我的示例
我基本上做的是从年份中减去一个并将 table 合并到自身之上以找到前一年的值。然后,如果前一年的总数为零(缺少主题),则从当年删除该值。然后我对 Year 和 School 进行分组并进行计算,总计取决于 Total 和 revised-Total 中的较低者,因为不同的年份会对不同的列求和
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"School", type text}, {"Year", Int64.Type}, {"Subject", type text}, {"Total", Int64.Type}}),
#"Filtered Rows" = Table.SelectRows(#"Changed Type", each ([School] <> null)),
#"Added Custom" = Table.AddColumn(#"Filtered Rows", "Prior Year", each [Year]-1),
#"Merged Queries" = Table.NestedJoin(#"Added Custom", {"School", "Subject", "Prior Year"}, #"Added Custom", {"School", "Subject", "Year"}, "Table2", JoinKind.LeftOuter),
#"Expanded Table" = Table.ExpandTableColumn(#"Merged Queries", "Table2", {"Total"}, {"PriorYearTotal"}),
#"Added Custom2" = Table.AddColumn(#"Expanded Table", "RevisedTotal", each if [PriorYearTotal]=null then 0 else [Total]),
#"Grouped Rows" = Table.Group(#"Added Custom2", {"School", "Year"}, {
{"Total", each if List.Sum([RevisedTotal])=0 then List.Sum([Total]) else if List.Sum([RevisedTotal])<List.Sum([Total]) then List.Sum([RevisedTotal]) else List.Sum([Total]), type nullable number},
{"Percent", each (List.Sum([RevisedTotal])-List.Sum([PriorYearTotal]))/List.Sum([PriorYearTotal])*100, type nullable number}})
in #"Grouped Rows"