Chia sẻ qua


ForAll chức năng

Áp dụng cho: Ứng dụng Canvas Copilot Studio Desktop dòng ứng dụng dựa trên mô hình Power Platform CLI Chức năng đảo dữ liệu Power Pages

Tính toán giá trị và thực hiện các hành động cho tất cả bản ghi trong một bảng.

Mô tả

Hàm ForAll đánh giá một công thức cho tất cả các bản ghi trong một bảng. Công thức có thể tính toán một giá trị và/hoặc thực hiện các hành động, chẳng hạn như sửa đổi dữ liệu hoặc xử lý kết nối. Sử dụng hàm With để đánh giá công thức cho một bản ghi.

Sử dụng hàm Sequence với hàm ForAll để lần lượt dựa trên số đếm.

Các trường bản ghi hiện đang được xử lý đều có sẵn trong công thức. Sử dụng toán tử ThisRecord hoặc chỉ đơn giản là tham chiếu các trường theo tên như khi làm với bất kỳ giá trị nào khác. Bạn cũng có thể dùng toán tử As để đặt tên cho bản ghi đang được xử lý, điều này có thể giúp cho công thức của bạn dễ hiểu hơn và làm cho các bản ghi lồng nhau có thể truy cập được. Để biết thêm thông tin, hãy xem ví dụ bên dưới và xử lý phạm vi bản ghi.

Giá trị trả về

Sau mỗi lần đánh giá công thức, hàm sẽ trả về kết quả trong bảng, theo thứ tự như bảng nhập vào.

Nếu kết quả của công thức là một giá trị duy nhất, bảng kết quả sẽ là bảng một cột. Nếu kết quả của công thức là một bản ghi, bảng kết quả chứa các bản ghi có cùng cột với bản ghi kết quả.

Nếu kết quả của công thức là giá trị trống thì không có bản ghi nào trong bảng kết quả cho bản ghi đầu vào đó. Trong trường hợp này, bảng kết quả có ít bản ghi hơn bảng nguồn.

Hành động

Công thức có thể bao gồm các hàm thực hiện hành động, chẳng hạn như sửa đổi các bản ghi của nguồn dữ liệu bằng hàm PatchCollect. Công thức cũng có thể gọi các phương thức xử lý kết nối. Có thể thực hiện nhiều hành động trên mỗi bản ghi bằng cách sử dụng toán tử ;. Bạn không thể sửa đổi bảng là chủ đề của hàm ForAll .

Khi viết công thức, hãy nhớ rằng các bản ghi có thể được xử lý theo bất kỳ thứ tự nào và có thể được xử lý song song khi có thể. Bản ghi đầu tiên của bảng có thể được xử lý sau bản ghi cuối cùng.

Hãy cẩn trọng để tránh sắp xếp các quan hệ phụ thuộc. Vì lý do này, bạn không thể sử dụng các hàm UpdateContext, ClearClearCollectForAll trong một hàm vì chúng có thể dễ dàng được sử dụng để giữ các biến dễ bị ảnh hưởng đến hiệu ứng này. Bạn có thể dùng hàm Collect nhưng thứ tự thêm các bản ghi là không xác định.

Một số hàm sửa đổi nguồn dữ liệu, bao gồm Collect, Remove, and Update, trả về gia trị là nguồn dữ liệu đã thay đổi. Các giá trị trả về này có thể lớn và tiêu tốn tài nguyên đáng kể nếu được trả về cho mọi bản ghi của ForAll bảng. Bạn cũng có thể thấy ForAll rằng các giá trị trả về này không như bạn mong đợi vì có thể hoạt động song song và có thể phân tách các tác dụng phụ của các hàm này khi thu được kết quả của chúng. ForAll Nếu giá trị trả về không được sử dụng, thường là trường hợp với các hàm sửa đổi dữ liệu, thì giá trị trả về sẽ không được tạo và không có lo ngại về tài nguyên hoặc trật tự. Nhưng nếu bạn đang sử dụng kết quả của một ForAll và một trong các hàm trả về nguồn dữ liệu, hãy cân nhắc cẩn thận về cách bạn cấu trúc kết quả và thử trước trên các tập dữ liệu nhỏ.

Lựa chọn thay thế

Nhiều hàm trong Power Apps có thể xử lý nhiều giá trị cùng một lúc bằng cách sử dụng bảng một cột. Ví dụ, hàm Len có thể xử lý bảng giá trị văn bản, trả về một bảng độ dài, theo cách tương tự như ForAll vậy. Điều này có thể loại bỏ sự cần thiết phải ForAll sử dụng trong nhiều trường hợp, có thể hiệu quả hơn và dễ đọc hơn.

Một sự cân nhắc khác ForAll là không thể xóa trong khi các hàm khác có thể là, chẳng hạn như Bộ lọc.

Đại diện

Khi được dùng với một nguồn dữ liệu, bạn không thể ủy nhiệm chức năng này. Chỉ có phần đầu tiên của nguồn dữ liệu mới được truy xuất và sau đó áp dụng chức năng. Kết quả có thể không thể hiện toàn bộ câu chuyện. Một cảnh báo có thể xuất hiện vào lúc biên soạn để nhắc bạn về hạn chế này và gợi ý chuyển sang dùng các hình thức ủy nhiệm thay thế khi có thể. Để biết thêm thông tin, xem bản tổng quan ủy nhiệm.

Cú pháp

ForAll(Bảng, Công thức)

  • Bảng - Bắt buộc. Bảng cần xử lý.
  • Công thức - Bắt buộc. Công thức để đánh giá tất cả bản ghi của Table (Bảng).

Ví dụ

Tính toán

Dưới đây là các ví dụ sử dụng nguồn dữ liệuSquares:

Ví dụ về hàm Squares.

Để tạo nguồn dữ liệu này dưới dạng bộ sưu tập, hãy đặt thuộc tính OnSelect của kiểm soát Button thành công thức này, mở chế độ Bản xem trước, sau đó chọn nút:

ClearCollect( Squares, [ "1", "4", "9" ] )

Công thức Mô tả Kết quả
ForAll( Bình phương, Sqrt( Giá trị ) )

Sqrt( Hình vuông )
Đối với tất cả các bản ghi của bảng nhập vào, tính căn bậc hai của cột Value (Giá trị). Hàm Sqrt cũng có thể được sử dụng với một bảng đơn cột, giúp bạn có thể thực hiện ví dụ này mà không cần sử dụng ForAll. Ví dụ về Sqrt.
ForAll( Bình phương, Nguồn( Giá trị, 3 ) ) Đối với tất cả các bản ghi của bảng nhập vào, tính lũy thừa bậc 3 của cột Value. Hàm Power không hỗ trợ bảng một cột. Do đó, ForAll phải được sử dụng trong trường hợp này. Ví dụ về hàm Power.

Sử dụng kết nối

Dưới đây là các ví dụ sử dụng nguồn dữ liệuExpressions:

Ví dụ về biểu thức.

Để tạo nguồn dữ liệu này dưới dạng bộ sưu tập, hãy đặt thuộc tính OnSelect của kiểm soát Button thành công thức này, mở chế độ Bản xem trước, sau đó chọn nút:

ClearCollect( Expressions, [ "Hello", "Good morning", "Thank you", "Goodbye" ] )

Ví dụ này cũng sử dụng kết nối Trình biên dịch của Microsoft. Để thêm kết nối này vào ứng dụng của bạn, hãy xem bài viết về cách quản lý kết nối.

Công thức Mô tả Kết quả
ForAll(Expressions, MicrosoftTranslator.Translate(Value, "es")) Đối với tất cả các bản ghi trong bảng Biểu thức, hãy dịch nội dung của cột Value (Giá trị) sang tiếng Tây Ban Nha (viết tắt là "es"). Ví dụ với giá trị
ForAll(Expressions, MicrosoftTranslator.Translate(Value, "fr")) Đối với tất cả các bản ghi trong bảng Biểu thức, hãy dịch nội dung của cột Value (Giá trị) sang tiếng Pháp (viết tắt là "fr"). Ví dụ với giá trị

Sao chép bảng

Đôi khi, bạn cần lọc, định hình, sắp xếp và thao tác với dữ liệu. Power Apps cung cấp nhiều hàm để thực hiện việc này, chẳng hạn như Filter, AddColumnsSort. Power Apps coi mỗi bảng là một giá trị, cho phép bảng chạy xuyên suốt các công thức và được tiêu thụ dễ dàng.

Và đôi khi bạn muốn tạo một bản sao của kết quả này để sử dụng sau này hoặc bạn muốn di chuyển thông tin từ nguồn dữ liệu này sang nguồn dữ liệu khác. Power Apps có hàm Collect để sao chép dữ liệu.

Nhưng trước khi bạn tạo bản sao đó, hãy suy nghĩ cẩn thận nếu cần. Bạn có thể giải quyết nhiều trường hợp bằng cách lọc và định hình nguồn dữ liệu cơ bản theo yêu cầu bằng một công thức. Sau đây là một số nhược điểm khi sao chép:

  • Hai bản sao của cùng một thông tin có nghĩa là một trong số chúng có thể không đồng bộ.
  • Tạo một bản sao có thể tiêu tốn nhiều bộ nhớ máy tính, băng thông mạng và/hoặc thời gian.
  • Đối với hầu hết các nguồn dữ liệu, không thể ủy quyền sao chép, giới hạn số lượng dữ liệu có thể được di chuyển.

Dưới đây là các ví dụ sử dụng nguồn dữ liệuProducts:

Ví dụ về nguồn dữ liệu sản phẩm.

Để tạo nguồn dữ liệu này dưới dạng bộ sưu tập, hãy đặt thuộc tính OnSelect của kiểm soát Button thành công thức này, mở chế độ Bản xem trước, sau đó chọn nút:

ClearCollect( Products,
    Table(
        { Product: "Widget",    'Quantity Requested': 6,  'Quantity Available': 3 },
        { Product: "Gadget",    'Quantity Requested': 10, 'Quantity Available': 20 },
        { Product: "Gizmo",     'Quantity Requested': 4,  'Quantity Available': 11 },
        { Product: "Apparatus", 'Quantity Requested': 7,  'Quantity Available': 6 }
    )
)

Mục tiêu của chúng tôi là xử lý bảng phái sinh chỉ bao gồm các mặt hàng được yêu cầu nhiều hơn mức có sẵn và chúng tôi cần phải đặt hàng những mặt hàng đó:

Ví dụ về bảng phái sinh.

Chúng ta có thể thực hiện nhiệm vụ này bằng một vài cách khác nhau, tất cả đều mang đến cùng một kết quả, với những ưu và nhược điểm khác nhau.

Bảng định hình theo yêu cầu

Không sao chép! Chúng tôi có thể sử dụng công thức sau đây trong mọi trường hợp:

// Table shaping on demand, no need for a copy of the result
ShowColumns(
    AddColumns(
        Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
        "Quantity To Order", 'Quantity Requested' - 'Quantity Available'
    ),
    "Product",
    "Quantity To Order"
)

Phạm vi bản ghi được tạo bằng các hàm FilterAddColumns để thực hiện các phép toán so sánh và phép trừ tương ứng với các trường 'Quantity Requested''Quantity Available' của từng bản ghi.

Trong ví dụ này, có thể chỉ định hàm Filter. Điều này rất quan trọng, vì hàm này có thể tìm thấy tất cả các sản phẩm đáp ứng tiêu chí, ngay cả khi đó chỉ là một vài bản ghi trong số hàng triệu bảng. Tại thời điểm này, không thể ủy quyền ShowColumnsAddColumns , vì vậy số lượng sản phẩm thực tế cần được đặt hàng bị giới hạn. Nếu bạn biết kích thước của kết quả này luôn là tương đối nhỏ, phương pháp này là tốt.

Và vì chúng tôi không tạo bản sao nên không có bản sao bổ sung nào của thông tin để quản lý hoặc hết hạn.

ForAll theo yêu cầu

Một cách tiếp cận khác là sử ForAll dụng hàm để thay thế các hàm tạo hình bảng:

ForAll( Products,
    If( 'Quantity Requested' > 'Quantity Available',
        {
            Product: Product,
            'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
        }
    )
)

Một số người có thể thấy công thức này dễ đọc và viết hơn.

Không một phần nào ForAll của việc này là có thể xóa bỏ. Chỉ đánh giá phần đầu tiên của bảng Sản phẩm, đây có thể là vấn đề nếu bảng này lớn. Vì có thể chỉ định hàm Filter trong ví dụ trước, nên hàm này có thể hoạt động hiệu quả hơn với các tập dữ liệu lớn.

Thu thập kết quả

Trong một số tình huống, có thể cần bản sao của dữ liệu. Bạn có thể cần chuyển thông tin từ nguồn dữ liệu này sang nguồn dữ liệu khác. Trong ví dụ này, các đơn hàng được đặt thông qua bảng NewOrder trên hệ thống của nhà cung cấp. Đối với tương tác người dùng tốc độ cao, bạn có thể muốn lưu vào bộ đệm ẩn bản sao cục bộ của bảng để không có độ trễ máy chủ.

Chúng tôi sử dụng cùng một bảng định hình như 2 ví dụ trước nhưng đưa kết quả vào một bộ sưu tập:

ClearCollect( NewOrder,
    ShowColumns(
        AddColumns(
            Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
            "Quantity To Order", 'Quantity Requested' - 'Quantity Available'
        ),
        "Product",
        "Quantity To Order"
    )
)
ClearCollect( NewOrder,
    ForAll( Products,
        If( 'Quantity Requested' > 'Quantity Available',
            {
                Product: Product,
                'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
            }
        )
    )
)

ClearCollectCollect không thể được ủy quyền. Do đó, lượng dữ liệu có thể di chuyển theo cách này bị hạn chế.

Thu thập trong ForAll

Cuối cùng, chúng ta có thể thực hiện Thu thập trực tiếp trong ForAll:

Clear( NewOrder );
ForAll( Products,
    If( 'Quantity Requested' > 'Quantity Available',
        Collect( NewOrder,
            {
                Product: Product,
                'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
            }
        )
    )
)

Một lần nữa ForAll , không thể ủy nhiệm hàm tại thời điểm này. Nếu bảng Sản phẩm của chúng tôi lớn, hãy ForAll chỉ xem tập hợp các bản ghi đầu tiên và chúng tôi có thể bỏ lỡ một số sản phẩm cần được đặt hàng. Nhưng đối với các bảng mà chúng tôi biết vẫn còn nhỏ, phương pháp này là tốt.

Lưu ý rằng chúng tôi không chụp kết quả của ForAll. Các cuộc gọi chức năng Thu thập được thực hiện từ bên trong nó trả về nguồn dữ liệu NewOrder cho tất cả các bản ghi, có thể thêm vào nhiều dữ liệu nếu chúng tôi chụp nó.

Ánh xạ bảng trong một thành phần

Xem phần Ánh xạ bảng.