从间隔 powerquery 创建唯一记录
Create unique records from intervals powerquery
我有一个 3 列 excel table,我想在其中存储一个组和 2 个维度。
Dim 1 始终只是一个值
Dim 2 可以是用逗号分隔的多个间隔,也可以只是一个值。
我的目标是在 powerquery 中生成具有所有不同组合的 table,以便将其用作密钥。对此提供一些帮助将不胜感激!
开始:
完成:
我使用以下 M 代码将您的开始 table 转换为所需的结果
let
Quelle = Excel.CurrentWorkbook(){[Name="tblData"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"group", type text}, {"dim1", Int64.Type}, {"dim2", type text}}),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Geänderter Typ", "dim2_list", each Text.Split([dim2],",")),
#"Erweiterte Benutzerdefiniert" = Table.ExpandListColumn(#"Hinzugefügte benutzerdefinierte Spalte", "dim2_list"),
#"Entfernte Spalten" = Table.RemoveColumns(#"Erweiterte Benutzerdefiniert",{"dim2"}),
#"Hinzugefügte benutzerdefinierte Spalte1" = Table.AddColumn(#"Entfernte Spalten", "dim2", each fnCreateList([dim2_list])),
#"Erweiterte dim2" = Table.ExpandListColumn(#"Hinzugefügte benutzerdefinierte Spalte1", "dim2"),
#"Entfernte Spalten1" = Table.RemoveColumns(#"Erweiterte dim2",{"dim2_list"})
in
#"Entfernte Spalten1"
上面代码中使用的函数fnCreateList
(inp as text) =>
let
secondNo= Number.FromText(Text.End(inp,Text.Length(inp)- Text.PositionOf(inp,"-")-1)),
firstNo =try Number.FromText(Text.Start(inp,Text.PositionOf(inp,"-"))) otherwise secondNo,
result= {firstNo .. secondNo}
in
result
我最终使用了这个,但我非常感谢你的代码:)
let
Källa = Excel.CurrentWorkbook(){[Name="Tabell1"]}[Content],
#"Ändrad typ" = Table.TransformColumnTypes(Källa,{{"Group", type text}, {"Dim1", type text}, {"Dim2", type any}}),
#"Ändrad typ1" = Table.TransformColumnTypes(#"Ändrad typ",{{"Dim2", type text}}),
#"Lägg till egen" = Table.AddColumn(#"Ändrad typ1", "Ansvar", each let
commaList = Text.Split([Dim2], ","),
totList = List.Accumulate(commaList, {}, (state, current) =>
let
intervalList = Text.Split(current,"-"),
startValue = Number.From(List.First(intervalList)),
endValue = Number.From(List.Last(intervalList)),
genList = state & List.Generate(() => startValue, each _ <= endValue, each _ + 1)
in
genList
),
transformedList = List.Transform(totList, each Number.ToText(_)),
stringFromList = Text.Combine(transformedList, ", ")
in
transformedList),
#"Borttagna kolumner" = Table.RemoveColumns(#"Lägg till egen",{"Dim2"}),
#"Expanderad Ansvar" = Table.ExpandListColumn(#"Borttagna kolumner", "Ansvar")
in
#"Expanderad Ansvar"
我有一个 3 列 excel table,我想在其中存储一个组和 2 个维度。 Dim 1 始终只是一个值 Dim 2 可以是用逗号分隔的多个间隔,也可以只是一个值。
我的目标是在 powerquery 中生成具有所有不同组合的 table,以便将其用作密钥。对此提供一些帮助将不胜感激!
开始:
完成:
我使用以下 M 代码将您的开始 table 转换为所需的结果
let
Quelle = Excel.CurrentWorkbook(){[Name="tblData"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"group", type text}, {"dim1", Int64.Type}, {"dim2", type text}}),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Geänderter Typ", "dim2_list", each Text.Split([dim2],",")),
#"Erweiterte Benutzerdefiniert" = Table.ExpandListColumn(#"Hinzugefügte benutzerdefinierte Spalte", "dim2_list"),
#"Entfernte Spalten" = Table.RemoveColumns(#"Erweiterte Benutzerdefiniert",{"dim2"}),
#"Hinzugefügte benutzerdefinierte Spalte1" = Table.AddColumn(#"Entfernte Spalten", "dim2", each fnCreateList([dim2_list])),
#"Erweiterte dim2" = Table.ExpandListColumn(#"Hinzugefügte benutzerdefinierte Spalte1", "dim2"),
#"Entfernte Spalten1" = Table.RemoveColumns(#"Erweiterte dim2",{"dim2_list"})
in
#"Entfernte Spalten1"
上面代码中使用的函数fnCreateList
(inp as text) =>
let
secondNo= Number.FromText(Text.End(inp,Text.Length(inp)- Text.PositionOf(inp,"-")-1)),
firstNo =try Number.FromText(Text.Start(inp,Text.PositionOf(inp,"-"))) otherwise secondNo,
result= {firstNo .. secondNo}
in
result
我最终使用了这个,但我非常感谢你的代码:)
let
Källa = Excel.CurrentWorkbook(){[Name="Tabell1"]}[Content],
#"Ändrad typ" = Table.TransformColumnTypes(Källa,{{"Group", type text}, {"Dim1", type text}, {"Dim2", type any}}),
#"Ändrad typ1" = Table.TransformColumnTypes(#"Ändrad typ",{{"Dim2", type text}}),
#"Lägg till egen" = Table.AddColumn(#"Ändrad typ1", "Ansvar", each let
commaList = Text.Split([Dim2], ","),
totList = List.Accumulate(commaList, {}, (state, current) =>
let
intervalList = Text.Split(current,"-"),
startValue = Number.From(List.First(intervalList)),
endValue = Number.From(List.Last(intervalList)),
genList = state & List.Generate(() => startValue, each _ <= endValue, each _ + 1)
in
genList
),
transformedList = List.Transform(totList, each Number.ToText(_)),
stringFromList = Text.Combine(transformedList, ", ")
in
transformedList),
#"Borttagna kolumner" = Table.RemoveColumns(#"Lägg till egen",{"Dim2"}),
#"Expanderad Ansvar" = Table.ExpandListColumn(#"Borttagna kolumner", "Ansvar")
in
#"Expanderad Ansvar"