Giới hạn truy vấn: Giới hạn ủy quyền và truy vấn

Hiểu ủy quyền

Power Apps hoạt động hiệu quả nhất với nguồn dữ liệu phía sau khi truy vấn Power Fx có thể được dịch hoàn toàn thành truy vấn tương đương có thể chạy trên nguồn dữ liệu. Power Apps gửi truy vấn mà nguồn dữ liệu hiểu, truy vấn được thực hiện trên nguồn dữ liệu và kết quả truy vấn được trả về Power Apps. Ví dụ: nguồn dữ liệu có thể thực hiện công việc lọc dữ liệu trên nguồn dữ liệu và chỉ trả về các hàng đáp ứng tiêu chí lọc. Khi điều này hoạt động chính xác, chúng tôi nói rằng truy vấn được ủy quyền cho nguồn dữ liệu để thực hiện công việc của truy vấn.

Tuy nhiên, Power Fx không phải lúc nào các truy vấn cũng có thể được chuyển thành các truy vấn tương đương trên tất cả các nguồn dữ liệu. 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 'trong' (tư cách thành viên) và Excel thì không. Chúng tôi cho biết truy vấn không thể ủy quyền nếu truy vấn sử dụng tính năng mà nguồn dữ liệu không hỗ trợ. Nói chung, nếu bất kỳ phần nào của biểu thức truy vấn không thể ủy quyền thì chúng tôi sẽ không ủy quyền bất kỳ phần nào của truy vấn.

Khi một truy vấn không thể ủy quyền, Power Apps chỉ nhận được 500 bản ghi đầu tiên từ nguồn dữ liệu rồi thực hiện các hành động trong truy vấn. Giới hạn này có thể tăng lên tới 2.000 bản ghi Thay đổi giới hạn Power Apps giới hạn kích thước kết quả ở mức 500 bản ghi để duy trì hiệu suất tốt của Power Apps. Qua thử nghiệm, chúng tôi nhận thấy rằng các tập hợp kết quả lớn hơn các kích thước này sẽ gây ra các vấn đề về hiệu suất cho ứng dụng của bạn và Power Apps nói chung.

Tuy nhiên, giới hạn 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 dữ liệu trên nguồn dữ liệu vượt quá 500/2000 bản ghi. Ví dụ: hãy xem xét ví dụ trong đó 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 hoạt động trên phần cuối cùng của dữ liệu. (Ví dụ: các tên họ bắt đầu bằng 'Z') Tuy nhiên, truy vấn của bạn có một toán tử không thể ủy quyền trong đó (ví dụ: khác biệt.) Trong trường hợp này, bạn chỉ nhận được 500/2000 bản ghi đầu tiên và bạn đã sai kết quả.

Tạo các truy vấn Power Fx 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. Bạn chỉ nên sử dụng các hàm truy vấn có thể được ủy quyền. Đó là cách duy nhất để giữ cho ứng dụng của bạn hoạt động tốt và đảm bảo người dùng có thể truy cập tất cả thông tin họ cần.

Hãy chú ý đến các cảnh báo đại diện xác định những nơi không thể đại diện. Nếu 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 có thể xử lý dữ liệu cục bộ nếu không thể ủy quyền công thức đó.

Lưu ý

Cảnh báo đại diện giúp bạn quản lý ứng dụng để có 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à một hàm không thể được ủy quyền, Power Fx sẽ đánh dấu công thức bằng gạch chân màu xanh lam.

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

Tính năng đại diện chỉ được hỗ trợ cho một số nguồn dữ liệu dạng bảng. Nếu nguồn dữ liệu hỗ trợ tính năng đại diện, thì tài liệu về trình kết nối sẽ nêu rõ sự hỗ trợ đó. Ví dụ: các nguồn dữ liệu dạng bảng là phổ biến nhất và chúng hỗ trợ tính năng đại diện:

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), bộ sưu tập và bảng được lưu trữ trong các biến bối cảnh sẽ không yêu cầu đại diện. Toàn bộ dữ liệu này đã có trong bộ nhớ và có thể áp dụng ngôn ngữ Power Apps.

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

Bước tiếp theo là chỉ sử dụng những công thức có thể được đại diện. Tại đây bao gồm các thành phần công thức có thể được đại diện. Tuy nhiên, mỗi nguồn dữ liệu mỗi khác, và không phải tất cả chúng đều hỗ trợ tất cả những thành phần này. Hãy kiểm tra cảnh báo đại diện trong công thức cụ thể của bạn.

Hàm lọc

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

Trong các hàm Bộ lọcTra cứu, bạn có thể sử dụng các hàm này với các cột của bảng để chọn những bản ghi thích hợp:

  • And (bao gồm &&), Or (bao gồm ||), Not (bao gồm !)
  • In

    Lưu ý

    Trong chỉ được ủy quyền 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 thì Filter(Accounts, Name in ["name1", "name2"]) đại diện cho nguồn dữ liệu để đánh giá. Tuy nhiên, Filter(Accounts, PrimaryContact.Fullname in ["name1", "name2"]) không ủy quyền kể từ cột Họ và tên nằm trên một bảng khác (Người liên hệ chính) với Tài khoản. Biểu thức được đánh giá cục bộ.

  • =, <>, >=, <=, >, <
  • +, -
  • TrimEnds
  • IsBlank
  • StartsWith, EndsWith
  • Các giá trị không đổi giống nhau trên tất cả các bản ghi, chẳng hạn như thuộc tính kiểm soát và biến toàn cầu và bối cảnh.

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

Danh sách trước không bao gồm các mục đáng chú ý sau:

Hạn chế truy vấn

Tra cứu cấp độ

Power Apps hỗ trợ hai cấp độ tra cứu. Điều này có nghĩa là một biểu thức truy vấn Power Fx có thể có - nhiều nhất - hai hàm tra cứu trong đó. Hạn chế này là để duy trì hiệu suất. Nếu một biểu thức truy vấn bao gồm tra cứu, Power Apps trước tiên hãy thực hiện truy vấn để lấy bảng cơ sở. Sau đó, nó thực hiện truy vấn thứ hai để mở rộng bảng đầu tiên với thông tin tra cứu. Chúng tôi hỗ trợ tối đa thêm một cấp độ nữa. Tuy nhiên, đối với ngoại tuyến, chúng tôi chỉ hỗ trợ mở rộng một cấp độ tra cứu.

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

Điều quan trọng là đặt thuộc tính của thực thể cần so sánh trong biểu thức ở vế trái 'LHS' của phương trình. Để minh họa, trong ví dụ bên dưới thuộc tính thực thể 'ID đơn vị kinh doanh'.Name là một giá trị thuộc tính và nó phải được đặt trên LHS của biểu thức cần đánh giá. Biểu thức sau đây thành công:

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

Tuy nhiên, biểu thức này sẽ không:

 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 đại diện.

Trong Sắp xếp, công thức chỉ có thể là tên của một cột và không thể 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 ủy quyền tùy thuộc vào sự hỗ trợ ở phía sau. Sum, Average, MinMax có thể được đại diện. Các chức năng đếm như CountRowsCount cũng có thể được ủy quyền. Hiện tại, chỉ có một số nguồn dữ liệu hạn chế hỗ trợ các chức năng ủy quyền này. Để biết thêm thông tin, hãy xem Danh sách ủy quyền.

Hỗ trợ ủy quyền RemoveIfUpdateIf ở chế độ Thử nghiệm và tắt theo mặc định.

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

Tất cả các hàm khác đều không hỗ trợ đại diện, bao gồm những hàm đáng chú ý sau:

Giới hạn không thể ủy quyền

Các công thức không thể được đại diện sẽ được xử lý cục bộ. Quá trình xử lý cục bộ cho phép sử dụng toàn bộ Power Apps ngôn ngữ công thức. Nhưng với một mức giá: tất cả dữ liệu phải được đưa đến dữ liệu trước, điều này có thể liên quan đến việc truy xuất một lượng lớn dữ liệu qua mạng. Điều đó có thể mất thời gian, tạo ra ấn tượng rằng ứng dụng của bạn chậm hoặc có thể bị hỏng.

Để tránh điều này, Power Apps đặt ra giới hạn về lượng dữ liệu có thể được xử lý cục bộ: 500 bản ghi theo mặc định. Chúng tôi chọn con số này vì bạn vẫn có quyền truy cập đầy đủ vào các tập hợp dữ liệu nhỏ và có thể tinh chỉnh việc sử dụng các tập hợp dữ liệu lớn bằng cách xem kết quả một phần.

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

Hàm tổng hợp cũng có thể gây nhầm lẫn. Lấy Average (Trung bình) trên một cột của cùng một triệu nguồn dữ liệu bản ghi. Trung bình không thể được ủy quyền trong trường hợp này vì biểu thức không được ủy quyền (xem lưu ý trước đó), vì vậy chỉ 500 bản ghi đầu tiên được tính trung bình. Nếu không cẩn thận, một phần câu trả lời có thể bị hiểu nhầm là câu trả lời hoàn chỉnh của người dùng ứng dụng.

Thay đổi giới hạn

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

  1. Chọn Thiết đặt.
  2. Trong phần Chung, hãy thay đổi giá trị thiết đặt Giới hạn hàng dữ liệu từ 1 thành 2000.

Trong một số trường hợp, bạn biết rằng 2.000 (hoặc 1.000 hoặc 1.500) sẽ đáp ứng nhu cầu trong kịch bản của bạn. Nếu cẩn thận, bạn có thể tăng số này để phù hợp với tình huống của bạn. Khi bạn tăng số này, hiệu quả của ứng dụng có thể giảm, đặc biệt là với các bảng rộng có nhiều cột. Tuy nhiên, câu trả lời tốt nhất là đại diện nhiều nhất có thể.

Để đảm bảo ứng dụng của bạn có thể mở rộng theo tập dữ liệu lớn, hãy giảm cài đặt này xuống 1. Bất cứ mục nào không thể đại diện đều sẽ trả về một bản ghi, điều này rất dễ phát hiện khi kiểm tra ứng dụng của bạn. Điều này có thể tránh những điều bất ngờ khi cố gắng đưa một ứng dụng bằng chứng khái niệm vào sản xuất.

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

Để biết dễ hơn những gì được và không được đại diện, Power Apps sẽ đưa ra cảnh báo (hình tam giác màu vàng) khi bạn tạo công thức có chứa mục nào đó không thể đại diện được.

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

Ví dụ

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

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

Thuộc tính Items của thư viện được đặt thành công thức chứa các hàm SortByColumnsSearch, cả hai hàm đều có thể được đại diện.

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

Các dấu chấm xuất hiện trong giây lát gần phía trên cùng màn hình khi ứng dụng liên hệ với Máy chủ SQL để xử lý yêu cầu tìm kiếm. Tất cả bản ghi đáp ứng tiêu chí tìm kiếm sẽ xuất hiện, ngay cả khi nguồn dữ liệu chứa 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 "Apples""Pineapple" vì hàm Search tìm kiếm mọi nơi trong cột văn bản. Nếu bạn chỉ muốn tìm các bản ghi có chứa cụm từ tìm kiếm ở đầu tên của trái cây, bạn có thể sử dụng một chức năng ủy quyền khác, Bộ lọc, với một cụm từ tìm kiếm phức tạp hơn. (Để đơn giản, hãy xóa lệnh gọi SortByColumns.)

Xóa lệnh gọi SortByColumns.

Các kết quả mới bao gồm "Apples" chứ không phải "Pineapple". Tuy nhiên, một hình tam giác màu vàng sẽ xuất hiện bên cạnh thư viện (và trong hình thu nhỏ của màn hình nếu thanh điều hướng bên trái hiển thị hình thu nhỏ) và một đường lượn sóng màu xanh lam 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 biểu thị một cảnh báo. Nếu 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.

Máy chủ SQL là một nguồn dữ liệu có thể đại diện và Filter là hàm có thể đại diện. Tuy nhiên, MidLen không thể được đại diện cho bất kỳ nguồn dữ liệu nào.

Nhưng vẫn hiệu quả, đúng không? Phần nào đó là như vậy. Và đó là lý do tại sao đây là một cảnh báo chứ không phải một đường nguệch ngoạc màu đỏ lượn sóng.

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

Xem thêm

Tác động của việc sử dụng các chức năng không thể ủy quyền và giới hạn hàng dữ liệu không phù hợp về hiệu suất
Mẹo hiệu suất và những cách làm tốt nhất để sử dụng ủy quyền

Lưu ý

Bạn có thể cho chúng tôi biết bạn thích dùng ngôn ngữ nào cho tài liệu không? Làm một cuộc khảo sát ngắn. (xin lưu ý, khảo sát này bằng tiếng Anh)

Cuộc khảo sát sẽ mất khoảng bảy phút. Không có dữ liệu cá nhân nào được thu thập (điều khoản về quyền riêng tư).