การแสดงข้อความใน Pivot table ของ Excel

เจ้าหน้าที่ IT คนหนึ่งถามผมว่าจะแสดงข้อความใน pivot table ของ Excel ต้องทำอย่างไร

โดยเค้าเอาตัวอย่างมาให้ดูตามรูปด้านล่างนี้

ข้อมูลจริงจะมี label ประมาณหลักแสนและ header มีประมาณหลักพัน

และผลที่ต้องการอยากให้มันคล้ายๆกับด้านล่างนี้

แน่นอนครับว่าถามผมแบบนี้ผมก็บอกว่าไม่รู้ครับว่าทำยังไงใน Excel

แต่ถ้าทำใน Mathematica ล่ะง่ายนิดเดียวครับ 🙂

อันนี้เป็น Mathematica codes ที่ผมเขียนครับ

(* แสดงข้อมูลทั้งหมดของ id ที่ต้องการ *)

datid[id_, data_] := Module[{pos, headls}, headls = data[[1]];
pos = Union[Position[headls, “label”], Position[headls, “label”]] //
Flatten;
Select[data, #[[pos[[1]]]] == id &]];

 

(* แสดง list ของ header ของข้อมูล *)

headerls[dat_] := Module[{ls},
ls = Union@dat[[2 ;; Length@dat, 2]];
ls
];

 

(* เแสดงข้อมูลเป็นแถวๆของ id ที่ต้องการ  *)

makerow[id_, dat_] := Module[{hdls, iddat, tmp, output, i, j},
hdls = headerls[dat];
iddat = datid[id, dat];
tmp = Table[0, {Length@hdls}];
For[i = 1, i <= Length@iddat, i++,
For[j = 1, j <= Length@hdls, j++,
If[iddat[[i, 2]] == hdls[[j]],
tmp = ReplacePart[tmp, j -> iddat[[i, 3]]]]]];
{id}~Join~tmp
];

(* function หลักสำหรับอ่านไฟล์ข้อมูล และแสดงผล*)

mtr[filename_] := Module[{dat, outls, hdrls, idls},
dat = Import[filename, {“Data”, 1}];
hdrls = headerls[dat];
idls = idlist[dat];

outls = makerow[#, dat] & /@ idls;
{{“label”}~Join~hdrls}~Join~outls
];

 

(* เขียนผลลัพท์เป็น Excel *)

Export[“outfile.xlsx”,mtr[“data.xlsx”],”XLSX”]