Chia sẻ qua


Giới hạn truy vấn: Phân quyền và giới hạn truy vấn

Hiểu về sự ủy quyền

Power Apps hoạt động tốt nhất với nguồn dữ liệu phụ trợ khi một Power Fx truy vấn được dịch đầy đủ thành truy vấn tương đương chạy trên nguồn dữ liệu. Power Apps gửi một truy vấn mà nguồn dữ liệu hiểu được, nguồn dữ liệu chạy truy vấn và Power Apps lấy kết quả. Ví dụ, nguồn dữ liệu sẽ lọc dữ liệu và chỉ trả về những hàng đáp ứng tiêu chí lọc. Khi điều này hoạt động, truy vấn sẽ được ủy quyền cho nguồn dữ liệu.

Nhưng các truy vấn không phải lúc nào cũng có thể chuyển thành các truy vấn tương đương trên mọi nguồn dữ liệu. Power Fx Ví dụ, Dataverse hỗ trợ nhiều tính năng truy vấn hơn Excel. Dataverse hỗ trợ toán tử truy vấn 'in' (thành viên), nhưng Excel thì không. Một truy vấn không thể ủy quyền nếu nó sử dụng một tính năng mà nguồn dữ liệu không hỗ trợ. Nếu bất kỳ phần nào của biểu thức truy vấn không thể ủy quyền, Power Apps sẽ không ủy quyền bất kỳ phần nào của truy vấn.

Khi truy vấn không thể ủy quyền, Power Apps sẽ lấy 500 bản ghi đầu tiên từ nguồn dữ liệu, sau đó chạy các hành động trong truy vấn. Bạn có thể tăng giới hạn này lên 2.000 bản ghi. Thay đổi giới hạnPower Apps giới hạn kích thước kết quả ở mức 500 bản ghi để ứng dụng của bạn hoạt động tốt. Bộ kết quả lớn hơn có thể gây ra sự cố về hiệu suất cho ứng dụng của bạn và Power Apps.

Nhưng hạn chế này có thể là một vấn đề vì truy vấn có thể trả về kết quả không chính xác nếu nguồn dữ liệu có nhiều hơn 500 hoặc 2.000 bản ghi. Ví dụ, nếu nguồn dữ liệu của bạn có 10 triệu bản ghi và truy vấn của bạn cần xử lý phần cuối của dữ liệu, như tên họ bắt đầu bằng 'Z', và truy vấn của bạn sử dụng toán tử không thể ủy quyền như distinct, bạn chỉ nhận được 500 hoặc 2.000 bản ghi đầu tiên. Điều này có nghĩa là bạn nhận được kết quả không chính xác.

Tạo truy vấn của bạn bằng cách sử dụng các bảng có thể ủy quyền cho nguồn dữ liệu của bạn. Power Fx Chỉ sử dụng các hàm truy vấn có thể được ủy quyền. Đây là cách duy nhất để ứng dụng của bạn hoạt động tốt và đảm bảo người dùng có thể nhận được mọi thông tin họ cần.

Chú ý đến các cảnh báo về việc phân quyền cho biết trường hợp nào không thể phân quyền. Nếu bạn làm việc với các tập dữ liệu nhỏ (ít hơn 500 bản ghi), bạn có thể sử dụng bất kỳ nguồn dữ liệu và công thức nào vì ứng dụng sẽ xử lý dữ liệu cục bộ nếu công thức không thể được ủy quyền.

Lưu ý

Cảnh báo ủy quyền giúp bạn quản lý ứng dụng để trả về kết quả chính xác. Nếu dữ liệu trong nguồn dữ liệu của bạn vượt quá 500 bản ghi và không thể phân quyền cho một hàm, Power Fx hãy đánh dấu công thức bằng gạch chân màu xanh.

Nguồn dữ liệu có thể ủy thác

Việc ủy quyền chỉ có tác dụng với một số nguồn dữ liệu dạng bảng nhất định. Nếu nguồn dữ liệu hỗ trợ phân quyền, tài liệu kết nối của nguồn dữ liệu đó sẽ giải thích về hỗ trợ đó. Ví dụ, các nguồn dữ liệu bảng phổ biến này hỗ trợ việc phân quyền:

Các sổ làm việc Excel đã nhập (sử dụng nguồn dữ liệu Thêm dữ liệu tĩnh vào ứng dụng của bạn ), các bộ sưu tập và bảng được lưu trữ trong các biến ngữ cảnh không cần phải phân quyền. Tất cả dữ liệu này đã có trong bộ nhớ, do đó bạn có thể sử dụng ngôn ngữ đầy đủ. Power Apps

Các hàm có thể đại diện

Chỉ sử dụng những công thức có thể chuyển nhượng được. Bài viết này liệt kê các thành phần công thức có thể được ủy quyền. Mỗi nguồn dữ liệu đều khác nhau và không phải tất cả đều hỗ trợ tất cả các yếu tố này. Kiểm tra cảnh báo về việc ủy quyền trong công thức của bạn.

Hàm lọc

Bộ lọc, Tìm kiếm, Đầu tiênTra cứu có thể được ủy quyền.

Trong các hàm LọcTìm kiếm , hãy sử dụng các hàm này với các cột của bảng để chọn các bản ghi thích hợp:

  • (bao gồm &&), Hoặc (bao gồm ||), Không (bao gồm !)
  • Trong> [!LƯU Ý]

    In chỉ được phân bổ cho các cột trên nguồn dữ liệu cơ sở. Ví dụ, nếu nguồn dữ liệu là bảng Tài khoản , Filter(Accounts, Name in ["name1", "name2"]) sẽ chuyển giao cho nguồn dữ liệu để đánh giá. Nhưng Filter(Accounts, PrimaryContact.Fullname in ["name1", "name2"]) không được ủy quyền vì cột Họ và tên nằm trên một bảng khác (Liên hệ chính) so với Tài khoản. Biểu thức được đánh giá cục bộ.

  • =, <>, >=, <=, >, <
  • +, -
  • Cắt tỉa
  • Trống
  • Bắt đầu bằng, Kết thúc bằng
  • Các giá trị hằng số giống nhau trên tất cả các bản ghi, chẳng hạn như thuộc tính điều khiển và biến toàn cục và biến ngữ cảnh.

Bạn cũng có thể sử dụng các phần của công thức để đánh giá thành giá trị hằng số cho tất cả các bản ghi. Ví dụ: Left( Language(), 2 ), Date( 2019, 3, 31 )Today() không phụ thuộc vào bất kỳ cột nào của bản ghi, vì vậy chúng trả về cùng một giá trị cho tất cả các bản ghi. Các giá trị này được gửi đến nguồn dữ liệu dưới dạng hằng số và không chặn việc phân quyền.

Danh sách trước không bao gồm những mục đáng chú ý này.

Ủy quyền và thu thập

Khi bạn sử dụng With, UpdateContext hoặc Set, chúng sẽ tự động tạo các bộ sưu tập. Bộ sưu tập là danh sách bản ghi tĩnh trong bộ nhớ và không tham gia vào quá trình phân quyền. Bạn không thấy cảnh báo về ủy quyền.

Giới hạn truy vấn

Tra cứu và mở rộng cấp độ

Power Apps cho phép bạn sử dụng tối đa hai cấp độ tra cứu. Biểu thức truy vấn có thể bao gồm tối đa hai hàm tra cứu để duy trì hiệu suất. Power Fx Khi biểu thức truy vấn bao gồm tra cứu, Power Apps trước tiên sẽ truy vấn bảng cơ sở, sau đó chạy truy vấn thứ hai để mở rộng bảng đầu tiên có thông tin tra cứu. Một cấp độ bổ sung vượt quá mức này được hỗ trợ là cấp độ tối đa. Nhưng đối với các tình huống ngoại tuyến, chỉ có một cấp độ mở rộng tra cứu được hỗ trợ.

Mở rộng hoặc liên kết tối đa 20 thực thể trong một truy vấn duy nhất. Nếu bạn cần liên kết hơn 20 bảng trong một truy vấn, hãy thử tạo chế độ xem trên máy chủ dữ liệu nếu có thể.

Đánh giá biểu thức - thuộc tính của thực thể phải nằm ở phía bên trái 'LHS' của toán tử bằng

Đặt tính chất của thực thể cần so sánh vào vế trái (LHS) của phương trình. Ví dụ, trong biểu thức sau, thuộc tính thực thể 'ID đơn vị kinh doanh'.Name nằm ở bên trái và biểu thức hoạt động:

Filter(
        Budgets,
        'Business unit ID'.Name = LookUp(
            Users,
            'Primary Email' = User().Email,
            'Business Unit'
        ).Name,
        DataCardValue37.Selected.'Date Range String'='Date Range String'
    )

Nhưng biểu thức này không hiệu quả:

 Filter(
        Budgets,
        LookUp(
            Users,
            'Primary Email' = User().Email,
            'Business Unit'
        ).Name = 'Business unit ID'.Name,
        'Date Range String'=DataCardValue37.Selected.'Date Range String'
    )

Các hàm sắp xếp

SortSortByColumns có thể được ủy quyền.

Trong Sắp xếp, công thức chỉ có thể là tên của một cột duy nhất và không bao gồm các toán tử hoặc hàm khác.

Hàm tổng hợp

Một số chức năng tổng hợp có thể được phân quyền dựa trên hỗ trợ phía sau. Các hàm như Tổng, Trung bình, Tối thiểuTối đa có thể được chuyển giao. Các hàm đếm như CountRowsCount cũng có thể được chuyển giao. Nhưng RemoveIfUpdateIf có những hạn chế về việc ủy quyền. Chỉ có một số lượng hạn chế các nguồn dữ liệu hỗ trợ việc phân quyền cho các chức năng này. Để biết thêm thông tin, hãy xem Danh sách ủy quyền.

Chức năng không thể ủy quyền

Không thể ủy quyền tất cả các chức năng khác, bao gồm các chức năng đáng chú ý sau:

Giới hạn không thể chuyển nhượng

Các công thức không thể ủy quyền sẽ được xử lý cục bộ. Xử lý cục bộ cho phép bạn sử dụng ngôn ngữ công thức đầy đủ. Power Apps Nhưng có một sự đánh đổi: trước tiên, tất cả dữ liệu phải được đưa đến thiết bị, điều này có nghĩa là phải truy xuất một lượng lớn dữ liệu qua mạng. Quá trình này có thể mất thời gian và khiến ứng dụng của bạn có vẻ chậm hoặc không phản hồi.

Để tránh điều này, Power Apps theo mặc định, giới hạn lượng dữ liệu có thể xử lý cục bộ ở mức 500 bản ghi. Giới hạn này cho phép bạn sử dụng toàn bộ các tập dữ liệu nhỏ và tinh chỉnh việc sử dụng các tập dữ liệu lớn bằng cách xem kết quả một phần.

Hãy cẩn thận khi sử dụng tính năng này vì nó có thể gây nhầm lẫn cho người dùng. Ví dụ, nếu bạn sử dụng hàm Lọc với công thức lựa chọn không thể phân quyền cho nguồn dữ liệu có một triệu bản ghi, thì chỉ 500 bản ghi đầu tiên được quét. Nếu bản ghi bạn muốn là bản ghi 501 hoặc 500.001, Bộ lọc sẽ không xem xét hoặc trả về bản ghi đó.

Các hàm tổng hợp cũng có thể gây nhầm lẫn. Ví dụ, nếu bạn sử dụng Average trên một cột trong cùng nguồn dữ liệu một triệu bản ghi đó, Average không thể được ủy quyền vì biểu thức không được ủy quyền (xem ghi chú trước đó). Chỉ có 500 bản ghi đầu tiên được tính trung bình. Nếu bạn không cẩn thận, người dùng có thể nghĩ rằng câu trả lời chỉ là một phần.

Thay đổi giới hạn

Số lượng bản ghi mặc định là 500, nhưng bạn có thể thay đổi số lượng này cho toàn bộ ứng dụng:

  1. Chọn Thiết đặt.
  2. Trong Chung, hãy thay đổi cài đặt Giới hạn hàng dữ liệu từ 1 thành 2.000.

Trong một số trường hợp, 2.000 (hoặc 1.000 hoặc 1.500) bản ghi là đủ cho tình huống của bạn. Bạn có thể tăng số lượng này cho phù hợp với nhu cầu của mình, nhưng khi làm vậy, hiệu suất của ứng dụng có thể giảm, đặc biệt là đối với các bảng rộng có nhiều cột. Tốt nhất vẫn là nên phân công càng nhiều càng tốt.

Để đảm bảo ứng dụng của bạn có thể mở rộng trên các tập dữ liệu lớn, hãy đặt giá trị này thành 1. Bất kỳ thứ gì không thể được ủy quyền đều trả về một bản ghi duy nhất, điều này rất dễ phát hiện khi thử nghiệm ứng dụng của bạn. Điều này giúp bạn tránh được những bất ngờ khi chuyển ứng dụng thử nghiệm sang giai đoạn sản xuất.

Thông báo đại diện

Power Apps hiển thị cảnh báo (hình tam giác màu vàng) khi bạn tạo công thức không thể ủy quyền. Điều này giúp bạn dễ dàng biết được nhiệm vụ nào được và nhiệm vụ nào không được giao.

Cảnh báo ủy quyền chỉ hiển thị trên các công thức sử dụng nguồn dữ liệu có thể ủy quyền. Nếu bạn không thấy cảnh báo nhưng nghĩ rằng công thức của mình không được ủy quyền, hãy kiểm tra loại nguồn dữ liệu của bạn với danh sách nguồn dữ liệu có thể ủy quyền ở đầu bài viết này.

Ví dụ

Trong ví dụ này, bạn sẽ tự động tạo một ứng dụng ba màn hình dựa trên bảng SQL Server có tên [dbo].[Fruit]. Để tìm hiểu cách tạo ứng dụng, hãy áp dụng các nguyên tắc tương tự từ bài viết về Dataverse cho SQL Server.

Ứng dụng ba màn hình.

Thuộc tính Mục của thư viện sử dụng công thức với các hàm SortByColumnsTìm kiếm , cả hai đều có thể được ủy quyền.

Trong hộp tìm kiếm, nhập "Apple".

Các dấu chấm tròn sẽ xuất hiện thoáng qua gần đầu màn hình khi ứng dụng giao tiếp với SQL Server để xử lý yêu cầu tìm kiếm. Tất cả các bản ghi khớp với tiêu chí tìm kiếm đều xuất hiện, ngay cả khi nguồn dữ liệu có hàng triệu bản ghi.

Tìm kiếm tùy chọn điều khiển nhập văn bản.

Kết quả tìm kiếm bao gồm "Táo""Dứa" vì chức năng Tìm kiếm tìm kiếm khắp mọi nơi trong cột văn bản. Để chỉ tìm những bản ghi có chứa thuật ngữ tìm kiếm ở đầu tên loại trái cây, hãy sử dụng một hàm có thể ủy nhiệm khác, Lọc, với thuật ngữ tìm kiếm cụ thể hơn. Để đơn giản, hãy xóa lệnh gọi SortByColumns .

Xóa lệnh gọi SortByColumns.

Kết quả mới bao gồm "Táo" nhưng không bao gồm "Dứa". Một hình tam giác màu vàng sẽ xuất hiện bên cạnh thư viện ảnh và trong hình thu nhỏ trên màn hình nếu thanh điều hướng bên trái hiển thị hình thu nhỏ. Một đường màu xanh lượn sóng xuất hiện bên dưới một phần của công thức. Mỗi yếu tố này đều biểu thị một lời cảnh báo. Khi bạn di chuột qua hình tam giác màu vàng bên cạnh thư viện, thông báo này sẽ xuất hiện:

Di chuột qua cảnh báo đại diện.

SQL Server là nguồn dữ liệu có thể ủy quyền và Bộ lọc là hàm có thể ủy quyền. Tuy nhiên, MidLen không thể được chuyển giao cho bất kỳ nguồn dữ liệu nào.

Nhưng nó có hiệu quả, phải không? Cũng được. Đó là lý do tại sao đây là lời cảnh báo chứ không phải là nét ngoằn ngoèo màu đỏ.

  • Nếu bảng có ít hơn 500 bản ghi, công thức này sẽ hoạt động hoàn hảo. Tất cả các bản ghi được đưa đến thiết bị và Bộ lọc được áp dụng cục bộ.
  • Nếu bảng có hơn 500 bản ghi, công thức sẽ không trả về bản ghi 501 hoặc cao hơn, ngay cả khi nó khớp với tiêu chí.

Xem thêm