A
Đăng nhập

Chương 4: Bản chất Kiểu dữ liệu & Nguồn dữ liệu

AppSheet Data Types

"AppSheet không chỉ là 'hiển thị' dữ liệu. Nó phải 'hiểu' dữ liệu."

Khi bạn khai báo một cột là Price, AppSheet hiểu rằng nó cần hiển thị ký hiệu tiền tệ và có thể cộng trừ. Khi bạn khai báo là Image, nó hiểu cần mở camera. Việc chọn đúng Data Type là bước quan trọng thứ hai sau khi thiết kế Database.


4.1 Tại sao khai báo đúng Kiểu dữ liệu lại quan trọng?

Đây là bài học đắt giá mà rất nhiều người mới bắt đầu thường bỏ qua. Nếu không khai báo kiểu dữ liệu phù hợp:

  1. Nhập liệu sẽ loạn: Người dùng có thể nhập bất cứ thứ gì vào ô, không có validation.
  2. Action sẽ lỗi: Bạn không thể gửi Email nếu cột không phải type Email, không thể gọi điện nếu không phải type Phone.
  3. Hệ thống sẽ nặng nề: Khi bạn chọn Ref (tham chiếu) một cách bừa bãi, mỗi lần cựa quậy AppSheet đều phải load dữ liệu từ bảng khác → app chậm như rùa.
  4. Báo cáo sẽ sai: Bạn không thể SUM một cột Text, không thể tính trung bình một cột Phone.

Nguyên tắc vàng: Khai báo đúng ngay từ đầu, sửa sau sẽ đau đầu.


4.2 Phân nhóm kiểu dữ liệu (The Big Picture)

AppSheet có hơn 30 kiểu dữ liệu khác nhau. Đừng hoảng sợ, chúng ta có thể nhóm chúng thành 5 nhóm chính dựa trên chức năng:sẽ trình bày theo thứ tự từ cơ bản đến nâng cao, kèm theo tips thực chiến.

4.2.1 Nhóm 1: Text Types (Kiểu Văn bản)

Đây là nhóm cơ bản nhất, dùng để lưu trữ chuỗi ký tự.

Kiểu Mô tả Khi nào dùng Ví dụ
Text Một dòng văn bản ngắn Tên, Mã sản phẩm, Tiêu đề Nguyễn Văn A
LongText Văn bản nhiều dòng Mô tả, Ghi chú, Nội dung email Ghi chú: Khách hàng VIP...
Name Tên người hoặc địa điểm Tên khách hàng, Tên nhân viên Trần Thị B

Tips thực chiến:

  • Text không cho phép xuống dòng, LongText thì có.
  • Dùng Name thay vì Text cho tên người để AppSheet hiểu ngữ nghĩa tốt hơn.
  • LongText đang hỗ trợ Rich Text Formatting trong Preview Program (có thể bold, italic...).

4.2.2 Nhóm 2: Numeric Types (Kiểu Số)

Đây là nhóm dùng để tính toán. QUAN TRỌNG: Nếu bạn khai báo sai kiểu, phép tính sẽ lỗi!

Kiểu Mô tả Khi nào dùng Lưu ý
Number Số nguyên (integer) Số lượng, Số thứ tự, Tuổi Lưu dạng 54-bit integer, AppSheet DB chuyển về 32-bit khi hiển thị
Decimal Số thực (có phần thập phân) Điểm số, Tỉ lệ, Kích thước 3.14159
Percent Phần trăm Tiến độ, Chiết khấu, Lãi suất 50% lưu là 0.50 trong database
Price Tiền tệ Giá, Doanh thu, Chi phí Tự động hiển thị ký hiệu tiền tệ (₫, $, €...)

Tips thực chiến:

  • Percent lưu dạng thập phân (0.50 = 50%), nhớ điều này khi viết formula!
  • Price không chỉ hiển thị đẹp mà còn hỗ trợ format theo locale của user.
  • Để set currency symbol cho Price: Data → Columns → Edit → Currency symbol = hoặc VNĐ.

4.2.3 Nhóm 3: Temporal Types (Kiểu Thời gian)

Thời gian là chiều thứ tư của dữ liệu. Khai báo sai chiều này, timeline và báo cáo của bạn sẽ vô nghĩa.

Kiểu Mô tả Khi nào dùng Format
Date Năm-Tháng-Ngày Ngày sinh, Ngày hết hạn, Deadline 2025-01-17
Time Giờ-Phút-Giây (không có ngày) Giờ mở cửa, Thời gian bắt đầu ca 14:30:00
DateTime Ngày + Giờ đầy đủ Check-in, Timestamp giao dịch 2025-01-17 14:30:00
Duration Khoảng thời gian Thời gian xử lý, Thời lượng cuộc gọi 02:30:15 (2h 30m 15s)

Tips thực chiến:

  • Luôn dùng DateTime nếu cần ghi nhận chính xác thời điểm (Check-in, Giao dịch, Log).
  • DateTime hiển thị theo timezone và format của thiết bị người dùng.
  • Duration cực kỳ hữu ích cho timesheet, ticket support, hoặc tính thời gian chờ.

4.2.4 Nhóm 4: Enumerated Types (Kiểu Liệt kê)

Đây là nhóm giúp chuẩn hóa dữ liệu đầu vào, tránh tình trạng "Hà Nội", "HN", "hà nội" xuất hiện lung tung trong database.

Kiểu Mô tả Khi nào dùng Ví dụ values
Yes/No Boolean (True/False) Công tắc, Checkbox, Trạng thái On/Off TRUE, FALSE
Enum Chọn 1 giá trị từ danh sách Trạng thái, Loại, Danh mục New, In Progress, Done
EnumList Chọn nhiều giá trị từ danh sách Tags, Skills, Sở thích [Đọc sách, Bơi lội, Du lịch]
Color Chọn màu sắc Phân loại theo màu, Priority Red, Blue, Green, Orange...
Progress Tiến độ dạng Harvey Balls Quản lý dự án Empty, Quarter, Half, Three Quarter, Full
Bảng màu AppSheet hỗ trợ:
Red Orange Yellow Green Cyan Blue Purple Pink Gray Black White
| **Ref** | Tham chiếu đến bảng khác | Foreign Key, Quan hệ dữ liệu | `[CustomerID]` → Bảng Customers | | **List** | Danh sách (virtual column) | Chỉ dùng cho Virtual Column | Kết quả của `SELECT()` |

[Lưu ý] Cảnh báo về Ref: Ref là con dao hai lưỡi. Nó mạnh nhưng nếu lạm dụng, app sẽ chậm như rùa vì mỗi lần load phải fetch dữ liệu từ bảng tham chiếu. Chỉ dùng Ref khi:

  • Cần hiển thị thông tin từ bảng khác (Tên KH, Địa chỉ...).
  • Cần tạo quan hệ cha-con (Order → OrderDetails).
  • KHÔNG dùng Ref chỉ để lookup 1 giá trị đơn giản → dùng LOOKUP() trong Virtual Column thay thế.

Tips thực chiến:

  • Enum có thể hiển thị dạng Dropdown hoặc Buttons (dễ bấm trên mobile).
  • Progress sử dụng Harvey Balls để hiển thị trực quan tiến độ.
  • Color hỗ trợ 8 màu chuẩn: Black, Blue, Green, Orange, Purple, Red, Yellow, White.

4.2.5 Nhóm 5: Content Types (Kiểu Nội dung Đa phương tiện)

Đây là sức mạnh của mobile app - thu thập dữ liệu đa phương tiện ngay trên thiết bị.

Kiểu Mô tả Cách thu thập Lưu ý
Image Ảnh (.jpg, .png, .gif) Camera hoặc Thư viện Có thể cho phép vẽ trên ảnh (markup)
Thumbnail Ảnh nhỏ (icon) Tương tự Image Dùng cho avatar, logo nhỏ
File File bất kỳ (PDF, Word, Excel) Upload từ browser Chỉ capture được trên browser, mobile chỉ đọc
Signature Chữ ký điện tử Touch-based signature pad Lưu dạng inline image trong spreadsheet
Drawing Vẽ tự do Drawing pad trong app Sketch, sơ đồ đơn giản
Video Video (.mpeg, YouTube) URL công khai Không hỗ trợ quay video trong app

Tips thực chiến:

  • AppSheet lưu ảnh dưới dạng URL công khai (Google Drive, Cloud Storage) hoặc tên file thuần nếu dùng AppSheet DB.
  • Signature cực kỳ hữu ích cho biên bản bàn giao, xác nhận nhận hàng, ký hợp đồng.
  • Để cho phép vẽ trên ảnh: Data → Columns → Edit → Display → Allow image annotation.

4.2.6 Nhóm 6: Communication Types (Kiểu Liên lạc)

Hai kiểu này biến dữ liệu thành hành động - bấm vào là gọi điện/gửi email ngay!

Kiểu Mô tả Hành động khi tap Lưu ý
Email Địa chỉ email Mở app Mail để soạn email mới Hỗ trợ auto-completion
Phone Số điện thoại Hiển thị option Gọi hoặc SMS AppSheet chỉ tự nhận format Bắc Mỹ

Tips thực chiến:

  • Email hỗ trợ auto-completion - người dùng gõ một phần email, hệ thống gợi ý từ danh sách có sẵn.
  • Với Phone VN (không phải format Bắc Mỹ), bạn cần khai báo thủ công kiểu Phone vì AppSheet không tự nhận.

4.2.7 Nhóm 7: Mappable Types (Kiểu Bản đồ)

Sức mạnh của GPS và bản đồ - dùng cho giao hàng, chấm công, field service.

Kiểu Mô tả Khi nào dùng Format
Address Địa chỉ đầy đủ Địa chỉ giao hàng, Địa chỉ khách hàng 123 Nguyễn Huệ, Q1, TPHCM, VN
LatLong Tọa độ GPS (Vĩ độ, Kinh độ) Check-in, Vị trí hiện tại 10.7769, 106.7009
XY Tọa độ trên ảnh tùy chỉnh Vị trí trên sơ đồ, Bản đồ indoor 50, 75 (50% từ trái, 75% từ trên)

Tips thực chiến về Address:

  • Đặt tên cột chứa từ "Address" để AppSheet tự nhận (VD: Customer Address, Billing Address).
  • Có thể tách thành nhiều cột (Street, City, State, Country, Zip) → AppSheet tự động tạo Computed Address.
  • Nếu có nhiều địa chỉ, đặt prefix: Home Street, Home City vs Work Street, Work City.

Tips thực chiến về LatLong:

  • LatLong + ChangeLocation = Tự động ghi lại vị trí GPS khi có thay đổi → Check-in chấm công.
  • Xem mẫu: Calculate distances sample app.

4.2.8 Nhóm 8: Change Types (Kiểu Theo dõi Thay đổi)

Đây là nhóm "thông minh" - tự động cập nhật khi có thay đổi, không cần user nhập liệu.

Kiểu Mô tả Tự động ghi lại Ví dụ sử dụng
ChangeCounter Đếm số lần chỉnh sửa +1 mỗi lần edit Theo dõi version, số lần cập nhật
ChangeLocation Vị trí GPS lúc chỉnh sửa Tọa độ hiện tại Chấm công, Giao hàng
ChangeTimestamp Thời điểm chỉnh sửa DateTime hiện tại Last Modified, Completed At
Update row timestamp Timestamp cập nhật row (AppSheet DB) Tự động bởi hệ thống Audit trail

Tips thực chiến:

  • ChangeTimestamp có thể cấu hình chỉ kích hoạt khi một cột cụ thể thay đổi!
    • VD: Khi [Status] đổi thành "Done" → cột [CompletedAt] tự động ghi timestamp.
    • Cấu hình: Data → Columns → Edit → Update behavior.
  • Nếu app offline, ChangeTimestamp ghi thời điểm thay đổi thực sự, không phải thời điểm sync.

4.2.9 Nhóm 9: Show Types (Kiểu Hiển thị)

Đây là kiểu đặc biệt - cột trống trong spreadsheet, chỉ dùng để cải thiện giao diện form và detail view.

Kiểu Mô tả Khi nào dùng
Show Hiển thị nội dung tĩnh Nhúng hình ảnh, video, separator, hướng dẫn

Tips thực chiến:


4.2.10 Nhóm 10: Other Types (Kiểu Khác)

Các kiểu đặc biệt cho những use case nâng cao.

Kiểu Mô tả Khi nào dùng
URL Địa chỉ web Link website, Link tài liệu
App Link đến app khác hoặc view khác Deep link, Navigation
Multi Column Key Khóa tổng hợp từ nhiều cột Composite primary key

Tips thực chiến về URL:

  • URL có 2 phần: hyperlink address (https://google.com) và display text (Bấm vào đây).
  • Cấu hình display text: Data → Columns → Edit → Display → Content.

4.3 Bảng Tổng hợp Nhanh: Khi nào dùng kiểu nào?

Mục đích Kiểu nên dùng Đừng dùng
Lưu tên người Name Text chung chung
Ghi chú dài LongText Text (không xuống dòng được)
Số lượng (nguyên) Number Decimal (thừa)
Tiền tệ Price Number hoặc Decimal
Phần trăm Percent Decimal (khó đọc)
Ngày sinh Date DateTime (thừa giờ)
Check-in DateTime Date (thiếu giờ)
Trạng thái cố định Enum Text (dễ gõ sai)
Tags/Skills EnumList Text với comma (khó query)
Email có thể bấm gửi Email Text
SĐT có thể bấm gọi Phone Text hoặc Number
Ảnh chụp Image URL thủ công
Chữ ký Signature Image (không có pad)
Vị trí GPS LatLong Text
Địa chỉ giao hàng Address Text
Tham chiếu bảng khác Ref Text chứa ID (mất liên kết)
Thời điểm cập nhật ChangeTimestamp DateTime + formula (phức tạp)

4.4 Google Sheets vs AppSheet Database vs SQL

Đặc điểm Google Sheets AppSheet Database Cloud SQL
Chi phí Miễn phí Miễn phí (trong gói) Tốn phí Server
Dung lượng < 100k dòng < 50k dòng/bảng Hàng triệu dòng
Tốc độ Sync Trung bình Nhanh Rất nhanh
Chỉnh sửa tay Rất dễ Khá dễ Cần kiến thức SQL
Phù hợp SME, Mới bắt đầu SME, Cần tốc độ Doanh nghiệp lớn

4.5 Lưu ý Tương thích giữa AppSheet và Nguồn dữ liệu

Khi AppSheet "đọc" một bảng từ Google Sheets, PostgreSQL hay MySQL, nó tự động ánh xạ (map) kiểu dữ liệu về dạng AppSheet Type. Nếu ánh xạ sai hoặc thiếu ràng buộc, bạn sẽ gặp lỗi "Data type mismatch".

Kiểu SQL / Sheets AppSheet tự nhận Validation nên bổ sung Lưu ý
VARCHAR(255) / TEXT Text Valid_If = LEN([Column]) <= 255 PostgreSQL sẽ cắt phần dư, AppSheet không báo.
NUMERIC(10,2) / Currency Price Type = Price, Currency = "VND" Nếu Sheets không định dạng tiền, AppSheet vẫn hiển thị "₫" nhưng SQL sẽ lưu số thuần → cần đồng bộ decimal.
INT / INTEGER Number Type = Number, Min = 0, Max = 2147483647 Tránh lỗi "out of range" từ SQL.
TIMESTAMP / DateTime DateTime Initial value = NOW() Google Sheets chỉ có DateTime dạng text → đảm bảo format yyyy-mm-dd hh:mm:ss để PostgreSQL chấp nhận.
BOOLEAN Yes/No Không cần thêm Sheets dùng TRUE/FALSE; AppSheet dùng Y/N nhưng vẫn tương thích.
ENUM trong PostgreSQL Không tự nhận → Text Tạo Enum trong AppSheet + CHECK constraint trong SQL Đảm bảo 2 đầu khớp danh sách values.
ARRAY (PostgreSQL) EnumList Type = EnumList, AllowOtherValues = false AppSheet lưu dạng text có phân cách dấu phẩy.
GEOMETRY(Point) / PostGIS LatLong Type = LatLong AppSheet gửi "lat,long" text; cần hàm chuyển đổi trong PostgreSQL.

4.5.1 Quy trình "3 bước" tránh xung đột

  1. Thiết kế DB trước: Đặt kiểu cột, CHECK, UNIQUE, NOT NULL ở SQL/Sheets.
  2. Regenerate: Vào Data → Tables → Regenerate trong AppSheet để ánh xạ lại.
  3. Thêm AppSheet-Only validation: Valid_If, Required_If, Initial value, App formula để lớp UI khớp logic hơn SQL.

4.6 Thực hành (Guided Practice)

Mục tiêu: Cấu hình Data Type chuẩn cho dự án CRM.

4.6.1 Cấu hình Bảng Customers

  1. Vào Tab Data -> Chọn bảng Customers.
  2. Bấm vào nút View Columns.
  3. Tìm cột Phone: Đổi Type sang Phone. (Để trên điện thoại bấm vào là gọi ngay).
  4. Tìm cột Email: Đổi Type sang Email.
  5. Tìm cột Address: Đổi Type sang Address (Để hiện icon bản đồ).
  6. Tìm cột Avatar: Đổi Type sang Image.

4.6.2 Cấu hình Bảng Opportunities

  1. Vào bảng Opportunities.
  2. Tìm cột Stage:
    • Đổi Type sang Enum.
    • Bấm vào biểu tượng cây bút (Edit).
    • Mục Values, bấm Add để thêm lần lượt: New, Qualified, Proposal, Won, Lost.
    • Mục Input mode: Chọn Buttons (để hiện nút bấm cho nhanh) hoặc Dropdown.
  3. Tìm cột Amount:
    • Đổi Type sang Price.
    • Mục Currency symbol: Điền hoặc VNĐ.

4.6.3 Lưu và Kiểm tra

  1. Bấm nút Save màu xanh ở góc phải trên cùng.
  2. Mở giao diện Preview bên phải, thử tạo mới một Customer và một Opportunity để xem sự thay đổi (Có nút chọn Stage, có ô chụp ảnh...).

4.7 Vận dụng (Your Project)

Câu hỏi:

  1. Chuẩn hóa dữ liệu nhập: Trong quy trình của bạn, có chỗ nào nhân viên hay gõ sai chính tả không? (Ví dụ: "Hà Nội", "HN", "hà nội"). -> Hãy chuyển nó thành Enum để họ chỉ được chọn.
  2. Bằng chứng công việc: Bạn có cần nhân viên chụp ảnh bằng chứng (giao hàng xong, lỗi kỹ thuật, biên lai) không? -> Hãy thêm cột Image.
  3. Xác nhận: Bạn có cần chữ ký xác nhận của khách hàng khi bàn giao không? -> Hãy thêm cột Signature.
  4. Theo dõi tự động: Bạn có cần biết ai sửa gì, lúc nào, ở đâu không? -> Hãy thêm ChangeTimestampChangeLocation.

4.8 Tổng kết: Nền móng vững chắc cho ứng dụng

Bạn đã hoàn thành việc "dạy" AppSheet hiểu từng cột dữ liệu là gì (Text, Number, hay Image) để nó hiển thị đúng trên mobile. Việc chọn đúng Data Type ngay từ đầu giống như việc bạn chọn đúng vật liệu để xây nhà vậy - nó quyết định độ bền vững và tiện dụng của ngôi nhà đó.

Tuy nhiên, nếu để ý kỹ, bạn sẽ thấy các bảng dữ liệu của chúng ta (Khách hàng, Sản phẩm, Đơn hàng) vẫn đang đứng cô đơn, rời rạc. Sức mạnh thực sự của một hệ thống quản trị nằm ở sự kết nối. Trong chương 5, chúng ta sẽ học cách buộc các bảng này lại với nhau bằng những "sợi dây" vô hình nhưng cực kỳ bền chặt - đó chính là Quan hệ dữ liệu (Data Relationships).


4.9 Tổng kết: Nền móng vững chắc cho ứng dụng

Hiểu đúng và chọn đúng kiểu dữ liệu (Data Type) là bước đầu tiên để App chạy mượt và đúng logic.

  • Bạn đã biết cách dùng Enum để tạo list cố định.
  • Bạn đã biết dùng ImageFile để lưu trữ tài liệu.

Nhưng sức mạnh thực sự của AppSheet nằm ở khả năng kết nối. Làm sao để nối bảng Khách hàng với Đơn hàng? Làm sao để từ Đơn hàng trỏ về Nhân viên phụ trách? Chương 5: "Quan hệ Dữ liệu (Data Relationships)" sẽ giải mã bí mật của các mối nối Ref thần thánh này.


4.10 Tài liệu tham khảo (Google Docs)