2017-06-21 51 views
0

在回答关于this question如何扩大所有列表中列出了一排的同时,@Carl沃尔什热心地提供这种简洁和有用的代码:如何在不重复值的情况下同时扩展列表中的所有列表?

let 
Source = #table({"A", "B"}, {{ {1,2}, {3,4}} }), 
Expanded = List.Accumulate(
    Table.ColumnNames(Source), 
    Source, 
    (state, column) => Table.ExpandListColumn(state, column)) 
in 
Expanded 

其中产量如下:

enter image description here

我希望得到这样的结果,而不是:

enter image description here

我不希望在处理每个后续列时在先前处理的列中重复值。

是否有一个简单的卡尔代码修改,将让我在那里?

回答

1

也许不是很简单,但有效:下面的代码将列与调整后的代码结合起来,这样列表就被压缩,内部列表被转换成记录。接下来列表列被展开,产生一个嵌套记录的列,随后展开。

不幸的是,你不能使用组合列和嵌套列表,所以我首先创建了一些虚拟文本列,以便生成基本代码,随后我调整了基本代码,并删除了虚拟列的步骤。

let 
    Source = #table({"A", "B"}, {{ {1,2}, {3,4}} }), 
    #"Merged Columns" = Table.CombineColumns(Source,{"A", "B"}, each List.Transform(List.Zip(_), each Record.FromList(_,{"A","B"})),"Merged"), 
    #"Expanded Merged" = Table.ExpandListColumn(#"Merged Columns", "Merged"), 
    #"Expanded Merged1" = Table.ExpandRecordColumn(#"Expanded Merged", "Merged", {"A", "B"}, {"A", "B"}) 
in 
    #"Expanded Merged1" 
+0

谢谢。我想在这里学习一点,所以如果你不介意的话......请你在组合器部分解释'_'的用法:'每个List.Transform(List.Zip(_),每个Record .FromList(_,{ “A”, “B”}))'?我很确定它是列表的“名称”,但我不明白它的用法。如果你能解释一下,或者会指导我获得更多关于它的信息,以便我可以更多地了解它,我一定会很感激它的。 –

+0

_与关键字“each”结合使用。第一个_(在“List.Zip”中)引用正在组合的列中的值,即列A和B中源表中的嵌套列表。 第二个_属于压缩列表的每个内部列表即{1,3}和{2,4}。 通常,“每个”始终指向每个表行或每个列表项中的值。在Table.CombineColumns的情况下,它仅指向正在组合的列中的值。 – MarcelBeug

相关问题