天天看點

List.Transform成績按等級展開案例本期是案例是需要對各項成績的評比情況進行橫向展開,每個科目對應四個評比等級

作者:可樂之濱

List.Transform 成績按等級展開案例

本期是案例是需要對各項成績的評比情況進行橫向展開,每個科目對應四個評比等級,前後轉換效果如(圖1、圖2)。

解題步驟

1.本期案例相對比較簡單,這個案例其實有意思的是在标題,怎麼能顯示成結果的樣式。這裡對行進行擴充,按四個等級進行擴充,就獲得了對應的行資料(圖3)。

步驟1代碼:

Table.ToList(源,each List.Combine(List.Transform(List.Skip(_),(x)=>List.Transform({"優","良","中","差"},(y)=>if y=x then x else ""))))

2.連接配接首項,直接轉換為表(圖4)。

步驟2代碼:

Table.FromRows(Table.ToList(源,each {_{0}}&List.Combine(List.Transform(List.Skip(_),(x)=>List.Transform({"優","良","中","差"},(y)=>if y=x then x else "")))))

3.構造符合要求的标題字段。這裡可以提取源标題進行擴充,比如科目“國文”,就可以按{1..4}四個進行周遊擴充,讓科目前後分别插入等級對應的空格數,這樣資料加載可以直接滿足要求(圖5)。

步驟3代碼:

List.Combine(List.Transform(Table.ColumnNames(源),each if _="姓名" then {_} else List.Transform({1..4},(x)=>Text.Insert(Text.Repeat(" ",x*2),x,_))))

4.将前述兩個步驟進行整合,結果如圖6:

合并代碼:

Table.FromRows(Table.ToList(源,each {_{0}}&List.Combine(List.Transform(List.Skip(_),(x)=>List.Transform({"優","良","中","差"},(y)=>if y=x then x else "")))),List.Combine(List.Transform(Table.ColumnNames(源),each if _="姓名" then {_} else List.Transform({1..4},(x)=>Text.Insert(Text.Repeat(" ",x*2),x,_)))))

5. 使用List.TransformMany進行擴充,結果見圖7。

詳細代碼:

Table.FromRows(Table.ToList(源,each {_{0}}&List.TransformMany(List.Skip(_),each {"優","良","中","差"},(x,y)=>if x=y then y else "")),{"姓名"}&List.TransformMany(List.Skip(Table.ColumnNames(源)),each {1..4},(x,y)=>Text.Insert(Text.Repeat(" ",y*2),y,x)))

如果不考慮标題字段居中顯示,也可以直接将科目名稱與空格直接連接配接就可以。

List.Transform成績按等級展開案例本期是案例是需要對各項成績的評比情況進行橫向展開,每個科目對應四個評比等級
List.Transform成績按等級展開案例本期是案例是需要對各項成績的評比情況進行橫向展開,每個科目對應四個評比等級
List.Transform成績按等級展開案例本期是案例是需要對各項成績的評比情況進行橫向展開,每個科目對應四個評比等級
List.Transform成績按等級展開案例本期是案例是需要對各項成績的評比情況進行橫向展開,每個科目對應四個評比等級
List.Transform成績按等級展開案例本期是案例是需要對各項成績的評比情況進行橫向展開,每個科目對應四個評比等級
List.Transform成績按等級展開案例本期是案例是需要對各項成績的評比情況進行橫向展開,每個科目對應四個評比等級
List.Transform成績按等級展開案例本期是案例是需要對各項成績的評比情況進行橫向展開,每個科目對應四個評比等級

繼續閱讀