Delegation trong Power Apps – Tài liệu tham khảo

Ngày đăng: 10/09/2025

Mục tiêu

  • Hiểu rõ khái niệm Delegation và vai trò của nó trong Power Apps.
  • Nắm được sự khác biệt giữa xử lý dữ liệu ở serverxử lý ở client.
  • Nhận biết được các giới hạn về số bản ghi khi công thức không delegable.
  • Biết được các hàm, thao tác thường delegable không delegable (tùy nguồn dữ liệu).

Khái niệm

  • Power Apps hoạt động hiệu quả nhất khi nguồn dữ liệu back-end có thể xử lý trực tiếp truy vấn Power Fx. Điều này có nghĩa là công thức Power Fx được dịch hoàn toàn sang một truy vấn tương đương và được thực thi trên chính nguồn dữ liệu.
  • Quy trình:
  • Power Apps gửi truy vấn mà nguồn dữ liệu có thể hiểu.
  • Nguồn dữ liệu thực thi truy vấn đó.
  • Power Apps chỉ nhận về kết quả (ví dụ: dữ liệu đã được lọc sẵn).
  • Trường hợp này gọi là ủy quyền (delegation).

Vấn đề

  • Tuy nhiên, không phải lúc nào Power Fx cũng có thể dịch sang truy vấn tương đương trên mọi nguồn dữ liệu.
  • Khi một truy vấn sử dụng tính năng mà nguồn dữ liệu không hỗ trợ, truy vấn đó trở thành không delegable.

Khi truy vấn không delegable:

Power Apps chỉ lấy về 500 bản ghi đầu tiên từ nguồn dữ liệu, sau đó thực hiện các hành động còn lại ở phía client. Có thể tăng giới hạn này lên 2000 bản ghi trong phần thiết lập của ứng dụng.

Giới hạn mặc định (500) được đặt để giữ cho ứng dụng hoạt động mượt mà. Nếu kết quả trả về quá lớn, ứng dụng có thể gặp vấn đề về hiệu năng.

Vấn đề phát sinh:

Nếu dữ liệu thực tế lớn hơn 500 hoặc 2000 bản ghi, kết quả truy vấn có thể không chính xác.

Ví dụ: Nguồn dữ liệu có 10 triệu bản ghi, bạn cần tìm những bản ghi ở cuối (ví dụ tên bắt đầu bằng “Z”) và bạn sử dụng một toán tử không delegable như Distinct. Kết quả trả về sẽ chỉ dựa trên 500/2000 bản ghi đầu tiên → không đúng với dữ liệu thực tế.

⚠️ Lưu ý:

  • Nếu một phần biểu thức truy vấn là không delegable → toàn bộ truy vấn đó sẽ không được ủy quyền (không delegable)
  • Luôn để ý đến cảnh báo delegation xuất hiện trong Power Apps Studio, cho biết phần nào của công thức không thể delegable.
  • Nếu bạn chỉ làm việc với tập dữ liệu nhỏ (dưới 500 bản ghi), thì có thể dùng bất kỳ nguồn dữ liệu hay công thức nào, vì trong trường hợp này ứng dụng xử lý dữ liệu ngay trên client và vẫn đảm bảo kết quả đúng.

Cảnh báo: “Delegation warning. The “Left” part of this formula might not work correctly on large data sets.”

Hướng dẫn xử lý

Các hàm Power Apps hỗ trợ delegation đầy đủ trên SharePoint.

Khi sử dụng các hàm sau để truy xuất dữ liệu từ Sharepoint, kết quả đầy đủ sẽ được trả về:

  • Filter
  • Lookup
  • Sort
  • SortByColumns
  • StartsWith
  • And, Or
  • Các toán tử so sánh: =, <, <=, >, >=, <>

⚠️ Lưu ý:

  • Hàm Sort và SortByColumns không hỗ trợ delegation đối với các cột phức tạp như Choice, Lookup, Person,…
  • Toán tử Not không hỗ trợ delegation
  • Cột ID trong Sharepoint chỉ hỗ trợ toán tử =, không hỗ trợ <, <=, <>, >, >=

Các hàm Power Apps không hỗ trợ delegation trên SharePoint

Khi sử dụng các hàm sau, PowerApps chỉ trả về 500 bản ghi đầu tiên từ Sharepoint (hoặc tối đa 2000 bản ghi nếu bạn thay đổi cài đặt):

Hàm tạo/ biến đổi cột trong Collection:

  • AddColumns()
  • ClearCollect()
  • Collect()
  • DropColumn()
  • RenameColumns()
  • ShowColumns()

Hàm tìm kiếm, kiểm tra chuỗi:

  • Search()
  • IsBlank()

Hàm xử lý tập hợp, tính toán nâng cao:

  • Distinct()
  • Sum()
  • Average()
  • Min/ Max()
  • CountRow()

Để tăng giới hạn này lên 2000, có thể thay đổi giới hạn dòng dữ liệu trong menu cài đặt của PowerApps

Bước 1: Chọn ‘Setting’

A screenshot of a computerAI-generated content may be incorrect.

Bước 2: Tại tab ‘General’ > ‘Data’: Thay đổi số lượng thành 2000

A screenshot of a computerAI-generated content may be incorrect.

Giải pháp thay thế cho các hàm không delegable

Hàm IsBlank()

Hàm IsBlank() không hỗ trợ Delegation trong Sharepoint

Filter('SharePoint List', IsBlank(Title))

Thay thế sử dụng hàm Blank() có hỗ trợ delegation để có kết quả tương tự

Filter('SharePoint List', Title=Blank())

Search Function

Search function không hỗ trợ delegation trong Sharepoint

Search('SharePoint List', "Cat", "Title")

Sử dụng hàm StartsWith() để thay thế

Filter('SharePoint List', StartsWith(Title, "Cat"))

⚠️ Lưu ý:

– Luôn kiểm tra cảnh báo delegtion khi viết công thức.

– Ưu tiên thiết kế ứng dụng dự trên dữ liệu có thể xử lý trực tiếp từ Server.

– Nếu buộc phải xử lý client, hãy hiểu rõ giới hạn 2000 bản ghi để tránh sai lệnh kết quả.

Tạo collection từ nguồn dữ liệu hơn 2000 dòng

Hàm ClearCollect hỗ trợ lấy tối đa 2000 bản ghi từ nguồn dữ liệu

ClearCollect(colCollectionName, 'SharePoint List')

Vậy làm sao để tạo Collection chứa nhiều hơn 2000 bản ghi từ nguồn dữ liệu, ví dụ 4.000 bản ghi?

Ý tưởng giải pháp:

  • Chia dữ liệu thành 2 collection tạm thời
  • colTemp1: lấy các bản ghi trong nguồn Sharepoint theo thứ tự giảm dần của ID
  • colTemp2: lấy các bản ghi trong nguồn Sharepoint theo thứ tự tăng dần của ID
  • Gộp 2 collection tạm colTemp1 và colTemp2 thành 1 collection chính và loại bỏ các bản ghi trùng nhau.
// Bước 1: Tạo 2 collection tạm

Concurrent(

ClearCollect( colTemp1,

Sort('SharePoint List', ID, Ascending)

),

ClearCollect(colTemp2,

Sort('SharePoint List', ID, Descending)

)

);

// Bước 2: Gộp 2 collection tạm vào collection chính, loại bỏ trùng lặp

ClearCollect(

colYourCollectionName,

colTemp1,

Filter(colTemp2, Not(ID in colChunk1.ID))

);

// Bước 3: Dọn dẹp collection tạm

Clear(colTemp1);

Clear(colTemp2);
  • Kết quả: Collection cuối cùng có thể chứa tối đa 4000 bản ghi

Giải thích:

Concurrent → thực hiện cùng lúc 2 lệnh ClearCollect để tiết kiệm thời gian.

Sort Ascending / Descending → đảm bảo chúng ta lấy đủ dữ liệu từ đầu và cuối danh sách.

Filter(colTemp2, Not(ID in colTemp1.ID)) → loại bỏ các bản ghi đã có trong colTemp1 để tránh trùng lặp.

Clear(colTemp1) / Clear(colTemp2) → dọn dẹp bộ nhớ, chỉ giữ collection chính.

⚠️ Lưu ý:

  • Đây là “mẹo” để lấy nhiều hơn giới hạn 2.000 bản ghi khi làm việc với SharePoint.
  • Vẫn phải chú ý: nếu danh sách SharePoint quá lớn (>4.000 item) → kết quả sẽ không đầy đủ.
  • Khi cần dữ liệu cực lớn, nên dùng Power Automate hoặc chia nhỏ dữ liệu / phân trang.

Chỉ mục cột (Column Indexing) khi SharePoint list có trên 5.000 item.

Vấn đề:

  • SharePoint cho phép lưu rất nhiều item (lên tới hàng triệu).
  • Tuy nhiên, khi số lượng item trong list vượt quá 5.000, SharePoint sẽ áp dụng một giới hạn gọi là List View Threshold.
  • Khi đó, nếu dùng Power Apps với hàm Filter hoặc LookUp, ứng dụng sẽ chỉ xử lý được 5.000 item đầu tiên, các item sau sẽ bị bỏ qua.

Nghĩa là: kết quả lọc/tìm kiếm có thể không chính xác vì không lấy đủ dữ liệu.

Nguyên nhân:

  • SharePoint muốn bảo vệ hiệu năng server.
  • Nếu một truy vấn phải duyệt toàn bộ list hàng chục nghìn bản ghi, nó sẽ gây tải rất lớn.
  • Vì vậy, mặc định SharePoint chặn các thao tác lọc/sort khi vượt quá 5.000 item nếu không có chỉ mục.

Giải pháp: Bật Column Indexing

  • Để xử lý tập dữ liệu lớn (trên 5.000 item), cần tạo chỉ mục cho cột (Index) mà dùng để lọc hoặc tìm kiếm.
  • Khi có chỉ mục, SharePoint sẽ chỉ duyệt trên cột được index thay vì quét toàn bộ list → giúp trả kết quả nhanh và đầy đủ.

Ví dụ: Nếu thường xuyên lọc theo Department, hãy tạo index cho cột Department.

Bước 1:

Truy cập Sharepoint List > Click biểu tượng ‘Setting’ > ‘List Settings

A screenshot of a computerAI-generated content may be incorrect.

Bước 2:

Click ‘Indexed Columns’

A screenshot of a computerAI-generated content may be incorrect.

Bước 3:

Click ‘Create a new index’

A screenshot of a computerAI-generated content may be incorrect.

Bước 4:

Chọn cột cần đánh index tại ‘Primary column for this index’, ví dụ: Name

Có thể tạo tối đa 20 index cho 1 list

A screenshot of a computerAI-generated content may be incorrect.

Tài liệu tham khảo

Chia sẻ bài viết này

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

This site uses Akismet to reduce spam. Learn how your comment data is processed.