Sau khi xuất dữ liệu Crashlytics và (không bắt buộc) dữ liệu phiên Firebase vào BigQuery, bạn có thể bắt đầu làm việc với dữ liệu:
Phân tích dữ liệu bằng truy vấn SQL
Bạn có thể chạy truy vấn trên dữ liệu Crashlytics để tạo báo cáo và bản tóm tắt tuỳ chỉnh. Vì các loại báo cáo tuỳ chỉnh này không có trong trang tổng quan Crashlytics của bảng điều khiển Firebase, nên chúng có thể bổ sung cho hoạt động phân tích và hiểu biết của bạn về dữ liệu sự cố. Xem bộ sưu tập các truy vấn mẫu ở phần sau trên trang này.Kết hợp dữ liệu từ nhiều tập dữ liệu
Ví dụ: nếu chọn xuất dữ liệu phiên Firebase khi thiết lập tính năng xuất dữ liệu Crashlytics, thì bạn có thể hiểu rõ hơn về số người dùng không gặp sự cố và số phiên không gặp sự cố (xem ví dụ về truy vấn). Ngoài ra, bạn có thể xuất dữ liệu từ nhiều sản phẩm của Firebase (chẳng hạn như Performance Monitoring) hoặc từ Google Analytics, sau đó kết hợp và phân tích dữ liệu đó trong BigQuery bằng dữ liệu Crashlytics của bạn.Tạo khung hiển thị
Khi sử dụng giao diện người dùng BigQuery, bạn có thể tạo một khung hiển thị. Đây là một bảng ảo do một truy vấn SQL xác định. Để biết hướng dẫn chi tiết về các loại chế độ xem và cách tạo các chế độ xem đó, hãy xem tài liệu về BigQuery.
Để biết thông tin chi tiết về giản đồ tập dữ liệu, hãy xem phần Giản đồ tập dữ liệu cho dữ liệu đã xuất trong BigQuery.
Tìm hiểu về SQL BigQuery
Tìm hiểu về các loại truy vấn bạn có thể chạy, bao gồm cả công việc truy vấn tương tác, công việc truy vấn hàng loạt và công việc truy vấn liên tục.
Tìm hiểu về các câu lệnh và phương ngữ SQL được hỗ trợ trong BigQuery.
Tìm hiểu cách viết cụm từ tìm kiếm bằng tính năng hỗ trợ dựa trên AI (Gemini).
Ví dụ về truy vấn cho dữ liệu Crashlytics
Phần này cung cấp một số tình huống ví dụ và truy vấn ví dụ minh hoạ cách bạn có thể sử dụng SQL BigQuery với dữ liệu Crashlytics đã xuất và dữ liệu phiên Firebase.
- Tính toán các chỉ số không có lỗi bằng dữ liệu phiên Firebase
- Số vụ gặp sự cố theo ngày
- Tìm những sự cố phổ biến nhất
- 10 thiết bị gặp sự cố hàng đầu
- Lọc theo khoá tuỳ chỉnh
- Trích xuất mã nhận dạng người dùng
- Tìm tất cả người dùng gặp phải một vấn đề cụ thể về sự cố
- Số người dùng bị ảnh hưởng bởi vấn đề về sự cố, được phân tích theo quốc gia
- 5 vấn đề hàng đầu cho đến thời điểm này trong ngày
- 5 vấn đề hàng đầu kể từ DATE, tính cả ngày hôm nay
Ví dụ 1: Tính toán các chỉ số không gặp sự cố bằng dữ liệu phiên trong Firebase
Trong phiên bản mới nhất, bạn đã tiến hành một đợt cải tiến lớn cho ứng dụng của mình để giải quyết các sự cố trong một hành trình quan trọng của người dùng. Bạn nhận được những bài đánh giá xuất sắc từ người dùng, nhưng bạn muốn có bằng chứng định lượng cho thấy ứng dụng của bạn ổn định hơn trước.
Các chỉ số không gặp sự cố có thể giúp cung cấp thông tin này. Đây là những chỉ số đo lường quan trọng giúp bạn nắm được tình trạng tổng thể của ứng dụng. Với dữ liệu phiên và sự kiện Crashlytics trên Firebase, bạn có thể tính toán những chỉ số này bằng một truy vấn cơ bản.
Sau đây là các truy vấn mẫu cho một ứng dụng Android. Đối với ứng dụng iOS, hãy sử dụng mã nhận dạng gói và IOS (thay vì tên gói và ANDROID).
Số người dùng không gặp sự cố đối với một phiên bản cụ thể:
SELECT TIMESTAMP_TRUNC(crashlytics.event_timestamp,DAY) AS event_date, (1 - (COUNT (DISTINCT installation_uuid) / COUNT (DISTINCT instance_id))) AS CFU FROM `PROJECT_ID.firebase_sessions.PACKAGE_NAME_ANDROID` AS sessions LEFT JOIN `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` AS crashlytics ON TIMESTAMP_TRUNC(sessions.event_timestamp,DAY) = TIMESTAMP_TRUNC(crashlytics.event_timestamp,DAY) WHERE crashlytics.error_type="FATAL" AND crashlytics.application.display_version="APP_VERSION" AND sessions.application.display_version = "APP_VERSION" GROUP BY event_date ORDER BY event_date
Số phiên không gặp sự cố trong tuần qua (168 giờ qua):
SELECT TIMESTAMP_TRUNC(crashlytics.event_timestamp,DAY) AS event_date, (1 - (COUNT (DISTINCT crashlytics.firebase_session_id) / COUNT (DISTINCT sessions.session_id))) AS CFS FROM `PROJECT_ID.firebase_sessions.PACKAGE_NAME_ANDROID` AS sessions LEFT JOIN `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` AS crashlytics ON TIMESTAMP_TRUNC(sessions.event_timestamp,DAY) = TIMESTAMP_TRUNC(crashlytics.event_timestamp,DAY) WHERE crashlytics.error_type="FATAL" AND _PARTITIONTIME >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 168 HOUR) AND _PARTITIONTIME < CURRENT_TIMESTAMP() GROUP BY event_date ORDER BY event_date
Ví dụ 2: Số lượt gặp sự cố theo ngày
Sau khi cố gắng khắc phục nhiều lỗi nhất có thể, bạn cho rằng nhóm của mình cuối cùng đã sẵn sàng ra mắt ứng dụng chia sẻ ảnh mới. Trước khi làm việc đó, bạn muốn kiểm tra số lượng sự cố mỗi ngày trong tháng qua để đảm bảo rằng việc kiểm thử lỗi đã giúp ứng dụng ổn định hơn theo thời gian.
Dưới đây là một ví dụ về truy vấn cho ứng dụng Android. Đối với ứng dụng iOS, hãy sử dụng mã nhận dạng gói và IOS (thay vì tên gói và ANDROID).
SELECT COUNT(DISTINCT event_id) AS number_of_crashes, FORMAT_TIMESTAMP("%F", event_timestamp) AS date_of_crashes FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` GROUP BY date_of_crashes ORDER BY date_of_crashes DESC LIMIT 30;
Ví dụ 3: Tìm các sự cố phổ biến nhất
Để ưu tiên đúng cách các kế hoạch sản xuất, bạn cần tìm ra 10 sự cố phổ biến nhất trong ứng dụng của mình. Bạn tạo một truy vấn cung cấp các điểm dữ liệu liên quan.
Dưới đây là một ví dụ về truy vấn cho ứng dụng Android. Đối với ứng dụng iOS, hãy sử dụng mã nhận dạng gói và IOS (thay vì tên gói và ANDROID).
SELECT DISTINCT issue_id, COUNT(DISTINCT event_id) AS number_of_crashes, COUNT(DISTINCT installation_uuid) AS number_of_impacted_user, blame_frame.file, blame_frame.line FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` WHERE event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(),INTERVAL 168 HOUR) AND event_timestamp < CURRENT_TIMESTAMP() GROUP BY issue_id, blame_frame.file, blame_frame.line ORDER BY number_of_crashes DESC LIMIT 10;
Ví dụ 4: 10 thiết bị gặp sự cố hàng đầu
Mùa thu là mùa điện thoại mới! Công ty của bạn biết rằng điều này cũng có nghĩa là mùa giải mới của các vấn đề cụ thể về thiết bị đã đến – đặc biệt là đối với Android. Để giải quyết những lo ngại về khả năng tương thích sắp xảy ra, bạn đã tổng hợp một truy vấn xác định 10 thiết bị gặp nhiều sự cố nhất trong tuần qua (168 giờ).
Dưới đây là một ví dụ về truy vấn cho ứng dụng Android. Đối với ứng dụng iOS, hãy sử dụng mã nhận dạng gói và IOS (thay vì tên gói và ANDROID).
SELECT device.model, COUNT(DISTINCT event_id) AS number_of_crashes FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` WHERE event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 168 HOUR) AND event_timestamp < CURRENT_TIMESTAMP() GROUP BY device.model ORDER BY number_of_crashes DESC LIMIT 10;
Ví dụ 5: Lọc theo khoá tuỳ chỉnh
Bạn là một nhà phát triển trò chơi và muốn biết cấp độ nào trong trò chơi của bạn gặp nhiều sự cố nhất.
Để giúp theo dõi số liệu thống kê đó, bạn đặt một khoá Crashlytics tuỳ chỉnh (iOS+ | Android | Flutter | Unity) có tên là current_level và cập nhật khoá này mỗi khi người dùng đạt đến một cấp độ mới.
Swift
Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
Objective-C
CrashlyticsKit setIntValue:3 forKey:@"current_level";
Java
Crashlytics.setInt("current_level", 3);
Với khoá đó trong tệp xuất sang BigQuery, bạn có thể viết một truy vấn để báo cáo mức phân phối các giá trị current_level được liên kết với từng sự kiện gặp sự cố.
Dưới đây là một ví dụ về truy vấn cho ứng dụng Android. Đối với ứng dụng iOS, hãy sử dụng mã nhận dạng gói và IOS (thay vì tên gói và ANDROID).
SELECT
COUNT(DISTINCT event_id) AS num_of_crashes,
value
FROM
`PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
UNNEST(custom_keys)
WHERE
key = "current_level"
GROUP BY
key,
value
ORDER BY
num_of_crashes DESCVí dụ 6: Trích xuất mã nhận dạng người dùng
Bạn có một ứng dụng Android đang ở giai đoạn tiếp cận sớm. Hầu hết người dùng đều thích ứng dụng của bạn, nhưng 3 người dùng đã gặp phải số lượng sự cố bất thường. Để tìm ra nguyên nhân của vấn đề, bạn viết một truy vấn để kéo tất cả các sự kiện gặp sự cố của những người dùng đó bằng cách sử dụng mã nhận dạng người dùng của họ.
Dưới đây là một ví dụ về truy vấn cho ứng dụng Android. Đối với ứng dụng iOS, hãy sử dụng mã nhận dạng gói và IOS (thay vì tên gói và ANDROID).
SELECT *
FROM
`PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
WHERE
user.id IN ("USER_ID_1", "USER_ID_2", "USER_ID_3")
ORDER BY
user.id
Ví dụ 7: Tìm tất cả người dùng gặp phải một vấn đề cụ thể về sự cố
Nhóm của bạn vô tình phát hành một lỗi nghiêm trọng cho một nhóm người kiểm thử beta. Nhóm của bạn có thể sử dụng truy vấn trong ví dụ"Tìm lỗi hỏng phổ biến nhất" ở trên để xác định mã vấn đề cụ thể về lỗi hỏng. Giờ đây, nhóm của bạn muốn chạy một truy vấn để trích xuất danh sách người dùng ứng dụng bị ảnh hưởng bởi sự cố này.
Dưới đây là một ví dụ về truy vấn cho ứng dụng Android. Đối với ứng dụng iOS, hãy sử dụng mã nhận dạng gói và IOS (thay vì tên gói và ANDROID).
SELECT user.id as user_id
FROM
`PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
WHERE
issue_id = "ISSUE_ID"
AND application.display_version = "APP_VERSION"
AND user.id != ""
ORDER BY
user.id;Ví dụ 8: Số người dùng chịu ảnh hưởng của một vấn đề về sự cố, được phân tích theo quốc gia
Nhóm của bạn đã phát hiện thấy một lỗi nghiêm trọng trong quá trình phát hành một bản phát hành mới. Bạn có thể sử dụng truy vấn trong ví dụ"Tìm các sự cố phổ biến nhất" ở trên để xác định mã vấn đề cụ thể về sự cố. Giờ đây, nhóm của bạn muốn biết liệu sự cố này có lan rộng đến người dùng ở nhiều quốc gia trên thế giới hay không.
Để viết truy vấn này, nhóm của bạn cần làm những việc sau:
Bật tính năng xuất dữ liệu Google Analytics sang BigQuery. Xem phần Xuất dữ liệu dự án sang BigQuery.
Cập nhật ứng dụng của bạn để truyền mã nhận dạng người dùng vào cả SDK Google Analytics và SDK Crashlytics.
Swift
Crashlytics.sharedInstance().setUserIdentifier("123456789"); Analytics.setUserID("123456789");Objective-C
CrashlyticsKit setUserIdentifier:@"123456789"; FIRAnalytics setUserID:@"12345678 9";Java
Crashlytics.setUserIdentifier("123456789"); mFirebaseAnalytics.setUserId("123456789");Viết một truy vấn sử dụng trường mã nhận dạng người dùng để kết hợp các sự kiện trong tập dữ liệu Google Analytics với các sự cố trong tập dữ liệu Crashlytics.
Sau đây là một ví dụ về truy vấn cho ứng dụng Android. Đối với ứng dụng iOS, hãy dùng mã nhận dạng gói và
IOS(thay vì tên gói vàANDROID).SELECT DISTINCT c.issue_id, a.geo.country, COUNT(DISTINCT c.user.id) as num_users_impacted FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` c INNER JOIN `PROJECT_ID.analytics_TABLE_NAME.events_*` a on c.user.id = a.user_id WHERE c.issue_id = "ISSUE_ID" AND a._TABLE_SUFFIX BETWEEN '20190101' AND '20200101' GROUP BY c.issue_id, a.geo.country, c.user.id
Ví dụ 9: 5 vấn đề hàng đầu từ đầu ngày đến giờ
Dưới đây là một ví dụ về truy vấn cho ứng dụng Android. Đối với ứng dụng iOS, hãy sử dụng mã nhận dạng gói và IOS (thay vì tên gói và ANDROID).
SELECT issue_id, COUNT(DISTINCT event_id) AS events FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID_REALTIME` WHERE DATE(event_timestamp) = CURRENT_DATE() GROUP BY issue_id ORDER BY events DESC LIMIT 5;
Ví dụ 10: 5 vấn đề hàng đầu kể từ NGÀY, tính cả hôm nay
Bạn cũng có thể kết hợp các bảng theo lô và theo thời gian thực bằng một truy vấn kết hợp để thêm thông tin theo thời gian thực vào dữ liệu theo lô đáng tin cậy. Vì event_id là khoá chính, nên bạn có thể dùng DISTINCT event_id để loại bỏ mọi sự kiện trùng lặp trong hai bảng.
Dưới đây là một ví dụ về truy vấn cho ứng dụng Android. Đối với ứng dụng iOS, hãy sử dụng mã nhận dạng gói và IOS (thay vì tên gói và ANDROID).
SELECT issue_id, COUNT(DISTINCT event_id) AS events FROM ( SELECT issue_id, event_id, event_timestamp FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID_REALTIME` UNION ALL SELECT issue_id, event_id, event_timestamp FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`) WHERE event_timestamp >= PARSE_TIMESTAMP("%Y_%m_%d", "YYYY_MM_DD") GROUP BY issue_id ORDER BY events DESC LIMIT 5;
Tiếp theo là gì?
Tạo trang tổng quan tuỳ chỉnh bằng dữ liệu đã xuất và nhiều dịch vụ Google Cloud, chẳng hạn như Looker Studio.
Tìm hiểu về giản đồ tập dữ liệu cho dữ liệu được xuất.