动态旋转 excel 中的多个列

Dynamically Pivot Multiple Columns in excel

我有以下数据,我希望将其转换为右侧的 table。 (请注意,此数据是手动输入的,可能存在错误)

我不确定旋转是否是解决此问题的正确方法,但如果我只有一列,它会达到预期的效果。

源数据已经应用了一系列的转换来简化到这个阶段,但是我现在正在研究尝试实现右边的table。

我很感激我可以创建一系列自定义列我希望这个 table 动态工作,这样如果用户要创建不同的 Dose Descriptor 将动态生成一个新列.再次为简单起见,我只使用 NOAELDNELADI 作为剂量描述符,但其他的例如TUL存在。

我会在这里更新我取得的任何进展,但不幸的是,我只是在尝试这样做时感到困惑。

数据:

CAS 编号

77-92-9
77-92-9
106-24-1
106-24-1
106-24-1
7632-00-3
107-41-5
107-88-1
107-88-1
107-88-1
497-19-8
497-19-9
1300-72-7
99-76-3

化学名称

citric acid/ 2-Hydroxypropane-1,2,3-tricarboxylic acid
citric acid/ 2-Hydroxypropane-1,2,3-tricarboxylic acid
GERANIOL
GERANIOL
GERANIOL
Sodium nitrite
2-Methyl-2,4-pentanediol
1,3-Butylene glycol
1,3-Butylene glycol
1,3-Butylene glycol
sodium carbonate
sodium carbonate
Sodium xylenesulfonate
Methyl 4-hydroxybenzoate

剂量描述符

NOAEL
DNEL
NOAEL
DNEL
ADI
DNEL
DNEL
NOAEL
DNEL
ADI
ADI
NOAEL
NOAEL
DNEL

使用来自 table/range [x]headers

的数据将数据加载到 powerquery

单击 select 前 4 列,右键单击,取消透视其他列

添加列...自定义列...使用公式

= [Dose] & " " & [Attribute]

右键单击并删除剂量和属性列

单击 select 自定义列并转换...数据透视列 ..

使用VALUE作为值列,高级,不聚合

文件 .. 关闭并加载

示例代码:

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"No.", Int64.Type}, {"CAS Number", type text}, {"Chemical name", type text}, {"Dose", type text}, {"Oral", Int64.Type}, {"Inhale", Int64.Type}, {"Dermal", Int64.Type}}),
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"No.", "CAS Number", "Chemical name", "Dose"}, "Attribute", "Value"),
#"Added Custom" = Table.AddColumn(#"Unpivoted Other Columns", "Custom", each [Dose] & " " &[Attribute]),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Dose", "Attribute"}),
#"Pivoted Column" = Table.Pivot(#"Removed Columns", List.Distinct(#"Removed Columns"[Custom]), "Custom", "Value")
in  #"Pivoted Column"