Nhân tiện có bài điền số từ 1 đến 10 triệu, mặc dù m code có thể xử lý table 1E7 dòng nhưng không ghi ra sheet được, vì vậy em sẽ tạo bảng 1E6 dòng x 10 cột. Do chỉ có 10 cột nên có thể dễ dàng tạo bảng bằng Table.FromColumns nhưng ở đây em sử dụng List.Accumulate để minh họa tương tự vòng lặp For:
Giải thích:
- Lệnh 1 tạo table Source từ list {1..1000000} có 1 column là ABC.
- Lệnh List.Accumulate có cấu trúc:
Lệnh này sẽ thực hiện n lần (n là số phần tử của tham số list); seed là tham số khởi tạo ban đầu; accumulator là 1 function nhận 2 tham số thường đặt tên là state và current, ta có thể lấy tên khác cũng được. Bắt đầu vòng lặp, state = seed, current = list{0}. Qua mỗi lần lặp, kết quả của accumulator sẽ được gán cho state, current nhận giá trị kế tiếp trong list, kết quả cuối cùng chính là kết quả của accumulator lần cuối. Ví dụ lệnh sau = List.Accumulate({"B","C","D"}, "A", (state,current)=> state & current) sẽ ra kết quả ABCD.
Như vậy sau khi đã có table Source rồi ta gán seed=Source và lặp 9 lần, mỗi vòng lặp ta sẽ Add column = 1E6 + cột cuối của bảng trước. Lệnh Table.ColumnNames trả về list các column theo thứ tự, Table.ColumnNames(state){current-1} trả về cột có thứ tự current-1, ở vòng lặp đầu tiên thì state có 1 cột, current=1 nên Table.ColumnNames(state){current-1} sẽ trả về cột duy nhất của bảng Source do phần tử list bắt đầu đánh số từ 0.
Mã:
let
Source = Table.FromList({1..1000000},Splitter.SplitByNothing(),{"ABC"}),
Loop = List.Accumulate({1..9}, Source, (state,current) => Table.AddColumn(state, "NewCol" & Number.ToText(current), each Record.Field(_, Table.ColumnNames(state){current-1})+1000000))
in
Loop
- Lệnh 1 tạo table Source từ list {1..1000000} có 1 column là ABC.
- Lệnh List.Accumulate có cấu trúc:
Mã:
List.Accumulate(list as list, seed as any, accumulator as function) as any
Như vậy sau khi đã có table Source rồi ta gán seed=Source và lặp 9 lần, mỗi vòng lặp ta sẽ Add column = 1E6 + cột cuối của bảng trước. Lệnh Table.ColumnNames trả về list các column theo thứ tự, Table.ColumnNames(state){current-1} trả về cột có thứ tự current-1, ở vòng lặp đầu tiên thì state có 1 cột, current=1 nên Table.ColumnNames(state){current-1} sẽ trả về cột duy nhất của bảng Source do phần tử list bắt đầu đánh số từ 0.
File đính kèm
Lần chỉnh sửa cuối: