Tìm hiểu về Power Query / M Language (Part 3): Định nghĩa hàm tính
Nếu bạn đã đọc qua phần 2 trong chỗi bài viết tìm hiểu Power Query M, bạn có thể sẽ hiểu rõ về các biểu thức tạo ra giá trị: Một câu lệnh đơn giản là một biểu thức tạo ra giá trị. let cũng là một biểu thức tạo ra một giá trị.
Series:
Đến với bài viết này bạn sẽ tìm hiểu về định nghĩa một hàm tính là một biểu thức cuối cùng tạo ra giá trị. Không giống với các biểu thức mà tôi đã đề cập đến trong phần 2 của loạt bài này thì một hàm tính chỉ tạo ra giá trị khí được gọi (tham chiếu vào trong một biểu thức).
Thông thường, các tham số được truyền vào cho một hàm tính khi nó được gọi. Hàm có thể tham chiếu các tham số đầu vào này khi nó tính toán và trả về kết quả.
Định nghĩa hàm
Định nghĩa một hàm bắt đầu bằng các tham số được đặt bên trong một cặp dấu ngoặc đơn (), theo sau là dấu =>, theo sau là biểu thức hàm (gọi tắt là thân hàm). Biểu thức này xác định cách tính giá trị được trả về khi hàm được gọi. Bất kỳ tham số nào được xác định cho hàm đều trở thành các biến bên trong biểu thức này mà nó có thể sử dụng khi tính toán giá trị trả về.
// Ví dụ: Hàm dưới đây chấp nhận hai đối số và nhân chúng với nhau.
(x, y) => x * y
Vì phần thân của hàm là một biểu thức tạo ra giá trị và biểu thức let là một biểu thức tạo ra giá trị, nên let có thể được sử dụng để xác định phần thân của hàm.
/* Ví dụ: Hàm dưới đây chấp nhận ba đối số và thực thi trong phần biểu thức let */
(a, b, x) =>
let
Result = x * (a + b)
in
Result
Về mặt kỹ thuật các hàm có thể được định nghĩa mà không cần tham số. Điều này hiếm khi được thực hiện trong thực tế.
() => "Xin chào, dataMAKER!"
Vậy định nghĩa hàm dùng ở đâu ?
Lồng nhau
Cũng giống như các biểu thức khác, các hàm có thể được lồng bên trong các biểu thức khác và các biểu thức khác có thể được lồng vào bên trong các hàm. Điều này cũng có nghĩa là các hàm có thể được lồng vào bên trong các hàm, vì các hàm là các biểu thức.
Ví dụ ở trên, chúng ta thấy một hàm được định nghĩa bên trong một biểu thức let. Dưới đây, là một hàm được gọi lại chính nó bên trong cùng một biểu thức let.
Hàm độc lập ( stand-alone functions )
Ngược lại với một hàm lồng nhau, một hàm đứng độc lập có thể được tham chiếu từ các biểu thức khác (bao gồm cả các hàm khác) nhưng không được xác định bên trong một biểu thức khác.
Để tạo một hàm độc lập trong Power Query Editor:
- Tạo một truy vấn mới.
- Mở hộp thoại Advanced Editor.
- Thay thế nội dung có ở đó bằng biểu thức hàm, có thể bắt đầu bằng danh sách các tham số được đặt trong dấu ngoặc đơn.
- Sau khi hoàn tất chọn Done thoát khỏi hộp thoại Advanced Editor, đổi tên hàm để dễ dàng sử dụng.
Bây giờ, có thể tham chiếu hàm này theo tên vừa đặt vào một hàm hoặc biểu thức cần dùng.
Lưu ý: danh sách Queries hiển thị hàm với biểu tượng ( fx ) hàm bên cạnh. Trình chỉnh sửa truy vấn sẽ phân biệt đó là một hàm tính hay là một bảng truy vấn và đã cập nhật biểu tượng một cách thích hợp.
Tham số tùy chọn
Theo mặc định, một giá trị phải được cung cấp cho mỗi tham số khi hàm được gọi. Nếu bạn muốn một số đối số là tùy chọn, chỉ cần đơn giản là thêm optional trước đối số khi khai báo danh sách tham số của hàm.
(LastName, FirstName, optional MiddleName) =>
Text.Combine({ FirstName, MiddleName, LastName}, " ")
Việc gọi hàm ở ví dụ trên chỉ định ít nhất hai đối số (bắt buộc) và tùy chọn đối số thứ ba. Cả hai cách sau đều là những cách hợp lệ để gọi hàm này (giả sử tên hàm là fxStringify):
fxStringify("Data", "MAKER")
fxStringify("Data", "MAKER", "VN")
Các đối số tùy chọn phải được khai báo sau các đối số không tùy chọn (có thể hiểu là bắt buộc). Nói cách khác, khi bạn xác định một tham số tùy chọn, bất kỳ tham số nào được xác định ở bên phải của tham số đó cũng phải được đánh dấu là tùy chọn. Nói cách khác, không thể theo sau một tham số tùy chọn bằng các tham số không tùy chọn (bắt buộc).
Nhầm lẫn trên giao diện (trình biện dịch) Power Query Editor
Chọn hàm ở ví dụ trên trong cửa sổ Power Query Editor và ‘oh uh’ thật khó hiểu, giao diện truy vấn hiển thị cả ba đối số là tùy chọn, mặc dù chỉ có một đối số là tùy chọn.
Power Query Editor sử dụng một định nghĩa khác về đối số optional so với định nghĩa được sử dụng bởi ngôn ngữ Power Query M. Đối với Power Query Editor, optional có nghĩa là tham số là optional hoặc là bắt buộc nhưng có thể là giá trị rỗng (null).
Làm thế nào để Power Query Editor xử lý các đối số mà nó cho là đối số optional nếu khi chúng ta truyền tham số cho hàm và bỏ qua chúng?
Trong Power Query Editor, để trống cả ba trường (input field) và nhấp vào nút invoke. Biểu thức được tạo sẽ có hai đối số “yêu cầu” được đặt thành null. Đối với những đối số này, Power Query Editor đã cung cấp trường để nhập giá trị. Chúng ta đã bỏ trống, vì vậy Power Query Editor sẽ cung cấp các giá trị mặc định.
Kiểu dữ liệu
Trong phần thông tin mô tả về hàm ví dụ dưới đây, chúng ta thấy các kiểu dữ liệu của tham số và kiểu dữ liệu trả về của hàm. Theo mặc định, tất cả tham số đều là kiểu bất kỳ ‘any’ .
Chúng ta có thể khai báo cụ thể hơn về các kiểu dữ liệu khi khai báo các tham số cho một hàm và kiểu dữ liệu trả về của hàm.
/* Ví dụ hàm dưới đây được chỉ định kiểu dữ liệu cho các tham số của nó (cả hai đều là số) và giá trị trả về (văn bản): */
(UnitPrice as number, Quantity as number) as text =>
"Total Cost: " & Number.ToText(UnitPrice * Quantity)
Việc yêu cầu phải khai báo kiểu dữ liệu không nhất thiết phải là khai báo cho tất cả, chúng ta có thể chỉ định kiểu dữ liệu cho một số đối số nhưng đối số khác có thể khai báo hoặc không. Việc chỉ định kiểu dữ liệu tham số hay không không ảnh hưởng đến việc chỉ định kiểu dữ liệu trả về. Ok dataMAKER sẽ nói nhiều hơn về các kiểu dữ liệu trong một bài viết sau.
Quay lại giao diện Power Query Editor
Không phải tất cả các kiểu dữ liệu đều cho phép null. Khi một tham số được chỉ định là loại không thể null, Power Query Editor không thể mặc định nó thành null và do đó sẽ không hiển thị (optional) trừ khi tham số được xác định là optional khi khai báo trong hàm.
Một lần nữa, để xác định xem một tham số có yêu cầu hay không, hãy bỏ qua phần nhập tham số và nhấn nút invoke để kiểm tra.
Sơ lược lại với bài viết này, chúng ta hiểu cách để khai báo hàm và tham số cho hàm, các vấn đề cần lưu ý với Power Query Editor biên dịch khi chọn hàm. Tuy nhiên trong bài viết có sử dụng các kiểu dữ liệu, chúng tôi sẽ sớm đề cập đến trong các bài viết tiếp theo của series.