پساز اینکه دادههای Crashlytics و (اختیاری) جلسههای Firebase را به BigQuery برونبُرد کردید، میتوانید کار با دادهها را شروع کنید:
تجزیهوتحلیل دادهها بااستفاده از پُرسمانهای SQL
میتوانید روی دادههای Crashlytics خود پُرسمان اجرا کنید تا گزارشها و خلاصههای سفارشی تولید کنید. ازآنجاییکه این نوع گزارشهای سفارشی در داشبورد Crashlytics کنسول Firebase دردسترس نیستند، میتوانند تحلیل و درک شما از دادههای خرابی را تکمیل کنند. مجموعه پُرسمانهای نمونه را در ادامه این صفحه ببینید.ترکیب دادهها از مجموعههای داده مختلف
برای مثال، اگر هنگام راهاندازی برونبرد دادهها Crashlytics انتخاب کنید دادههای جلسههای Firebase را صادر کنید، میتوانید درک خود را از کاربران بدون خرابی و جلسههای بدون خرابی بهبود دهید (به پُرسمان نمونه مراجعه کنید). همچنین میتوانید دادهها را از محصولات مختلف 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;
مثال ۱۰: ۵ مشکل برتر از «تاریخ» تا امروز
همچنین میتوانید جدولهای دستهای و همزمان را با پُرسمان پیوند ترکیب کنید تا
اطلاعات همزمان را به دادههای دستهای مطمئن اضافه کنید. ازآنجاییکه 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، داشبوردهای سفارشی بسازید.
با طرحواره مجموعه داده برای دادههای صادرشده آشنا شوید.