excel 通过将中的某些行更改为“列”来规范化表

8xiog9wr  于 2023-03-13  发布在  其他
关注(0)|答案(2)|浏览(114)

下面的示例表中有一个部分,其中包含问题和每个问题可能包含的答案,所有这些都在一行中。每个问题可以包含1到4个答案。
| 辅助名称|问题文本|答案1|应答1自动失败|答案1评分|答案二|Answe 2自动失败|答案2评分|答案三|Answer 3自动失败|答案3评分|答案四|Answer 4自动失败|答案4评分|
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|
| 客户满意度|条例草案是否|教学大纲列出了要点|错误|1个|教学大纲列出了|错误|1个|错误的列|错误|无|没有总数|错误|无|
| 客户满意度|执行开票条款|是的|错误|五个|没有|错误|无|||||||
| 客户满意度|具有所有适当的行|有一个ISBN|错误|1个|没有ISBN|错误|无|列出了ISBN编号|错误|无||||
我需要将数据导入到Salesforce数据库中,并且需要规范化结构,使每行都可以包含Section、Question和One Answer及其属性(如AutoFail和Score)。下面是规范化表的示例,每行都有答案
| 辅助名称|问题文本|答桉|Answe自动失败|回答分数|
| - ------|- ------|- ------|- ------|- ------|
| 客户满意度|条例草案是否|教学大纲列出了要点|错误|1个|
| 客户满意度|条例草案是否|教学大纲列出了|错误|1个|
| 客户满意度|条例草案是否|错误的列|错误|无|
| 客户满意度|条例草案是否|没有总数|错误|无|
| 客户满意度|执行开票条款|是的|错误|五个|
| 客户满意度|执行开票条款|没有|错误|无|
| 客户满意度|具有所有适当的行|有一个ISBN|错误|1个|
| 客户满意度|具有所有适当的行|没有ISBN|错误|无|
| 客户满意度|具有所有适当的行|列出了ISBN编号|错误|无|
我不太熟悉PowerQuery或数据透视表。有人能帮我一下吗?我该如何规范化这个...任何帮助都非常感谢

zour9fqk

zour9fqk1#

由于您已经正确地标记了此问题,因此某位Maven可能会提供更短的语法

let
    TableOne = Table.AddIndexColumn(Table.UnpivotOtherColumns(Excel.CurrentWorkbook(){[Name="Table1"]}[Content], {"Sec Name", "Question Text"}, "Attribute", "Value"), "Index", 1, 1, Int64.Type),
    TableTwo = Table.AddIndexColumn(TableOne, "Index.1", 0, 1, Int64.Type),
    MergeOne = Table.AddIndexColumn(Table.ExpandTableColumn(Table.NestedJoin(TableOne, {"Index"}, TableTwo, {"Index.1"}, "Table2", JoinKind.Inner), "Table2", {"Value"}, {"Value.1"}), "Index.1", 3, 1, Int64.Type),
    Output = Table.RenameColumns(Table.RemoveColumns(Table.SelectRows(Table.ExpandTableColumn(Table.NestedJoin(MergeOne, {"Index.1"}, TableOne, {"Index"}, "Table2", JoinKind.LeftOuter), "Table2", {"Value"}, {"Value.2"}), each Number.Mod([Index],3) = 1),{"Attribute", "Index", "Index.1"}),{{"Value", "Answer"}, {"Value.1", "Answer Autofail"}, {"Value.2", "Answer Score"}})
in
    Output

从UI的Angular 来看,这涉及到与上一个问题相同的所有步骤,外加一个额外的步骤:将第一个merge与第一个表合并(左外连接),然后过滤该结果以查找当前索引与3的模等于1的值

a14dhokn

a14dhokn2#

您可以使用Excel函数进行计算,假设为O365。将以下公式放入A7中:

=LET(in,A2:N4, gr,3, q,4, seq,SEQUENCE(q,,1,0), h,{"Sec Name","Question Text",
 "Answer","Answe Autofail","Answer Score"}, PIVOT, LAMBDA(x, 
 HSTACK(REPT(INDEX(x,{1,2}),seq),WRAPROWS(DROP(x,,2),gr))),
 REDUCE(h, SEQUENCE(ROWS(in)), LAMBDA(ac,i, VSTACK(ac,PIVOT(INDEX(in,i,))))))

下面是输出:

我们使用REDUCE/VSTACK模式。查看我对这个问题的回答以获取更多信息:如何将Excel中的表格从垂直转换为水平,但长度不同。用户LAMBDA函数PIVOTREDUCE的每次迭代中对每行进行透视。名称:gr(每个答案信息的列数)和q(我们的问题数),控制如何组织信息。

相关问题