Lưu ý
Cần có ủy quyền mới truy nhập được vào trang này. Bạn có thể thử đăng nhập hoặc thay đổi thư mục.
Cần có ủy quyền mới truy nhập được vào trang này. Bạn có thể thử thay đổi thư mục.
Động là kiểu dữ liệu trong Power Fx có thể chứa bất kỳ cấu trúc dữ liệu nào, phức tạp hoặc đơn giản. Không thể sử dụng trực tiếp và chuyển đổi sang kiểu dữ liệu khác vào thời gian chạy, một cách rõ ràng hoặc ngầm định. Có thể truy nhập các trường của bản ghi trong giá trị Động bằng cách sử dụng dấu chấm và sự tồn tại của các trường chỉ được xác minh ở thời gian chạy.
Có hai cách để tạo giá trị Động :
- Sử dụng hàm ParseJSON.
- Sử dụng đường kết nối trả về loại "động".
Lưu ý
Dynamic trước đây được gọi là UntypedObject. Chỉ có tên đã thay đổi, không có thay đổi trong ngữ âm. Vị trí duy nhất mà tên sẽ xuất hiện trong công thức là trong các phiên bản thử nghiệm của Hàm do Người dùng Xác định và Loại do Người dùng Xác định.
Loại đơn giản
Không thể sử dụng trực tiếp giá trị của biến chứa giá trị Động. Bạn luôn phải nhập đúng cách hàm đó bằng cách sử dụng hàm tạo kiểu tương ứng hoặc bằng cách chuyển đổi nó thành một kiểu cụ thể với các hàm AsType và ParseJSON .
Các ví dụ sau chuyển đổi giá trị của một biến Động có tên DynValue.
Text(DynValue)
Value(DynValue)
Bảng sau đây liệt kê các kiểu dữ liệu và hàm tương ứng để chuyển đổi Động thành kiểu dữ liệu đó.
| Loại dữ liệu | Hàm | Description |
|---|---|---|
| Boolean | Boolean() | Khi chuyển đổi Dynamic sang Boolean, giá trị cơ sở phải đại diện cho boolean hoặc loại có thể được tự động chuyển đổi (chẳng hạn như chuỗi "true"). |
| Màu | ColorValue() hoặc RGBA() | Màu sắc có thể được thể hiện bằng ký pháp định nghĩa màu Cascading Style Sheet (CSS) dưới dạng một chuỗi hoặc dưới dạng các thành phần RGBA riêng lẻ. Dynamic có thể được chuyển đổi trực tiếp từ chuỗi định nghĩa màu Biểu định kiểu xếp tầng (CSS) bằng cách sử dụng hàm ColorValue() hoặc từ các số RGBA riêng lẻ thành màu sử dụng hàm RGBA(). |
| Đơn vị tiền tệ, Số | Giá trị() | Khi chuyển đổi Dynamic thành Number, giá trị cơ sở phải đại diện cho một số hoặc một loại có thể được tự động chuyển đổi (chẳng hạn như một chuỗi "123,456"). |
| Ngày, Ngày giờ và Giờ | DateValue(), TimeValue() hoặc DateTimeValue() | Ngày, giờ và ngày giờ có thể được chuyển đổi trực tiếp từ Động sang loại tương ứng, khi được thể hiện ở định dạng ISO 8601. Các định dạng khác phải được chuyển đổi thành văn bản trước tiên bằng cách sử dụng hàm Text() và sau đó chuyển vào hàm DateValue(), TimeValue() hoặc DateTimeValue() sẽ sử dụng ngôn ngữ trong thiết đặt của người dùng hiện tại để diễn giải ngày và giờ theo mặc định. |
| GUID | GUID() | Một giá trị Động có thể được chuyển đổi trực tiếp thành GUID nếu đối tượng cơ sở đại diện cho GUID hoặc nếu nó đại diện cho một chuỗi. |
| Siêu liên kết, Hình ảnh, Phương tiện | Chữ() | Các loại dữ liệu này là loại dữ liệu văn bản và có thể được chuyển đổi thành văn bản và sau đó sử dụng trong Power Fx. |
| Lựa chọn, Hai tùy chọn | Switch() hoặc If() | Các lựa chọn và hai tùy chọn được trình bày dưới dạng chuỗi bản địa hóa trong Power Fx. Các lựa chọn được hỗ trợ bởi một số và hai tùy chọn dưới dạng boolean. Không có chuyển đổi trực tiếp từ boolean, số hoặc chuỗi thành lựa chọn hoặc hai tùy chọn, nhưng các hàm Switch() hoặc If() có thể được sử dụng trên giá trị boolean, văn bản hoặc số để gán chính xác giá trị lựa chọn hoặc hai tùy chọn. |
| Bản ghi | không áp dụng | Không có chuyển đổi trực tiếp từ Động sang cấu trúc bản ghi nhưng bạn có thể truy xuất từng trường riêng lẻ từ Dynamic để tạo bản ghi mới. |
| Tham chiếu bản ghi | không áp dụng | Tham chiếu bản ghi là duy nhất cho nguồn dữ liệu và không có bản trình bày có ý nghĩa trong Động. |
| Bảng | Table() và ForAll() | Một Dynamic có thể đại diện cho một mảng, mảng này có thể được chuyển đổi thành bảng. Những đối tượng này có thể là mảng bản ghi hoặc mảng giá trị thực sự là bảng một cột. ForAll() có thể được sử dụng để tạo một bảng với các bản ghi được gõ đầy đủ. Xem lại các ví dụ ở phía dưới trong bài viết này để biết thêm thông tin. |
| Văn bản | Chữ() | Văn bản có thể được chuyển đổi trực tiếp. Nếu giá trị Động đại diện cho một số, bạn cần chuyển đổi Dynamic thành số trước tiên bằng cách sử dụng Value() trước khi chuyển đổi thành văn bản. |
Loại bản ghi
Bạn có thể truy nhập các trường trên một biến đại diện cho một bản ghi Động bằng cách sử dụng ký hiệu dấu chấm thông thường được sử dụng cho các bản ghi. Tuy nhiên, sự tồn tại của các trường sẽ không được xác minh cho đến khi chạy. Kết quả là cũng không có sẵn intellisense. Nếu một trường không tồn tại hoặc có giá trị null bên trong, thì việc truy cập trường đó sẽ dẫn đến một giá trị Blank().
Mỗi trường trên bản ghi cũng có kiểu Động và cần được nhập đúng. Trường có thể là một bản ghi động của loại đơn giản. Trong trường hợp đó là một bản ghi, bạn có thể xâu chuỗi ký pháp dấu chấm. Nếu bất kỳ trường nào trong chuỗi không tồn tại, thì Blank() được trả về.
Các ví dụ sau sử dụng các trường từ một biến Động có tên DynRecord.
Text(DynRecord.StringField)
Value(DynRecord.Field.ChildField)
Trong trường hợp tên trường bao gồm tên mã định danh không hợp lệ, chẳng hạn như khi tên trường bắt đầu bằng một số hoặc chứa các ký tự không hợp lệ, chẳng hạn như dấu gạch nối, thì bạn có thể đặt tên trường trong dấu trích dẫn đơn:
dynamic.'01'
dynamic.'my-field'
Truy cập cột động
Đôi khi tên của các cột trong bản ghi sẽ thay đổi. Sử dụng hàm ColumnNames để xác định tên cột nào có sẵn trong bản ghi, sau đó sử dụng hàm Column để truy xuất giá trị của cột được đặt tên.
Ví dụ:
LettersUsed = ParseJSON( "{ ""d"": 2, ""p"": 3 }" );
Concat( ColumnNames( LettersUsed ) As Names, Names.Value, ", " )
// returns "d, p"
Sum( ForAll( ColumnNames( LettersUsed ) As Names, Column( LettersUsed, Names.Value ) ), Value )
// returns 5
Mảng
Biến động có thể chứa một mảng. Mặc dù mảng có thể là một mảng các bản ghi hoặc mảng các loại đơn giản, việc chuyển đổi mảng Dynamic thành một bảng bằng cách sử dụng hàm Table() sẽ luôn cho kết quả là một bảng một cột là Dynamic. Các hàm như ForAll() và Index() không yêu cầu bạn tạo Table() trước tiên và kết quả là không yêu cầu bạn sử dụng trường Value một cột.
Ví dụ, để lấy số thứ hai trong mảng Dynamic chứa giá trị số ( [1, 2, 3] ), công thức sau đây có thể được dùng để truy xuất hàng thứ hai trong bảng và chuyển đổi cột thành số:
Value( Index( UOArray, 2 ) )
Nếu Dynamic đã được chuyển đổi thành Table() đầu tiên, hàng thứ hai trong bảng kết quả một cột là Value một cột có chứa Dynamic:
Value( Index( Table( UOArray ), 2 ).Value )
Đối với một mảng bản ghi có cột văn bản được gọi là Field, logic tương tự cũng được áp dụng. Có thể truy nhập trực tiếp vào Động hoặc nếu sử dụng hàm Table() sẽ cho kết quả là bảng một cột là Động.
Cột Field có thể truy nhập trực tiếp từ hàm Dynamic do hàm Index() trả về.
Text( Index( UORecordArray, 2 ).Field )
Khi sử dụng hàm Table(), trước tiên hãy truy xuất cột Value đơn cột để lấy Dynamic, rồi truy nhập cột Field :
Text( Index( Table( UORecordArray ), 2 ).Value.Field )
Để chuyển đổi một mảng bản ghi thành bảng được nhập, bạn có thể sử dụng hàm ForAll() và chuyển đổi từng trường riêng lẻ.
ForAll( UORecordArray, { FirstField: Value(ThisRecord.FirstField), SecondField: Text(ThisRecord.SecondField) } )
Nếu bảng Dynamic được chuyển đổi thành bảng trước tiên, một lần nữa, bảng một cột duy nhất có được của DynamicValue sẽ yêu cầu bạn sử dụng cột đó để tải các trường.
ForAll( Table(UORecordArray), { FirstField: Value(ThisRecord.Value.FirstField), SecondField: Text(ThisRecord.Value.SecondField) } )
Chuyển đổi sang các bản ghi và bảng đã nhập
Quan trọng
- Sử dụng AsType và IsType với giátrị Động là một tính năng thử nghiệm.
- Các tính năng thử nghiệm không dành cho việc sử dụng sản xuất và có thể chưa hoàn tất. Các tính năng này có sẵn trước khi phát hành chính thức để bạn có thể truy cập sớm và cung cấp phản hồi. Thông tin thêm: Tìm hiểu các tính năng thử nghiệm, xem trước và đã ngừng hoạt động trong ứng dụng bảng tùy biến
- Hành vi mà bài viết này >> mô tả chỉ khả dụng khi tính năng thử nghiệm do người dùng xác định trong Cài đặt tính năng sắp tới Thử nghiệm được bật (tính năng này được tắt theo mặc định).
- Phản hồi của bạn rất có giá trị với chúng tôi. Hãy cho chúng tôi biết suy nghĩ của bạn trong diễn đàn cộng đồng tính năng thử nghiệm Power Apps.
Thay vì chuyển đổi từng giá trị đơn giản riêng lẻ, các hàm ParseJSON, IsType và AsType có thể được sử dụng để chuyển đổi hàng loạt Dynamic thành đối tượng được nhập. Sử dụng hàm Type để tạo loại sẽ ánh xạ cấu trúc động với cấu trúc đã nhập.
Ví dụ, ở đây chúng ta đang diễn giải các chuỗi JSON thành các giá trị ngày giờ mà không cần phải gọi hàm DateTimeValue :
Eclipse = ParseJSON( "{ ""Start"": ""2026-08-12T18:26:00.000Z"", ""End"": ""2026-08-12T18:33:00.000Z"" }",
Type( { Start: DateTime, End: DateTime } ) );
DateDiff( Eclipse.Start, Eclipse.End, TimeUnit.Minutes )
// 7