在 Power BI / Power Query 中添加 table 中 table 的先前值列
Add column of previous values from table of tables in Power BI / Power Query
正在寻找 Max Zelensky's solution here 的跟进。假设原始示例有一个 [Date] 字段,我正在尝试更上一层楼并添加一个列来显示先前的 [Date] 值
我也看过 and here and 。
Per Max,我创建了 table 的 table:
AddedCustom = Table.AddColumn(GroupedRows, "Custom", each Table.AddIndexColumn([tmp],"Occurrence", 1,1) type table)
创建了第二个索引:
SecondIndex= Table.AddColumn(AddedCustom, "Custom.2", each Table.AddIndexColumn([Custom],"Occurance.2", 0,1), type table)
我已成功添加引用当前 [Date] 行的列:
CurrentDate= Table.AddColumn(SecondIndex, "Date.2", each Table.AddColumn([Custom.2],"Date.2", each [Date]), type table)
但是当我尝试引用任一索引列时(即使只是放入 {0}),新字段也会出错。我相当确定我在 table 列中的 table 中引用行的语法中遗漏了一些东西,但我只是不确定如何到达那里 - 几个例子我试过没有成功:
PriorDate= Table.AddColumn(SecondIndex, "PriorDate", each Table.AddColumn([Custom.2],"Prior Date", each {0}[Date]), type table)
-- 看看我是否可以 return 第一行的值
PriorDate= Table.AddColumn(SecondIndex, "PriorDate", each Table.AddColumn([Custom.2],"Prior Date", each {[Occurance.2]}[Date]), type table)
-- 不适用于 [Occurance] 或 [Occurance.2]
PriorDate= Table.AddColumn(SecondIndex, "PriorDate", each Table.AddColumn([Custom.2],"Prior Date", each {[Occurance]-1}[Date]), type table)
PriorDate= Table.AddColumn(SecondIndex, "PriorDate", each Table.AddColumn([Custom.2],"Prior Date", each [Custom.2]{0}[Date]), type table)
PriorDate= Table.AddColumn(SecondIndex, "PriorDate", each Table.AddColumn([Custom.2],"Prior Date", each Table.SelectColums([Custom.2],[Date])), type table)
此外,任何人都可以为我指出优化#Tables、{Lists}、[Records] 等的语法和机制的良好参考。我将不胜感激(我已阅读 Ken Puls 的书的第 20 章几次,但还没有完全卡住)。提前致谢!
| Name | Date | Occurance | Prior Date (Desired) |
|------|----------|-----------|----------------------|
| A | 1/1/2019 | 1 | null/error |
| A | 3/1/2019 | 2 | 1/1/2019 |
| B | 2/1/2019 | 1 | null/error |
| A | 4/1/2019 | 3 | 3/1/2019 |
| B | 5/1/2019 | 2 | 2/1/2019 |
和我的类似,不是只加一个索引,而是可以加两个,一个从0
开始,一个从1
开始,我们用来计算通过执行自合并上一行。
let
Source = Table.FromRows({{"A",#date(2019,1,1)},{"A",#date(2019,1,3)},{"B",#date(2019,1,2)},{"A",#date(2019,1,4)},{"B",#date(2019,1,5)}}, {"Name", "Date"}),
ChangeTypes = Table.TransformColumnTypes(Source,{{"Name", type text}, {"Date", type date}}),
GroupByName = Table.Group(ChangeTypes, {"Name"}, {{"tmp", each _, type table}}),
AddIndices = Table.AddColumn(GroupByName, "Custom", each Table.AddIndexColumn(Table.AddIndexColumn([tmp],"Occurrence", 1,1),"Prev",0,1)),
ExpandTables = Table.ExpandTableColumn(AddIndices, "Custom", {"Date", "Occurrence", "Prev"}, {"Date", "Occurrence", "Prev"}),
SelfMerge = Table.NestedJoin(ExpandTables,{"Name", "Prev"},ExpandTables,{"Name", "Occurrence"},"Expanded Custom",JoinKind.LeftOuter),
ExpandPriorDate = Table.ExpandTableColumn(SelfMerge, "Expanded Custom", {"Date"}, {"Prior Date"}),
RemoveExtraColumns = Table.RemoveColumns(ExpandPriorDate,{"Prev", "tmp"})
in
RemoveExtraColumns
正在寻找 Max Zelensky's solution here 的跟进。假设原始示例有一个 [Date] 字段,我正在尝试更上一层楼并添加一个列来显示先前的 [Date] 值
我也看过
Per Max,我创建了 table 的 table:
AddedCustom = Table.AddColumn(GroupedRows, "Custom", each Table.AddIndexColumn([tmp],"Occurrence", 1,1) type table)
创建了第二个索引:
SecondIndex= Table.AddColumn(AddedCustom, "Custom.2", each Table.AddIndexColumn([Custom],"Occurance.2", 0,1), type table)
我已成功添加引用当前 [Date] 行的列:
CurrentDate= Table.AddColumn(SecondIndex, "Date.2", each Table.AddColumn([Custom.2],"Date.2", each [Date]), type table)
但是当我尝试引用任一索引列时(即使只是放入 {0}),新字段也会出错。我相当确定我在 table 列中的 table 中引用行的语法中遗漏了一些东西,但我只是不确定如何到达那里 - 几个例子我试过没有成功:
PriorDate= Table.AddColumn(SecondIndex, "PriorDate", each Table.AddColumn([Custom.2],"Prior Date", each {0}[Date]), type table)
-- 看看我是否可以 return 第一行的值PriorDate= Table.AddColumn(SecondIndex, "PriorDate", each Table.AddColumn([Custom.2],"Prior Date", each {[Occurance.2]}[Date]), type table)
-- 不适用于 [Occurance] 或 [Occurance.2]PriorDate= Table.AddColumn(SecondIndex, "PriorDate", each Table.AddColumn([Custom.2],"Prior Date", each {[Occurance]-1}[Date]), type table)
PriorDate= Table.AddColumn(SecondIndex, "PriorDate", each Table.AddColumn([Custom.2],"Prior Date", each [Custom.2]{0}[Date]), type table)
PriorDate= Table.AddColumn(SecondIndex, "PriorDate", each Table.AddColumn([Custom.2],"Prior Date", each Table.SelectColums([Custom.2],[Date])), type table)
此外,任何人都可以为我指出优化#Tables、{Lists}、[Records] 等的语法和机制的良好参考。我将不胜感激(我已阅读 Ken Puls 的书的第 20 章几次,但还没有完全卡住)。提前致谢!
| Name | Date | Occurance | Prior Date (Desired) |
|------|----------|-----------|----------------------|
| A | 1/1/2019 | 1 | null/error |
| A | 3/1/2019 | 2 | 1/1/2019 |
| B | 2/1/2019 | 1 | null/error |
| A | 4/1/2019 | 3 | 3/1/2019 |
| B | 5/1/2019 | 2 | 2/1/2019 |
和我的0
开始,一个从1
开始,我们用来计算通过执行自合并上一行。
let
Source = Table.FromRows({{"A",#date(2019,1,1)},{"A",#date(2019,1,3)},{"B",#date(2019,1,2)},{"A",#date(2019,1,4)},{"B",#date(2019,1,5)}}, {"Name", "Date"}),
ChangeTypes = Table.TransformColumnTypes(Source,{{"Name", type text}, {"Date", type date}}),
GroupByName = Table.Group(ChangeTypes, {"Name"}, {{"tmp", each _, type table}}),
AddIndices = Table.AddColumn(GroupByName, "Custom", each Table.AddIndexColumn(Table.AddIndexColumn([tmp],"Occurrence", 1,1),"Prev",0,1)),
ExpandTables = Table.ExpandTableColumn(AddIndices, "Custom", {"Date", "Occurrence", "Prev"}, {"Date", "Occurrence", "Prev"}),
SelfMerge = Table.NestedJoin(ExpandTables,{"Name", "Prev"},ExpandTables,{"Name", "Occurrence"},"Expanded Custom",JoinKind.LeftOuter),
ExpandPriorDate = Table.ExpandTableColumn(SelfMerge, "Expanded Custom", {"Date"}, {"Prior Date"}),
RemoveExtraColumns = Table.RemoveColumns(ExpandPriorDate,{"Prev", "tmp"})
in
RemoveExtraColumns