پساز صادر کردن دادههای جلسات Crashlytics و (اختیاری) Firebase به BigQuery، میتوانید کار با دادهها را شروع کنید:
تجزیهوتحلیل دادهها بااستفاده از پُرسمانهای SQL
میتوانید پُرسمانهایی را روی دادههای Crashlytics اجرا کنید تا گزارشها و خلاصههای سفارشی تولید کنید. ازآنجاییکه این نوع گزارشهای سفارشی در داشبورد Crashlytics کنسول Firebase دردسترس نیستند، میتوانند مکمل تحلیل و درک شما از دادههای خرابی باشند. مجموعه نمونه پُرسمانها را در ادامه این صفحه ببینید.پیوستن دادهها از مجموعهدادههای مختلف
برای مثال، اگر هنگام راهاندازی صادر کردن دادهها، صادر کردن دادههای جلسههای Firebase را انتخاب کنید، میتوانید درک بهتری از کاربران بدون خرابی و جلسههای بدون خرابی داشته باشید (نمونه پُرسمان را ببینید).Crashlytics همچنین میتوانید دادهها را از محصولات مختلف Firebase (مانند Performance Monitoring) یا از Google Analytics صادر کنید و سپس آن دادهها را در BigQuery با دادههای Crashlytics خود بپیوندید و تجزیهوتحلیل کنید.ایجاد نما
بااستفاده از میانای کاربر BigQuery، میتوانید نما ایجاد کنید که جدول مجازی تعریفشده با پُرسمان SQL است. برای دستورالعملهای دقیق درباره انواع مختلف نماها و نحوه ایجاد آنها، به BigQuery اسناد مراجعه کنید.
برای جزئیات بیشتر درباره طرحواره مجموعه داده، طرحواره مجموعه داده برای دادههای صادرشده در BigQuery را ببینید.
آشنایی با BigQuery SQL
با انواع پُرسمانهایی که میتوانید اجرا کنید، ازجمله کارهای پُرسمان تعاملی، کارهای پُرسمان دستهای، و کارهای پُرسمان پیوسته آشنا شوید.
درباره عبارتهای پشتیبانیشده و گویشهای SQL در BigQuery بیشتر بدانید.
با نحوه نوشتن پُرسمان بااستفاده از دستیار مجهز به هوش مصنوعی (Gemini) آشنا شوید.
نمونه پُرسمانها برای دادههای Crashlytics
این بخش چند موقعیت و پُرسمان نمونه ارائه میدهد که نشان میدهد چگونه میتوانید از BigQuery SQL با دادههای صادرشده Crashlytics و دادههای جلسات Firebase استفاده کنید.
- محاسبه سنجههای بدون خرابی بااستفاده از دادههای جلسههای Firebase
- خرابیها براساس روز
- یافتن فراگیرترین خرابیها
- ۱۰ دستگاه برتر با بیشترین خرابی
- فیلتر کردن براساس کلید سفارشی
- استخراج شناسههای کاربر
- پیدا کردن همه کاربرانی که با مشکل خرابی خاصی مواجه هستند
- تعداد کاربرانی که تحت تأثیر مشکل خرابی قرار گرفتهاند، تفکیکشده براساس کشور
- ۵ مشکل برتر تا این لحظه از امروز
- ۵ مشکل برتر از DATE، ازجمله امروز
مثال ۱: محاسبه سنجههای بدون خرابی بااستفاده از دادههای جلسههای Firebase
در جدیدترین نسخهتان، بازسازی عمدهای در برنامهتان راهاندازی کردید تا ازکارافتادنها را در مسیر قطعی کاربر برطرف کنید. مرورهای عالی از کاربران دریافت کردهاید، اما میخواهید شواهد کمی داشته باشید که نشان دهد برنامهتان نسبتبه قبل پایدارتر است.
سنجههای بدون خرابی میتواند به ارائه این اطلاعات کمک کند. این سنجهها معیارهای مهمی هستند که به شما کمک میکنند سلامت کلی برنامهتان را درک کنید. با دادههای جلسههای Firebase و رویدادهای Crashlytics، میتوانید این سنجهها را با پُرسمانی ساده محاسبه کنید.
در اینجا نمونه پرسمانهایی برای برنامه Android آورده شده است. برای برنامه iOS، از شناسه دسته نرمافزاری آن
و IOS (بهجای نام بسته و ANDROID) استفاده کنید.
کاربرانبدون تجربه خرابی برای نسخهای خاص:
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
جلسههای بدون خرابی در هفته گذشته (۱۶۸ ساعت گذشته):
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
مثال ۲: خرابیها براساس روز
پساز تلاش برای رفع هرچه بیشتر اشکالها، فکر میکنید تیمتان بالاخره آماده است برنامه جدید همرسانی عکس را راهاندازی کند. قبلاز انجام این کار، میخواهید تعداد خرابیهای روزانه را در ماه گذشته بررسی کنید تا مطمئن شوید که رفع اشکالهایتان باعث شده است برنامه درطول زمان پایدارتر شود.
در اینجا نمونه پُرسمانی برای برنامه Android آورده شده است. برای برنامه iOS، از شناسه دسته نرمافزاری آن
و IOS (بهجای نام بسته و 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;
مثال ۳: پیدا کردن فراگیرترین خرابیها
برای اولویتبندی صحیح برنامههای تولید، میخواهید ۱۰ مورد از فراگیرترین خرابیها را در برنامهتان پیدا کنید. پُرسمانی تولید میکنید که نقاط داده مربوطه را ارائه میدهد.
در اینجا نمونه پُرسمانی برای برنامه Android آورده شده است. برای برنامه iOS، از شناسه دسته نرمافزاری آن
و IOS (بهجای نام بسته و 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;
مثال ۴: ۱۰ دستگاه برتر ازنظر خرابی
پاییز فصل تلفنهای جدید است! شرکت شما میداند که این بهمعنای شروع فصل مشکلات جدید مختص دستگاه نیز هست — بهویژه برای Android. برای پیشی گرفتن از نگرانیهای قریبالوقوع سازگاری، پُرسمانی را تنظیم میکنید که ۱۰ دستگاهی را که بیشترین خرابی را در هفته گذشته (۱۶۸ ساعت) تجربه کردهاند شناسایی میکند.
در اینجا نمونه پُرسمانی برای برنامه Android آورده شده است. برای برنامه iOS، از شناسه دسته نرمافزاری آن
و IOS (بهجای نام بسته و 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;
مثال ۵: فیلتر کردن براساس کلید سفارشی
شما توسعهدهنده بازی هستید و میخواهید بدانید کدام سطح از بازی شما بیشترین خرابی را تجربه میکند.
برای کمک به ردیابی آن آمار، یک کلید Crashlytics سفارشی
(iOS+ |
Android |
Flutter |
Unity
)
بهنام current_level تنظیم میکنید و هربار که کاربر به سطح جدیدی میرسد، آن را بهروز میکنید.
Swift
Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
Objective-C
CrashlyticsKit setIntValue:3 forKey:@"current_level";
جاوا
Crashlytics.setInt("current_level", 3);
با آن کلید در صادر کردن به BigQuery، میتوانید پُرسمانی بنویسید تا
توزیع مقادیر current_level مرتبط با هر رویداد خرابی را گزارش کنید.
در اینجا نمونه پُرسمانی برای برنامه Android آورده شده است. برای برنامه iOS، از شناسه دسته نرمافزاری آن
و IOS (بهجای نام بسته و 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 DESCمثال ۶: استخراج شناسههای کاربر
برنامه Android در دسترسی زودرس دارید. اکثر کاربران شما آن را دوست دارند، اما سه نفر تعداد غیرمعمولی از خرابیها را تجربه کردهاند. برای پی بردن به ریشه مشکل، پُرسمانی مینویسید که همه رویدادهای خرابی را برای آن کاربران بااستفاده از شناسه کاربر آنها استخراج میکند.
در اینجا نمونه پُرسمانی برای برنامه Android آورده شده است. برای برنامه iOS، از شناسه دسته نرمافزاری آن
و IOS (بهجای نام بسته و 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
مثال ۷: پیدا کردن همه کاربرانی که با مشکل خرابی خاصی مواجه هستند
تیم شما بهطور تصادفی یک اشکال بحرانی را برای گروهی از آزمایشکنندگان بتا منتشر کرده است. تیم شما توانست از پُرسمان نمونه «یافتن فراگیرترین خرابیها» در بالا برای شناسایی شناسه مشکل خرابی خاص استفاده کند. اکنون تیم شما میخواهد پُرسمانی را اجرا کند تا فهرست کاربران برنامه را که تحتتأثیر این خرابی قرار گرفتهاند استخراج کند.
در اینجا نمونه پُرسمانی برای برنامه Android آورده شده است. برای برنامه iOS، از شناسه دسته نرمافزاری آن
و IOS (بهجای نام بسته و 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;مثال ۸: تعداد کاربرانی که تحتتأثیر مشکل خرابی قرار گرفتهاند، تفکیکشده براساس کشور
تیم شما درطول عرضه نسخه پخش جدید، اشکال بحرانیای را شناسایی کرده است. توانستید از پُرسمان مثال «پیدا کردن فراگیرترین خرابیها» در بالا برای شناسایی شناسه مشکل خرابی خاص استفاده کنید. اکنون تیم شما میخواهد ببیند آیا این خرابی به کاربران در کشورهای مختلف در سراسر جهان گسترش یافته است یا نه.
برای نوشتن این پُرسمان، تیم شما باید کارهای زیر را انجام دهد:
صادر کردن دادههای Google Analytics به BigQuery را فعال کنید. صادر کردن دادههای پروژه به BigQuery را ببینید.
برنامهتان را بهروز کنید تا شناسه کاربر را به هر دو کیت توسعه نرمافزار Google Analytics و کیت توسعه نرمافزار Crashlytics منتقل کند.
Swift
Crashlytics.sharedInstance().setUserIdentifier("123456789"); Analytics.setUserID("123456789");Objective-C
CrashlyticsKit setUserIdentifier:@"123456789"; FIRAnalytics setUserID:@"12345678 9";جاوا
Crashlytics.setUserIdentifier("123456789"); mFirebaseAnalytics.setUserId("123456789");پُرسمانی بنویسید که از فیلد شناسه کاربر برای پیوستن رویدادها در مجموعه داده Google Analytics با خرابیها در مجموعه داده Crashlytics استفاده میکند.
در اینجا نمونهای از پُرسمان برای برنامه Android آورده شده است. برای برنامه iOS، از شناسه دسته نرمافزاری آن و
IOS(بهجای نام بسته و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
مثال ۹: ۵ مشکل برتر تا این لحظه از امروز
در اینجا نمونه پُرسمانی برای برنامه Android آورده شده است. برای برنامه iOS، از شناسه دسته نرمافزاری آن
و IOS (بهجای نام بسته و 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;
مثال ۱۰: ۵ مشکل برتر از DATE، ازجمله امروز
همچنین میتوانید جدولهای دستهای و همزمان را با پُرسمان پیونددهی ترکیب کنید تا
اطلاعات همزمان را به دادههای دستهای قابلاعتماد اضافه کنید. ازآنجاییکه event_id کلید اصلی است، میتوانید از DISTINCT event_id برای حذف موارد تکراری رویدادهای مشترک از دو جدول استفاده کنید.
در اینجا نمونه پُرسمانی برای برنامه Android آورده شده است. برای برنامه iOS، از شناسه دسته نرمافزاری آن
و IOS (بهجای نام بسته و 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;
قدم بعدی چیست؟
داشبوردهای سفارشی بسازید و از دادههای صادرشده و سرویسهای مختلف Google Cloud مانند Data Studio استفاده کنید.
با طرح مجموعه داده برای دادههای صادرشده آشنا شوید.