PowerQuery - 运行 差异列 - 有点像 运行 总计
PowerQuery - running difference columns - a bit like running totals
我有一个关节问题,我不确定描述的最佳方式。
我正在尝试在 PowerQuery /(PowerBI 的转换部分)中生成一个 运行 总数和一个 运行 差异列。
我正在按性别查看一个地区 4 个不同地点的人口数据。
因此,某个位置有性别人口和总人口。推而广之还有地区性别和地区总人口。
例如
在某个日期,我正在计算吃汉堡包的人数。
(我不是,但我试图保持它的通用性)。
这一天会有一个地点的总人口。
例如
我想为
生成列
一 运行 共 :
在那个地方吃过汉堡包的人(所以今天的价值(电视)加上昨天的价值(yv))
在那个地方吃过汉堡包的男性
在那个地方吃过汉堡包的女性
一个 运行 的区别:
尚未在该位置吃汉堡包的人(所以昨天的位置人口(lpy)-电视)
尚未在该地点吃过汉堡包的男性
尚未在该地点吃过汉堡包的女性
有了这个定义,构建 powerquery 应该会变得更容易,这样就可以计算:
某地点have/not在特定日期吃过汉堡包的男性总人数
该地区 have/not 在某个日期
吃汉堡包的男性人数
等等,这样你就可以计算出一个地点有多少人have/have没有吃过汉堡,以及这对总地点比例和汉堡消费区域比例的贡献。
我可以在 BI 中快速生成一个快速度量来执行 运行 总计。但我遇到的问题是创建一个更复杂的 运行 总数。事实上,如果我 运行 这是正确的方式?
我有一个 table 的汇总数据,其中包含某个地区的人口分母。我想在处理过的 table 剩余人口中逐行计算,这样我就可以说“位置 1 have/have 中 x% 的男性,y% 的女性,xy% 的人吃过汉堡。
我什至不确定将 table 拆分到位置是否正确。
总结:我不知道怎么解决。
这可能会让您开始使用 Power Query。
这是一种为男性和女性生成单独 运行 总数的方法。
它是作为一个单独的函数编写的,因此也可以用于分组表。
它使用 List.Generate
功能,以及 Buffered List
速度。
fnRunningTotal
(values as list) as list =>
let
RT = List.Generate(
()=> [RT = values{0}, counter = 0],
each [counter] < List.Count(values),
each [RT = [RT] + values{[counter]+1}, counter = [counter]+1],
each [RT]
)
in
RT
Main MCode 编辑以缩短代码
let
Source = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{
{"Date", type date}, {"Location", type text}, {"Gender", type text}, {"Value", Int64.Type}, {"TotalPop", Int64.Type}}),
//add custom columns to separate by Gender
#"Added Custom" = Table.AddColumn(#"Changed Type", "maleValue", each if [Gender] = "M" then [Value] else 0),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "femaleValue", each if [Gender] = "F" then [Value] else 0),
//running totals for each Gender column
buffMale = List.Buffer(#"Added Custom1"[maleValue]),
buffFemale = List.Buffer(#"Added Custom1"[femaleValue]),
RT = Table.FromColumns(
List.Combine({Table.ToColumns(#"Added Custom1"),
{fnRunningTotal(buffMale), fnRunningTotal(buffFemale)}}),
List.Combine({Table.ColumnNames(#"Added Custom1"),
{"runningTotalMale","runningTotalFemale"}})
),
#"Removed Columns" = Table.RemoveColumns(RT,{"maleValue", "femaleValue"})
in
#"Removed Columns"
原创
结果
我有一个关节问题,我不确定描述的最佳方式。
我正在尝试在 PowerQuery /(PowerBI 的转换部分)中生成一个 运行 总数和一个 运行 差异列。
我正在按性别查看一个地区 4 个不同地点的人口数据。 因此,某个位置有性别人口和总人口。推而广之还有地区性别和地区总人口。
例如
在某个日期,我正在计算吃汉堡包的人数。 (我不是,但我试图保持它的通用性)。
这一天会有一个地点的总人口。
例如
我想为
生成列一 运行 共 : 在那个地方吃过汉堡包的人(所以今天的价值(电视)加上昨天的价值(yv)) 在那个地方吃过汉堡包的男性 在那个地方吃过汉堡包的女性
一个 运行 的区别: 尚未在该位置吃汉堡包的人(所以昨天的位置人口(lpy)-电视) 尚未在该地点吃过汉堡包的男性 尚未在该地点吃过汉堡包的女性
有了这个定义,构建 powerquery 应该会变得更容易,这样就可以计算:
某地点have/not在特定日期吃过汉堡包的男性总人数 该地区 have/not 在某个日期
吃汉堡包的男性人数等等,这样你就可以计算出一个地点有多少人have/have没有吃过汉堡,以及这对总地点比例和汉堡消费区域比例的贡献。
我可以在 BI 中快速生成一个快速度量来执行 运行 总计。但我遇到的问题是创建一个更复杂的 运行 总数。事实上,如果我 运行 这是正确的方式?
我有一个 table 的汇总数据,其中包含某个地区的人口分母。我想在处理过的 table 剩余人口中逐行计算,这样我就可以说“位置 1 have/have 中 x% 的男性,y% 的女性,xy% 的人吃过汉堡。
我什至不确定将 table 拆分到位置是否正确。
总结:我不知道怎么解决。
这可能会让您开始使用 Power Query。
这是一种为男性和女性生成单独 运行 总数的方法。
它是作为一个单独的函数编写的,因此也可以用于分组表。
它使用 List.Generate
功能,以及 Buffered List
速度。
fnRunningTotal
(values as list) as list =>
let
RT = List.Generate(
()=> [RT = values{0}, counter = 0],
each [counter] < List.Count(values),
each [RT = [RT] + values{[counter]+1}, counter = [counter]+1],
each [RT]
)
in
RT
Main MCode 编辑以缩短代码
let
Source = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{
{"Date", type date}, {"Location", type text}, {"Gender", type text}, {"Value", Int64.Type}, {"TotalPop", Int64.Type}}),
//add custom columns to separate by Gender
#"Added Custom" = Table.AddColumn(#"Changed Type", "maleValue", each if [Gender] = "M" then [Value] else 0),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "femaleValue", each if [Gender] = "F" then [Value] else 0),
//running totals for each Gender column
buffMale = List.Buffer(#"Added Custom1"[maleValue]),
buffFemale = List.Buffer(#"Added Custom1"[femaleValue]),
RT = Table.FromColumns(
List.Combine({Table.ToColumns(#"Added Custom1"),
{fnRunningTotal(buffMale), fnRunningTotal(buffFemale)}}),
List.Combine({Table.ColumnNames(#"Added Custom1"),
{"runningTotalMale","runningTotalFemale"}})
),
#"Removed Columns" = Table.RemoveColumns(RT,{"maleValue", "femaleValue"})
in
#"Removed Columns"
原创
结果