您可以將 Crashlytics 資料匯出至 BigQuery 以便查詢及分析BigQuery 可讓您使用 BigQuery SQL 分析資料,並將資料匯出 並用於視覺化和自訂資訊主頁 用 Google 數據分析做研究
啟用 BigQuery Export
- 前往 整合 頁面。
- 在「BigQuery」資訊卡中,按一下「連結」。
- 按照畫面上的指示啟用 BigQuery。
將專案連結至 BigQuery 時:
- Firebase 會設定每天同步處理 Firebase 專案的資料 BigQuery。
- 根據預設,專案中的所有應用程式都會連結至 BigQuery 和所有應用程式 。個人中心 可管理該傳送資料的應用程式。
- Firebase 匯出現有資料的副本 至 BigQuery。每個連結的應用程式都會產生一個批次資料表,當中含有 每日同步的資料
- 如果啟用 Crashlytics BigQuery 串流匯出功能,所有已連結的應用程式 也有即時表格,其中包含 需要持續更新資料
如要停用 BigQuery Export 取消連結專案 。
哪些資料會匯出至 BigQuery?
Firebase Crashlytics 資料會匯出至名為「名稱」的 BigQuery 資料集
firebase_crashlytics
。根據預設,系統會在個別資料表中建立個別資料表
可為專案中每個應用程式建立 Crashlytics 資料集。Firebase 會將
表格,格式為
底線,以及結尾附加的平台名稱。
舉例來說,ID 為 com.google.test
的應用程式資料會在表格中
com_google_test_ANDROID
。這個批次資料表每天會更新一次。如果
您啟用 Crashlytics BigQuery 串流匯出、Firebase Crashlytics
資料也會即時串流至 com_google_test_ANDROID_REALTIME
。
表格中的每一列都代表應用程式發生的事件,包括 當機、一般錯誤和 ANR 事件
啟用 Crashlytics BigQuery 串流匯出功能
你可以透過以下項目,即時串流 Crashlytics 資料: BigQueryStreaming: 你可以使用 並用於任何需要即時資料的用途,例如在 即時資訊主頁、查看推出作業即時影像,或監控應用程式問題 觸發快訊和自訂工作流程
Crashlytics BigQuery 串流匯出功能不適用於 BigQuery 沙箱。
除了 就會擁有即時資料表以下說明 請留意資料表
批次資料表 | 即時資料表 |
---|---|
|
|
批次表格非常適合長期分析並找出變化趨勢 因為我們必須在寫入事件之前儲存資料,而且這些事件可以補充 資料表最多保留 30 天當我們將資料寫入即時資料表時, 立即寫入 BigQuery,因此很適合用於即時資訊主頁 自訂快訊您可以結合這兩個資料表與拼接查詢, 優點請參閱下方的「範例 9」查詢。
根據預設,即時資料表的分區到期時間為 30 天。目的地: 要瞭解如何修改這項設定,請參閱 更新分區到期時間。
啟用 Crashlytics BigQuery 串流
如要啟用串流功能,請前往 BigQuery 的「Crashlytics」部分 整合 頁面,然後勾選「包含串流」核取方塊。
數據分析範本
如要在數據分析範本中啟用即時資料,請按照 請參閱「使用數據分析以視覺化方式呈現匯出的 Crashlytics 資料」一文。
檢視表
您可以使用 BigQuery UI 將下列查詢範例轉換成檢視表。詳情請見 建立檢視表 。
你可以如何處理匯出的資料?
BigQuery 匯出作業包含原始當機資料,包括裝置類型、作業系統、 例外狀況 (Android 應用程式) 或錯誤 (Apple 應用程式),以及 Crashlytics 記錄 視為其他資料
在 BigQuery 中使用 Firebase Crashlytics 資料
以下範例說明您可以在 Crashlytics 資料中執行的查詢。 這些查詢會產生 Crashlytics 無法提供的報表 儀表板中指定這項設定。
Crashlytics 查詢的範例
下列範例示範如何產生報表,將當機事件資料匯總至更容易理解的摘要中。
範例 1:每日當機次數
在盡可能修正錯誤後,待開發客戶開發人員認為她的團隊 終於準備好推出新的相片分享應用程式了。在使用產品前 查詢過去一個月內每天的當機次數,確認 error-bash 使應用程式隨著時間更穩定:
SELECT COUNT(DISTINCT event_id) AS number_of_crashes, FORMAT_TIMESTAMP("%F", event_timestamp) AS date_of_crashes FROM `projectId.firebase_crashlytics.package_name_ANDROID` GROUP BY date_of_crashes ORDER BY date_of_crashes DESC LIMIT 30;
範例 2:找出最普遍的當機事件
為了適當安排生產計畫的優先順序,專案經理會思考如何指出 瞭解產品中最常發生的 10 個當機事件會產生一項查詢 提供了相關資料點:
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 `projectId.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;
示例 3:前 10 大當機裝置
秋天是換新手機的季節!開發人員知道這也代表新裝置了 各季別。面對即將到來的相容性問題 整理出一項查詢,找出 10 個 過去一週內的當機次數:
SELECT device.model, COUNT(DISTINCT event_id) AS number_of_crashes FROM `projectId.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;
範例 4:依自訂鍵篩選
某遊戲開發人員想知道自家遊戲體驗的哪個關卡最受歡迎
當機。為協助對方追蹤這項統計資料,他們設定了自訂 Crashlytics 鍵
current_level
,並且在每次使用者達到新的關卡時更新。
Objective-C
CrashlyticsKit setIntValue:3 forKey:@"current_level";
Swift
Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
Java
Crashlytics.setInt("current_level", 3);
在 BigQuery Export 中使用該鍵,就能編寫查詢來回報
與每個當機事件相關的 current_level
值分佈情形:
SELECT COUNT(DISTINCT event_id) AS num_of_crashes, value FROM `projectId.firebase_crashlytics.package_name_ANDROID` UNNEST(custom_keys) WHERE key = "current_level" GROUP BY key, value ORDER BY num_of_crashes DESC
範例 5:User ID 擷取
開發人員有提供搶先體驗版應用程式。大多數使用者都愛不釋手,但其中有 3 個 發生異常當機次數前往 因此會撰寫查詢,為這些使用者擷取所有當機事件 指定使用者 ID
SELECT * FROM `projectId.firebase_crashlytics.package_name_ANDROID` WHERE user.id IN ("userid1", "userid2", "userid3") ORDER BY user.id
範例 6:找出面臨特定當機問題的所有使用者
開發人員已向一群 Beta 版測試人員發布重大錯誤。團隊 能使用上述範例 2 中的查詢找出特定當機問題 問題 ID。現在,他們想執行查詢來擷取應用程式使用者清單 受到此當機情形影響的對象:
SELECT user.id as user_id FROM `projectId.firebase_crashlytics.package_name_ANDROID` WHERE issue_id = "YOUR_ISSUE_ID" AND application.display_version = "" AND user.id != "" ORDER BY user.id;
示例 7:受到當機問題影響的使用者人數 (按國家/地區細分)
現在團隊在推出新版本時偵測到重大錯誤。 使用上述範例 2 中的查詢找出具體 當機問題 ID。團隊希望能確認這個當機問題是否蔓延到 不同國家/地區的用戶
如要撰寫這項查詢,團隊必須:
為 Google Analytics 啟用 BigQuery 匯出功能。 請參閱將專案資料匯出至 BigQuery。
更新應用程式,將使用者 ID 一併傳遞至 Google Analytics SDK 以及 Crashlytics SDK
Objective-C
CrashlyticsKit setUserIdentifier:@"123456789"; FIRAnalytics setUserID:@"12345678 9";
Swift
Crashlytics.sharedInstance().setUserIdentifier("123456789"); Analytics.setUserID("123456789");
Java
Crashlytics.setUserIdentifier("123456789"); mFirebaseAnalytics.setUserId("123456789");
撰寫查詢,使用 User-ID 欄位彙整 Crashlytics 中有當機事件的 Google Analytics BigQuery 資料集 BigQuery 資料集:
SELECT DISTINCT c.issue_id, a.geo.country, COUNT(DISTINCT c.user.id) as num_users_impacted FROM `projectId.firebase_crashlytics.package_name_ANDROID` c INNER JOIN `projectId.analytics_YOUR_TABLE.events_*` a on c.user.id = a.user_id WHERE c.issue_id = "YOUR_ISSUE_ID" AND a._TABLE_SUFFIX BETWEEN '20190101' AND '20200101' GROUP BY c.issue_id, a.geo.country, c.user.id
示例 8:目前為止的前 5 大問題
必須啟用 Crashlytics BigQuery 串流匯出功能
SELECT issue_id, COUNT(DISTINCT event_id) AS events FROM `your_project.firebase_crashlytics.package_name_ANDROID_REALTIME` WHERE DATE(event_timestamp) = CURRENT_DATE() GROUP BY issue_id ORDER BY events DESC LIMIT 5;
示例 9:自 DATE 至今的前 5 大問題,包括今天
必須啟用 Crashlytics BigQuery 串流匯出功能。
本例中,我們合併「批次」表格和「即時」表格
可靠的批次資料由於 event_id
是主鍵
可以使用 DISTINCT event_id
從兩個資料表中刪除重複的常見事件。
SELECT issue_id, COUNT(DISTINCT event_id) AS events FROM ( SELECT issue_id, event_id, event_timestamp FROM `your_project.firebase_crashlytics.package_name_ANDROID_REALTIME` UNION ALL SELECT issue_id, event_id, event_timestamp FROM `your_project.firebase_crashlytics.package_name_ANDROID`) WHERE event_timestamp >= "2020-01-13" GROUP BY issue_id ORDER BY events DESC LIMIT 5;
瞭解 BigQuery 中的 Firebase Crashlytics 結構定義
將 Crashlytics 連結 BigQuery 後,Firebase 會匯出近期事件 (當機、一般錯誤和 ANR 次數),包括最多兩天的事件 其中含有 候補 長達 30 天
從連結開始到停用連結為止,Firebase 會匯出 Crashlytics 每日執行事件系統可能需要幾分鐘才能提供資料 。
資料集
Firebase Crashlytics 會在 BigQuery 中為 Crashlytics 建立新的資料集 資料。資料集涵蓋整個專案,即使專案包含多個應用程式亦然。
資料表
Firebase Crashlytics 會在資料集內為下列應用程式建立表格: 。Firebase 名稱 表格的格式為 底線,以及結尾附加的平台名稱。
舉例來說,ID 為 com.google.test
的 Android 應用程式資料會在
名為「com_google_test_ANDROID
」的表格,而即時資料 (如果啟用) 會顯示在
在名為 com_google_test_ANDROID_REALTIME
的資料表中
資料表含有一組標準的 Crashlytics 資料,以及任何自訂的 開發人員定義的 Crashlytics 金鑰。
資料列
每個在資料表中的資料列都代表應用程式遇到的某個錯誤。
欄
當機事件、一般錯誤和 ANR 情形表中的資料欄相同。如果 接著是啟用 Crashlytics BigQuery 串流匯出,然後查看即時資料表 會包含與批次資料表相同的欄。匯出中的資料欄 。
沒有堆疊追蹤
顯示各列的資料欄,該資料列代表不含堆疊追蹤的事件。
欄位名稱 | 資料類型 | 說明 |
---|---|---|
platform | STRING | Apple 或 Android 應用程式 |
套裝組合 ID | STRING | 軟體包 ID,例如com.google.gmail |
event_id | STRING | 事件的專屬 ID |
is_fatal | BOOLEAN | 應用程式是否當機 |
錯誤類型 | STRING | 事件的錯誤類型 (FATAL、NON_FATAL、ANR) |
問題 ID | STRING | 與事件相關的問題 |
子類 ID | STRING | 與這個事件相關聯的問題變化版本 請注意,並非所有事件都有相關聯的問題變化版本。 |
event_timestamp | TIMESTAMP | 事件發生時間 |
device | RECORD | 發生事件的裝置 |
device.manufacturer | STRING | 裝置製造商 |
device.model | STRING | 裝置型號 |
device.frameworkure | STRING | X86_32、X86_64、ARMV7、ARM64、ARMV7S 或 ARMV7K |
記憶體 | RECORD | 裝置的記憶體狀態 |
Memorystore.used | INT64 | 已使用的記憶體位元組數 |
記憶體用量 | INT64 | 剩餘的記憶體位元組數 |
儲存空間 | RECORD | 裝置的永久儲存空間 |
storage.used | INT64 | 已使用的儲存空間位元組數 |
storage.free | INT64 | 剩餘的儲存空間位元組數 |
作業系統 | RECORD | 裝置上作業系統的詳細資料 |
作業系統.display_version | STRING | 裝置的 OS 版本 |
operating_system.name | STRING | 裝置上的 OS 名稱 |
作業系統.modification_state | STRING | 裝置是否遭到修改,例如已越獄解鎖/已啟用 Root 權限 (修改或已取消) |
作業系統.type | STRING | 裝置上執行的作業系統類型 (例如 IOS、MACOS);僅 適用於 Apple 平台應用程式 |
作業系統.device_type | STRING | 裝置類型 (例如行動裝置、平板電腦、電視等);也稱為 「裝置類別」 |
調度應用程式資源 | RECORD | 產生事件的應用程式 |
app.build_version | STRING | 應用程式的建構版本 |
應用程式.display_version | STRING | |
使用者 | RECORD | 選用:系統收集到應用程式使用者的資訊 |
user.name | STRING | 選填:使用者的名稱 |
<使用者名稱>.電子郵件地址 | STRING | 選填:使用者的電子郵件地址 |
user.id | STRING | 選用:與使用者相關聯的應用程式專屬 ID |
自訂鍵 | 重複紀錄 | 開發人員定義的鍵/值組合 |
custom_keys.key | STRING | 開發人員定義的金鑰 |
custom_keys.value | STRING | 開發人員定義的值 |
安裝作業 | STRING | 識別專屬應用程式的 ID;裝置安裝 |
Crashlytics_sdk_versions | STRING | 產生事件的 Crashlytics SDK 版本 |
應用程式方向 | STRING | PORTRAIT、LANDSCAPE、FACE_UP 或 FACE_DOWN |
裝置螢幕方向 | STRING | PORTRAIT、LANDSCAPE、FACE_UP 或 FACE_DOWN |
process_state | STRING | 背景資訊 |
logs | 重複紀錄 | Crashlytics 記錄器產生的記錄訊息 (如有啟用) 並加上時間戳記 |
log.timestamp | TIMESTAMP | 記錄建立時間 |
記錄.message | STRING | 記錄的訊息 |
導覽標記 | 重複紀錄 | 加上時間戳記的 Google Analytics 導覽標記 (如有啟用) |
breadcrumbs.timestamp | TIMESTAMP | 與導覽標記相關聯的時間戳記 |
breadcrumbs.name | STRING | 與導覽標記相關聯的名稱 |
breadcrumbs.params | 重複紀錄 | 與導覽標記相關聯的參數 |
breadcrumbs.params.key | STRING | 與導覽標記相關聯的參數鍵 |
breadcrumbs.params.value | STRING | 與導覽標記相關聯的參數值 |
blame_Frame | RECORD | 經認定為當機或錯誤的根本原因 |
blame_Frame.line | INT64 | 影格檔案的行號 |
blame_Frame.file | STRING | 框架檔案名稱 |
blame_frame.symbol | STRING | 液化符號或生氣的符號 (如無法飲水) |
blame_frame.offset | INT64 | 做為包含程式碼的二進位映像檔的位元組偏移,未設定 Java 例外狀況 |
blame_Frame.address | INT64 | 二進位映像檔中的位址,含有程式碼,已針對 Java 取消設定 影格 |
blame_Frame.library | STRING | 包含框架的程式庫顯示名稱 |
blame_frame.owner | STRING | 開發人員、供應商、執行時間、平台或系統 |
blame_frame.blamed | BOOLEAN | Crashlytics 的分析結果是否指出這個影格是否為原因 當機或錯誤資訊的 |
例外狀況 | 重複紀錄 | 僅限 Android 裝置:這個事件期間發生的例外狀況。巢狀例外狀況 資料按時間順序由新到舊排序 (讀取:上一筆記錄為 擲回例外狀況) |
Rules.type | STRING | 例外狀況類型,例如:java.lang.IllegalStateException |
例外狀況.exception_message | STRING | 與例外狀況相關的訊息 |
Exception.nested | BOOLEAN | 除了最後一次的例外狀況 (例如第一筆記錄) 外,其餘所有屬性皆為 True |
例外狀況.title | STRING | 討論串的標題 |
Exception.subtitle (例外狀況) | STRING | 討論串的副標題 |
Rules.blamed | BOOLEAN | 如果 Crashlytics 判定負責 錯誤或當機 |
Rules.Frames | 重複紀錄 | 與例外狀況相關的影格 |
Exception.Frames.line | INT64 | 影格檔案的行號 |
Rules.Frames.file | STRING | 框架檔案名稱 |
Exception.Frames.symbol | STRING | 液化符號或生氣的符號 (如無法飲水) |
Rules.Frames.offset | INT64 | 做為包含程式碼的二進位映像檔的位元組偏移,未設定 Java 例外狀況 |
Rules.Frames.address | INT64 | 二進位映像檔中的位址,含有程式碼,已針對 Java 取消設定 影格 |
Exception.Frames.library | STRING | 包含框架的程式庫顯示名稱 |
Rules.Frames.owner | STRING | 開發人員、供應商、執行時間、平台或系統 |
Rules.Frames.blamed | BOOLEAN | Crashlytics 的分析結果是否指出這個影格是否為原因 當機或錯誤資訊的 |
錯誤 | 重複紀錄 | 僅限 Apple 應用程式:一般錯誤 |
error.queue_name | STRING | 執行執行緒的佇列 |
error.code | INT64 | 與應用程式自訂記錄 NSError 相關聯的錯誤代碼 |
error.title | STRING | 討論串的標題 |
錯誤。子標題 | STRING | 討論串的副標題 |
error.blamed | BOOLEAN | Crashlytics 的分析結果是否指出這個影格是否為原因 錯誤 |
error.Frames | 重複紀錄 | 堆疊追蹤的框架 |
error.Frames.line | INT64 | 影格檔案的行號 |
error.Frames.file | STRING | 框架檔案名稱 |
error.Frames.symbol | STRING | 液化符號或生氣的符號 (如無法飲水) |
error.Frames.offset | INT64 | 做為包含程式碼的二進位圖像的位元組偏移 |
error.Frames.address | INT64 | 包含程式碼的二進位映像檔中的位址 |
error.Frames.library | STRING | 包含框架的程式庫顯示名稱 |
error.Frames.owner | STRING | 開發人員、供應商、執行時間、平台或系統 |
error.Frames.blamed | BOOLEAN | Crashlytics 的分析結果是否指出這個影格是否為原因 錯誤 |
討論串 | 重複紀錄 | 活動進行時顯示的討論串 |
Thread.crashed | BOOLEAN | 執行緒是否當機 |
執行緒.thread_name | STRING | 討論串名稱 |
Thread.queue_name | STRING | 僅限 Apple 應用程式:執行執行緒的佇列 |
Thread.signal_name | STRING | 造成應用程式當機的信號名稱 (僅在當機時顯示) 原生執行緒 |
Thread.signal_code | STRING | 造成應用程式當機的信號程式碼。只在當機時顯示 原生執行緒 |
Thread.crash_address | INT64 | 造成應用程式當機的信號位址。僅顯示 以便瞭解原生執行緒停止運作的情況 |
Thread.code | INT64 | 僅限 Apple 應用程式:應用程式自訂記錄 NSError 的錯誤代碼 |
Thread.title | STRING | 討論串的標題 |
Thread.subtitle | STRING | 討論串的副標題 |
Thread.blamed | BOOLEAN | Crashlytics 的分析結果是否指出這個影格是否為原因 當機或錯誤資訊的 |
Thread.Frames | 重複紀錄 | 執行緒的框架 |
Threads.Frames.line | INT64 | 影格檔案的行號 |
Thread.Frames.file | STRING | 框架檔案名稱 |
Threads.frames.symbol | STRING | 脫水符號或原始符號 (如不確定性) |
Thread.Frames.offset | INT64 | 做為包含程式碼的二進位圖像的位元組偏移 |
Thread.Frames.address | INT64 | 包含程式碼的二進位映像檔中的位址 |
Thread.Frames.library | STRING | 包含框架的程式庫顯示名稱 |
Threads.Frames.owner | STRING | 開發人員、公開交易、運作時間、平台或系統 |
Thread.Frames.blamed | BOOLEAN | Crashlytics 的分析結果是否指出這個影格是否為原因 錯誤 |
unity_metadata.unity_version | STRING | 在這部裝置上執行的 Unity 版本 |
unity_metadata.debug_build | BOOLEAN | 如果這是偵錯版本 |
unity_metadata.processor_type | STRING | 處理器類型 |
unity_metadata.processor_count | INT64 | 處理器 (核心) 數量 |
unity_metadata.processor_frequency_mhz | INT64 | 處理器頻率(以 MHz 為單位) |
unity_metadata.system_memory_size_mb | INT64 | Mb 中的系統記憶體大小 |
unity_metadata.graphics_memory_size_mb | INT64 | 圖形記憶體 (MB) |
unity_metadata.graphics_device_id | INT64 | 圖形裝置的 ID |
unity_metadata.graphics_device_vendor_id | INT64 | 圖形處理器供應商的 ID |
unity_metadata.graphics_device_name | STRING | 圖形裝置名稱 |
unity_metadata.graphics_device_vendor | STRING | 圖形裝置的供應商 |
unity_metadata.graphics_device_version | STRING | 圖形裝置的版本 |
unity_metadata.graphics_device_type | STRING | 圖形裝置類型 |
unity_metadata.graphics_shader_level | INT64 | 圖形的著色器層級 |
unity_metadata.graphics_render_target_count | INT64 | 圖形算繪目標數量 |
unity_metadata.graphics_copy_texture_support | STRING | 支援 Unity API 中定義的圖像紋理複製功能 |
unity_metadata.graphics_max_texture_size | INT64 | 轉譯紋理專用的大小上限 |
unity_metadata.screen_size_px | STRING | 螢幕尺寸 (以像素為單位),格式為「寬 x 高」 |
unity_metadata.screen_Resolution_dpi | STRING | 螢幕的 DPI 以浮點數表示 |
unity_metadata.screen_refresh_rate_hz | INT64 | 螢幕刷新率 (以 Hz) |
使用數據分析視覺化匯出的 Crashlytics 資料
Google 數據分析可讓 在 BigQuery 中將 Crashlytics 資料集轉換成易於閱讀的報告 而且可完全自訂
如要進一步瞭解如何使用數據分析,請參閱數據分析快速入門指南。 歡迎使用數據分析。
使用 Crashlytics 報表範本
「數據分析」提供一個 Crashlytics 範例報表,其中包含 從匯出的 Crashlytics BigQuery 架構中取得一組維度和指標。如果 已啟用 Crashlytics BigQuery 串流匯出功能 數據分析範本的「即時趨勢」頁面中的資料,您可以使用 做為範本,方便您快速建立新的報表和圖表 存取您應用程式的原始當機資料:
- 開啟 Crashlytics 數據分析資訊主頁範本。
- 按一下右上角的 [Use Template] (使用範本)。
- 在「新資料來源」下拉式選單中,選取「建立新資料來源」。
- 在「BigQuery」資訊卡上,按一下 [Select] (選取)。
- 選取含有 Crashlytics 匯出資料的表格,請選擇 我的專案 > [your-project-name] >firebase_crashlytics > [your-table-name]。您隨時都能選取批次表格:如果 已啟用 Crashlytics BigQuery 串流匯出功能 即時資料表。
- 在「Configuration」(設定) 底下,將 [Crashlytics Template level] (Crashlytics 範本等級) 設為 [Default] (預設)。
- 按一下 [Connect] (連結) 建立新的資料來源。
- 按一下 [Add to Report] (新增至報表) 傳回 Crashlytics 範本。
- 最後按一下「Create Report」建立 Crashlytics 副本 數據分析資訊主頁範本。