教學課程:使用批次偵測和 Power BI 將異常可視化(單變數)
重要
從 2023 年 9 月 20 日開始,您將無法建立新的 異常偵測程式 資源。 異常偵測程式 服務將於 2026 年 10 月 1 日淘汰。
使用本教學課程,以批次的形式尋找時間序列數據集內的異常狀況。 使用 Power BI Desktop 時,您將會取得 Excel 檔案、準備 異常偵測程式 API 的數據,以及將整個 API 的統計異常可視化。
在本教學課程中,您將了解如何:
- 使用 Power BI Desktop 匯入和轉換時間序列資料集
- 整合 Power BI Desktop 與 異常偵測程式 API 以進行批次異常偵測
- 將數據中找到的異常狀況可視化,包括預期值和可見值,以及異常偵測界限。
必要條件
- Azure 訂閱
- Microsoft Power BI Desktop 免費提供。
- Excel 檔案 (.xlsx) 包含時間序列數據點。
- 擁有 Azure 訂用帳戶之後,請在 Azure 入口網站 中建立 異常偵測程式 資源,以取得您的密鑰和端點。
- 您需要從您建立的資源取得密鑰和端點,才能將應用程式連線到 異常偵測程式 API。 您稍後會在快速入門中執行此動作。
注意
若要在使用 異常偵測程式 API 時獲得最佳結果,JSON 格式的時間序列資料應包含:
- 以相同間隔分隔的數據點,未超過預期遺漏點數目的 10%。
- 如果您的數據沒有明確的季節性模式,則至少 12 個數據點。
- 如果您的數據確實有明確的季節性模式,則至少會發生 4 個模式。
載入和格式化時間序列數據
若要開始使用,請開啟Power BI Desktop,然後載入您從必要條件下載的時間序列數據。 這個 Excel 檔案包含一系列國際標準時間 (UTC) 時間戳和值組。
注意
Power BI 可以使用來自各種來源的數據,例如 .csv 檔案、SQL 資料庫、Azure Blob 記憶體等等。
在主要 Power BI Desktop 視窗中,選取 [首頁 ] 功能區。 在功能區的 [外部數據] 群組中,開啟 [取得數據] 下拉功能表,然後選取 [Excel]。
對話框出現之後,流覽至您下載範例 .xlsx 檔案的資料夾,然後加以選取。 在 [導覽器] 對話框出現之後,選取 [Sheet1],然後選取 [編輯]。
Power BI 會將第一個 Date/Time
數據行中的時間戳轉換成數據類型。 這些時間戳必須轉換成文字,才能傳送至 異常偵測程式 API。 如果 Power Query 編輯器未自動開啟,請選取 [首頁] 索引卷標上的 [ 編輯查詢 ]。
選取 Power Query 編輯器 中的 [轉換] 功能區。 在 [ 任何數據行] 群組中 ,開啟 [數據類型: ] 下拉功能表,然後選取 [ 文字]。
當您收到變更數據行類型的通知時,請選取 [ 取代目前]。 之後,選取 [首頁] 功能區中的 [關閉及套用] 或 [套用]。
建立函式以傳送數據並格式化回應
若要格式化數據檔並將數據檔傳送至 異常偵測程式 API,您可以在上面建立的數據表上叫用查詢。 在 Power Query 編輯器 中,從 [首頁] 功能區開啟 [新增來源] 下拉功能表,然後選取 [空白查詢]。
請確定已選取新的查詢,然後選取 [進階編輯器]。
在 進階編輯器 內,使用下列 Power Query M 代碼段,從數據表擷取數據行,並將其傳送至 API。 之後,查詢會從 JSON 回應建立數據表,並傳回它。 將 apiKey
變數取代為您的有效 異常偵測程式 API 金鑰,並將 endpoint
取代為您的端點。 將查詢輸入 進階編輯器 之後,請選取 [完成]。
(table as table) => let
apikey = "[Placeholder: Your Anomaly Detector resource access key]",
endpoint = "[Placeholder: Your Anomaly Detector resource endpoint]/anomalydetector/v1.0/timeseries/entire/detect",
inputTable = Table.TransformColumnTypes(table,{{"Timestamp", type text},{"Value", type number}}),
jsontext = Text.FromBinary(Json.FromValue(inputTable)),
jsonbody = "{ ""Granularity"": ""daily"", ""Sensitivity"": 95, ""Series"": "& jsontext &" }",
bytesbody = Text.ToBinary(jsonbody),
headers = [#"Content-Type" = "application/json", #"Ocp-Apim-Subscription-Key" = apikey],
bytesresp = Web.Contents(endpoint, [Headers=headers, Content=bytesbody, ManualStatusHandling={400}]),
jsonresp = Json.Document(bytesresp),
respTable = Table.FromColumns({
Table.Column(inputTable, "Timestamp")
,Table.Column(inputTable, "Value")
, Record.Field(jsonresp, "IsAnomaly") as list
, Record.Field(jsonresp, "ExpectedValues") as list
, Record.Field(jsonresp, "UpperMargins")as list
, Record.Field(jsonresp, "LowerMargins") as list
, Record.Field(jsonresp, "IsPositiveAnomaly") as list
, Record.Field(jsonresp, "IsNegativeAnomaly") as list
}, {"Timestamp", "Value", "IsAnomaly", "ExpectedValues", "UpperMargin", "LowerMargin", "IsPositiveAnomaly", "IsNegativeAnomaly"}
),
respTable1 = Table.AddColumn(respTable , "UpperMargins", (row) => row[ExpectedValues] + row[UpperMargin]),
respTable2 = Table.AddColumn(respTable1 , "LowerMargins", (row) => row[ExpectedValues] - row[LowerMargin]),
respTable3 = Table.RemoveColumns(respTable2, "UpperMargin"),
respTable4 = Table.RemoveColumns(respTable3, "LowerMargin"),
results = Table.TransformColumnTypes(
respTable4,
{{"Timestamp", type datetime}, {"Value", type number}, {"IsAnomaly", type logical}, {"IsPositiveAnomaly", type logical}, {"IsNegativeAnomaly", type logical},
{"ExpectedValues", type number}, {"UpperMargins", type number}, {"LowerMargins", type number}}
)
in results
選取 [輸入參數] 下方,然後選取 Sheet1
[叫用],在您的數據工作表上叫用查詢。
重要
當您完成時,請記得從程式碼中移除密鑰,且絕不會公開發佈。 針對生產環境,請使用安全的方式來儲存和存取您的認證,例如 Azure 金鑰保存庫。 如需詳細資訊,請參閱 Azure AI 服務安全性一文。
數據源隱私權和驗證
注意
請留意貴組織的數據隱私權和存取原則。 如需詳細資訊,請參閱 Power BI Desktop 隱私權層級 。
當您嘗試執行查詢時,可能會收到警告訊息,因為它會利用外部數據源。
若要修正此問題,請選取 [檔案] 和 [選項和設定]。 然後選取 [ 選項]。 在 [目前檔案] 下方,選取 [隱私權],然後忽略 [隱私權等級],並可能改善效能。
此外,您可能會收到訊息,要求您指定連線至 API 的方式。
若要修正此問題,請選取 訊息中的 [編輯認證 ]。 對話框出現之後,選取 [匿名 ] 以匿名方式連線至 API。 然後選取 [連線]。
之後,選取 [首頁] 功能區中的 [關閉及套用] 以套用變更。
可視化 異常偵測程式 API 回應
在主要 Power BI 畫面中,開始使用上述建立的查詢將數據可視化。 首先選取 [視覺效果] 中的折線圖。 然後將叫用函式的時間戳新增至折線圖的 Axis。 以滑鼠右鍵按兩下它,然後選取 [時間戳]。
將下列欄位從叫用函式新增至圖表的 [值] 字段。 使用下列螢幕快照來協助建置您的圖表。
- 值
- UpperMargins
- LowerMargins
- ExpectedValues
新增欄位之後,請在圖表上選取並重設大小以顯示所有數據點。 您的圖表看起來會類似下列螢幕快照:
顯示異常數據點
在 Power BI 視窗右側的 [字段] 窗格下方,以滑鼠右鍵按兩下 [叫用函數查詢] 底下的 [值],然後選取 [新增快速量值]。
在出現的畫面上,選取 [ 已篩選的值 ] 作為計算。 將 [基底值] 設定為 Sum of Value
。 然後從 [叫用的函式] 字段拖曳IsAnomaly
至 [篩選]。 從 [篩選] 下拉選單中選取 True
。
選取 [ 確定] 之後,您會在字段清單底部有欄位 Value for True
。 以滑鼠右鍵按兩下它,並將它重新命名為 Anomaly。 將它新增至圖表的 [值]。 然後選取 [ 格式] 工具,然後將 X 軸類型設定為 類別。
選取 [格式 ] 工具和 [數據色彩],將色彩套用至您的圖表。 您的圖表看起來應該如下所示: