
Virtual column AppSheet (cột ảo) là cột chỉ tồn tại bên trong app: không có cột tương ứng trong Google Sheet, giá trị được tính tự động bằng App formula (công thức của AppSheet) và không được lưu ở đâu cả. Nhờ vậy bạn hiện được Tổng tiền của đơn, Công nợ của khách hay Tồn kho của sản phẩm mà không phải thêm cột vào Sheet. Đổi lại, càng nhiều virtual column thì app càng tốn thời gian tính khi sync, nên cần dùng có chừng mực. Video bên dưới làm mẫu từng bước, còn bài này viết đầy đủ để bạn đọc xong là làm được, không cần xem video.
Virtual column là gì?
Virtual column là cột do AppSheet tạo ra trong app, không ứng với cột nào trong spreadsheet. Giá trị của nó được tính bằng App formula và không lưu ở đâu, nên mở Google Sheet ra bạn sẽ không thấy cột đó. Đây cũng là câu trả lời cho thắc mắc quen thuộc «vì sao virtual column không hiện trong Google Sheet»: vì nó vốn không được ghi xuống Sheet.
Trong app, cột ảo hành xử gần như cột thường: hiện trên view, dùng được trong biểu thức, slice (lát cắt dữ liệu) và format rule (quy tắc định dạng). Có hai điểm cần nhớ:
- Kết quả tính được là cục bộ theo thiết bị người dùng, không chia sẻ cho người khác.
- Vì vậy giá trị có thể khác nhau giữa các người dùng, ví dụ khi công thức phụ thuộc
USEREMAIL().
Nếu bạn chưa rõ khác biệt giữa cột thật và các kiểu cột, có thể xem thêm bài Column type AppSheet: bảng tổng hợp mọi kiểu cột.

Ba kiểu dùng virtual column hay gặp trong app bán hàng
Ba kiểu phổ biến là ghép cột, giá trị theo điều kiện và điều kiện Yes/No phức tạp. Giả sử bạn có app «Bán hàng 5F» cho một cửa hàng phân phối đồ gia dụng ở Bình Dương, với các bảng Đơn hàng, Khách hàng, Nhân viên. Dưới đây là ba ví dụ (các con số chỉ để minh hoạ).
- Ghép cột. Cột Nhãn đơn để hiện gọn trên danh sách:
CONCATENATE([Mã đơn], " – ", [Khách hàng].[Tên khách hàng]). Kết quả kiểu «DH0125 – Anh Hùng». - Giá trị theo điều kiện. Cột Liên hệ ưu tiên:
IF(ISBLANK([Số điện thoại]), [Nhân viên phụ trách].[Email], [Số điện thoại]). Khách không có số điện thoại thì app hiện email nhân viên phụ trách. - Điều kiện Yes/No phức tạp. Cột Cần chú ý?:
OR([Tổng tiền] > 10000000, [Trạng thái] = "Chưa thu"). Đặt một lần rồi dùng lại trong slice, format rule, Show_If thay vì chép biểu thức dài ra khắp nơi.
Kiểu thứ ba là lý do chính khiến nhiều người làm app chuyên nghiệp thích cột ảo: sửa điều kiện một chỗ, mọi nơi dùng cột đó đều cập nhật theo.
Tổng tiền, Công nợ, Tồn kho: cột ảo tra bảng khác
Để tính tổng tiền AppSheet cho một đơn, tạo virtual column Tổng tiền trong bảng Đơn hàng với công thức SUM([Related Chi tiết đơns][Thành tiền]): cộng cột Thành tiền của mọi dòng chi tiết thuộc đơn đó. Tên «Related Chi tiết đơns» theo quy tắc AppSheet tự đặt nên có thể khác tuỳ tên bảng của bạn.
Vì sao phải là virtual column? Cột thật có App formula tra bảng khác (dùng SELECT() hoặc LOOKUP()) không tự tính lại khi dòng ở bảng kia thay đổi. Nếu nhân viên sửa số lượng ở một dòng chi tiết, cột Tổng tiền thật sẽ vẫn giữ giá trị cũ. Virtual column thì được tính lại mỗi lần sync, nên con số luôn khớp. Chi tiết về hạn chế của cột thật nằm trong bài App formula AppSheet và Initial value, và tài liệu chính thức cũng khuyên dùng virtual column cho trường hợp này.
Công nợ của khách và Tồn kho của sản phẩm làm tương tự: tạo cột ảo ở bảng Khách hàng (cộng các khoản còn nợ qua Related Đơn hàngs) và ở bảng Sản phẩm (nhập trừ xuất qua các Related tương ứng). Tên cột cụ thể tuỳ thiết kế bảng của bạn, hãy đối chiếu với dữ liệu thật trước khi áp dụng.
![Ô App formula của virtual column Tổng tiền với công thức SUM([Related Chi tiết đơns][Thành tiền])](/api/media/general/2026/10/aa6833f3-7fa2-4bf5-b53e-180bd14a935a.webp)
Thêm, sắp xếp, xoá virtual column thế nào?
Thêm virtual column mất vài thao tác, nhưng xoá cần cẩn thận hơn vì editor không báo cột đang được dùng ở đâu.
Cách thêm
- Vào Data, chọn bảng cần thêm cột.
- Bấm + ở đầu bảng cột.
- Nhập App formula (bắt buộc phải có).
- Editor tự đoán kiểu dữ liệu; kiểm tra lại cho đúng ý.
- Bấm Done, rồi Save.
Cách sắp xếp
Virtual column luôn đứng sau mọi cột thật, theo thứ tự tạo; biểu tượng sửa của nó có màu khác cột thật nên dễ nhận ra. Muốn đổi thứ tự cho toàn app, hãy tạo slice. Muốn đổi trong một view, đặt Column order của view đó.
Cách xoá
Mở cột rồi bấm Delete. Lưu ý: editor không chặn việc xoá cột đang được dùng ở nơi khác, và sau khi lưu có thể báo lỗi khiến app không chạy được. Trước khi xoá, hãy tìm xem cột đó có nằm trong slice, format rule, Show_If hay công thức của cột khác không.
Cột «Related …» do AppSheet tự sinh là gì, xoá được không?
Cột Related là virtual column AppSheet tự thêm để theo dõi tham chiếu ngược. Khi bảng A có cột Ref (tham chiếu) trỏ sang bảng B, AppSheet thêm vào B một virtual column có tên bắt đầu bằng «Related», ví dụ bảng Khách hàng có Related Đơn hàngs. Cột này dùng REF_ROWS() và có kiểu List với phần tử là Ref. Đây chính là danh sách «đơn của khách» hiện ở trang chi tiết khách.
Còn việc xoá: bạn có thể xoá, nhưng lần lưu sau AppSheet sẽ tự sinh lại, nên không xoá vĩnh viễn được, chỉ có thể chỉnh lại cấu hình. Vì vậy cách tiếp cận đúng với Related AppSheet là tận dụng nó: công thức SUM([Related Chi tiết đơns][Thành tiền]) ở trên dựa vào đúng loại cột này. Cách các bảng liên kết với nhau được giải thích thêm trong bài Dữ liệu AppSheet: data source, table, column.
Cái giá về tốc độ: virtual column làm chậm app thế nào?
Virtual column làm chậm app vì chúng được tính cho từng dòng, từng cột, và tính lại khi sync. Biểu thức càng phức tạp, số cột ảo càng nhiều thì app càng chậm rõ rệt; tài liệu chính thức nêu nhiều virtual column thường tốn hiệu năng đáng kể và khuyên giữ số lượng ở mức tối thiểu. Google không đưa ra con số «bao nhiêu cột thì chậm», nên tôi không đặt ngưỡng nào. Cách an toàn là đo app của bạn.
Với kinh nghiệm triển khai của tôi, có thể phân loại tạm thành «rẻ» và «đắt». Đây là gợi ý của bài chứ không phải phân loại chính thức của AppSheet.
| Loại | Ví dụ | Gợi ý |
|---|---|---|
| Tương đối «rẻ» | Công thức chỉ dùng cột trong cùng dòng, như Nhãn đơn ghép từ Mã đơn | Dùng thoải mái khi cần |
| Tương đối «đắt» | Cột tra bảng khác: SELECT(), SUM trên Related… | Chỉ tạo khi thật sự hiện ra cho người dùng |
Cách giảm tải trong thực tế:
- Ưu tiên công thức chỉ dùng cột cùng dòng.
- Cột tra bảng khác chỉ tạo khi có người dùng thật sự nhìn thấy kết quả, không tạo «phòng khi cần».
- Gộp điều kiện dùng ở nhiều nơi vào một cột thay vì nhiều cột na ná nhau, như cột Cần chú ý? ở trên.
- Thử bật tuỳ chọn Blank value comparison mode =
Consistent: tài liệu chính thức cho biết chế độ này có thể cải thiện tốc độ so sánh trên server, giúp so sánh trong virtual column tính nhanh hơn khi sync. Hãy đọc kỹ tài liệu trước khi đổi, vì có thể ảnh hưởng cách so sánh giá trị trống.
Ví dụ: app của một xưởng nhỏ có 6 cột ảo tra bảng khác nhưng chỉ 2 cột được hiện trên màn hình. Bốn cột còn lại có thể bỏ hoặc chuyển thành báo cáo riêng. Hãy rà từng cột và hỏi: «Ai nhìn thấy cột này, ở đâu?».

Tóm tắt và bước tiếp theo
- Virtual column chỉ có trong app, tính bằng App formula, không lưu trong Sheet và có thể khác nhau giữa người dùng.
- Ba kiểu dùng chính: ghép cột, giá trị theo điều kiện, Yes/No dùng lại nhiều nơi.
- Tổng tiền, Công nợ, Tồn kho nên là cột ảo vì luôn được tính lại khi sync.
- Cột Related tự sinh, xoá rồi sẽ có lại; xoá cột ảo thường phải tìm chỗ dùng trước.
- Nhiều cột ảo, nhất là cột tra bảng khác, làm app chậm hơn; hãy giữ ít và đo thực tế.
Bước tiếp theo: mở app của bạn, liệt kê mọi virtual column, đánh dấu cột nào tra bảng khác và cột nào chưa hiện ra cho ai. Gộp hoặc bỏ những cột không cần, rồi thử sync lại để so sánh. Bạn có thể đọc thêm trong tài liệu chính thức về virtual column của AppSheet.
Xem thêm
Câu hỏi thường gặp
›Virtual column trong AppSheet là gì?
Virtual column là cột chỉ tồn tại trong app, không có cột tương ứng trong Google Sheet. Giá trị được tính bằng App formula và không lưu ở đâu. Trong app nó dùng được như cột thường: hiện trên view, dùng trong biểu thức, slice và format rule.
›Vì sao không thấy virtual column trong Google Sheet?
Vì virtual column không ứng với cột nào trong spreadsheet và giá trị của nó không được ghi xuống đâu cả. Nó chỉ được tính trong app khi sync và là cục bộ theo thiết bị người dùng. Muốn lưu giá trị vào Sheet thì cần dùng cột thật.
›Cột «Related …» tự sinh xoá được không?
Cột Related là virtual column theo dõi tham chiếu ngược, dùng REF_ROWS() và có kiểu List phần tử Ref. Bạn có thể xoá nhưng lần lưu sau AppSheet sẽ tự tạo lại, nên không xoá vĩnh viễn được. Thay vào đó hãy chỉnh lại cấu hình của cột nếu cần.
›Nhiều virtual column có làm app chậm không?
Có. Virtual column được tính cho từng dòng, từng cột và tính lại khi sync, nên nhiều cột hoặc công thức phức tạp, nhất là tra bảng khác, sẽ làm app chậm. Tài liệu chính thức khuyên giữ số lượng ở mức tối thiểu nhưng không đưa ra con số cụ thể, nên bạn cần tự đo trên app của mình.
Tác giả
Chuyên gia chuyển đổi số · Đại diện 5F Edu
Hơn 8 năm triển khai và tư vấn chuyển đổi số cho doanh nghiệp vừa và nhỏ: chuẩn hoá quy trình, xây phần mềm quản lý bằng AppSheet và web app, tự động hoá bằng N8N. Người làm kênh YouTube Nghiện AppSheet.



