Important
从 2023 年 9 月 20 日起,将无法创建新的异常检测器资源。 异常检测器服务将于 2026 年 10 月 1 日停用。
使用本教程查找设置为批的时序数据中的异常。 使用 Power BI Desktop 时,需获取一个 Excel 文件,为异常检测器 API 准备数据,然后将其中的统计异常可视化。
在本教程中,你将学习如何:
- 使用 Power BI Desktop 导入和转换时序数据集
- 将 Power BI Desktop 与异常检测器 API 集成,以便进行批量异常检测
- 将在数据中发现的异常可视化,其中包括预期的和看到的值,以及异常检测边界。
Prerequisites
- 一个 Azure 订阅
- Power BI桌面,免费。
- 一个 Excel 文件 (.xlsx),其中包含时序数据点。
- 获得Azure订阅后,在Azure门户中创建异常检测器资源以获取密钥和终结点。
- 需要从创建的资源获取密钥和终结点,以便将应用程序连接到异常检测器 API。 稍后你将在本快速入门中执行该操作。
Note
为了在使用异常检测器 API 时达到最佳效果,JSON 格式的时间序列数据应包括:
- 以相同间隔分隔的数据点,缺少的所需点数不超过 10%。
- 如果数据不具有明确的季节性模式,则至少有 12 个数据点。
- 如果数据具有明确的季节性模式,则至少出现 4 次模式。
加载时序数据并设置其格式
若要开始,请打开 Power BI Desktop 并加载从先决条件下载的时序数据。 此 Excel 文件包含一系列协调世界时 (UTC) 时间戳和值对。
Note
Power BI可以使用来自各种源的数据,例如 .csv 文件、SQL 数据库、Azure blob 存储等。
在 Power BI Desktop 主窗口中,选择 主页 选项卡。 在功能区的“外部数据”组中,打开“获取数据”下拉菜单,然后选择“Excel”。
对话框出现以后,导航到下载了示例 .xlsx 文件的文件夹,然后将其选中。 在“导航器”对话框出现以后,选择“Sheet1”,然后选择“编辑”。
Power BI 会将第一列中的时间戳转换为 Date/Time 数据类型。 这些时间戳必须转换为文本才能发送到异常检测器 API。 如果Power Query编辑器未自动打开,请在主选项卡上选择Edit Queries。
选择Power Query 编辑器中的 Transform 功能区。 在“任何列”组中,打开“数据类型:”下拉菜单,然后选择“文本”。
获得有关更改列类型的通知后,请选择“替换当前项”。 然后,在主页功能区中选择关闭并应用或应用。
创建一个函数来发送数据并设置响应的格式
若要格式化数据文件并将其发送到异常检测器 API,可以对上面创建的表调用查询。 在 Power Query 编辑器 中,从 Home 功能区中,打开 New Source 下拉菜单,然后选择 Blank 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下选择输入参数,然后选择调用。
Important
完成后,请记住将密钥从代码中删除,并且永远不要公开发布该密钥。 在生产中,请使用安全的方式存储和访问凭据,例如 Azure 密钥保管库。 有关详细信息,请参阅 Azure AI 服务安全性一文。
数据源隐私和身份验证
Note
请注意组织的数据隐私和访问政策。 有关详细信息,请参阅 Power BI 桌面隐私级别。
在尝试运行此查询时,可能会出现警告消息,因为此查询使用外部数据源。
若要修复此问题,请选择“文件”,然后选择“选项和设置”。 然后选择“选项”。 在“当前文件”下选择“隐私”,然后选择“忽略隐私级别并潜在地改善性能”。
另外,可能会出现一条消息,要求指定连接到 API 的方式。
若要修复此问题,请选择消息中的“编辑凭据”。 在对话框出现后选择“匿名”,以匿名方式连接到 API。 然后选择连接。
然后在主页功能区中选择关闭并应用以应用所做的更改。
可视化异常检测器 API 响应
在 Power BI 主屏幕中,开始使用上面创建的查询将数据可视化。 首先选择“可视化效果”中的“折线图”。 然后,将已调用函数生成的时间戳添加到折线图的坐标轴中。 右键单击它,并选择“时间戳”。
将“已调用函数”中的以下字段添加到图的“值”字段。 根据以下屏幕截图来构建图表。
- 值
- UpperMargins
- LowerMargins
- 预期值
添加字段后,选择图表并重设其大小,以显示所有数据点。 图表的外观应类似于以下屏幕截图:
显示异常数据点
在 Power BI 窗口右侧,FIELDS 窗格下,右键单击 Invoked Function query 下的 Value,然后选择 新建快速度量值。
在出现的屏幕上,选择“筛选的值”作为计算方法。 将基础值设置为Sum of Value。 然后将 IsAnomaly 从“已调用函数”字段拖至“筛选器”。 从“筛选器”下拉菜单中选择 True。
选择“确定”后,会在字段列表底部出现一个 Value for True 字段。 右键单击它,将其重命名为“异常”。 将其添加到图表的“值”中。 然后选择“格式”工具,将 X 轴类型设置为“分类”。
为图表应用颜色,方法是:选择“格式”工具和“数据颜色”。 图表的外观应如下所示: