\")[Data]{0})","这一步我们会获取请求类型等数据:","使用下面的code钻取到该数据对象中的[Children]中的第一个数据对象。","= Table.AddColumn(#\"Changed Type\", \"Custom\", each Web.Page(\"\")[Data]{0}[Children]{0})","Name中的HEAD为请求头,BODY为请求体:","请求头","= Table.AddColumn(#\"Changed Type\", \"Custom\", each Web.Page(\"\")[Data]{0}[Children]{0}[Children]{0})","请求体","= Table.AddColumn(#\"Changed Type\", \"Custom\", each Web.Page(\"\")[Data]{0}[Children]{0}[Children]{1})","可以看到,请求体返回了我们需要的数据。","= Table.AddColumn(#\"Changed Type\", \"Custom\", each Web.Page(\"\")[Data]{0}[Children]{0}[Children]{1}[Text]{0})","我们可以输出返回的数据:","2.使用 JavaScript 正则表达式","按照上述步骤,我们可以轻松地在 HTML 环境中获取必要的数据。因此,我们唯一的要求就是编写所需的函数,以方便正则表达式的直接执行。如下,Custom列成功返回了RequestInfo列中的网络状态码。","= Table.AddColumn(#\"Changed Type\", \"Custom\", each Web.Page(\"\")[Data]{0}[Children]{0}[Children]{1}[Text]{0})","实现的要求是获取网络请求状态代码。显而易见,它由三位数字组成,因此条件是: /\\b\\d{3}\\b/.","可以观察到,样本数据包含多个或单个状态代码,分散在不同位置,还包括 \"32145 \"等错误数据。使用正则表达式可以准确地筛选出这些数据。如果使用 M 语言,则可能需要使用 Text.Contains、Text.StartsWith 和 Text.EndsWith 等函数。特别是当数据分布不一致时,可能还需要使用 Text.Replace,这使得过滤过程的实现具有挑战性。","总结:   ","通过探索,我们可以使用该语句获取所需的数据:","Web.Page(\"\")[Data]{0}[Children]{0}[Children]{1}[Text]{0}","M 语言中难以实现的功能,可以尝试使用 JavaScript 完成。","相关资料","正则表达式 - JavaScript | MDN","Web.Page - PowerQuery M | Microsoft Learn","作者:常天意","指导:Ula&Kerry","在Power Query中使用Web.page实现正则表达式.pbix","\n\t\t\t\t\t\t\tLabels:\n\t\t\t\t\t\t","提示与技巧","\n\t\n\t\t\t0\n\t\t\n","Back to Blog","Newer Article","Comments","cloupp","\n\t\t\tThursday\n\t\t","Permalink","Print","\n\t\t\t\t\t\tYou must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.\n\t\t\t\t\t","Comment","Top Kudoed Posts","\n\t\t\tSubject\n\t\t","\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\tKudos\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t","\n\t\t\t\t\t\t\tPowerBI报表全屏展示的解决方案\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t","\n\t\n\t\t\t2\n\t\t\n","\n\t\t\t\t\t\t\tPowerBI行标签功能的应用与注意事项\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t","\n\t\t\t\t\t\t\t关于Power BI日期表\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t","\n\t\t\t\t\t\t\tPowerBI矩阵列宽批量调整\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t","\n\t\n\t\t\t1\n\t\t\n","\n\t\t\t\t\t\t\t理解Power BI VAR函数的三个特点\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t","View All","Latest Articles","PowerBI报表全屏展示的解决方案","PowerBI矩阵列宽批量调整","理解Power BI VAR函数的三个特点","通过XMLA终结点刷新PowerBI报表","PowerBI行标签功能的应用与注意事项","各种颠覆想象的DAX案例","PowerBI按列排序的应用与副作用","关于Power BI日期表","如何从另一个表中找到值","通过Powershell获取数据集列表","Latest Comments","\n\t\t\t\t\t\n\t\n\n\t\n\t\t\t\n\t\t\t\t\n\t\t\n\t\t\n\t\t\t大鹏test\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\n\t\t\t\n\t\t\n\n\t\t\t\t\ton:\n\t\t\t\t\t关于Power BI日期表\t\n\t\t\t\t","\n\t\t\t\t\t\n\t\n\n\t\n\t\t\t\n\t\t\t\t\n\t\t\n\t\t\n\t\t\tSQCQSC\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\n\t\t\t\n\t\t\n\n\t\t\t\t\ton:\n\t\t\t\t\t动态比较两个周期的值\t\n\t\t\t\t","大鹏Power","\n\t\t\n\n\t\t\t\t\ton:\n\t\t\t\t\t","为什么没有日期层次结构?","\n\t\t\t\t\t\n\t\n\n\t\n\t\t\t\n\t\t\t\t\n\t\t\n\t\t\n\t\t\tcloupp\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\n\t\t\t\n\t\t\n\n\t\t\t\t\ton:\n\t\t\t\t\t在Power Query中使用Web.page实现正则表达式\t\n\t\t\t\t","Top Labels","Alphabetical","18","如何","12","基础实践","6","数据模型","5","可视化","4","报表","2","数据清洗","故障排查","刷新","1","How To","Tips & Tricks","网关","活动","Previous","\n\t\t\t\t\t\t1 of 2\n\t\t\t\t\t","Next","Archives","09-08-2024 - 09-14-2024","09-01-2024 - 09-07-2024","08-25-2024 - 08-31-2024","08-18-2024 - 08-24-2024","08-04-2024 - 08-10-2024","View Complete Archives","© 2024 Microsoft","\r\n Manage Cookies\r\n ","\r\n Privacy & cookies\r\n ","\r\n Terms of use\r\n ","\r\n Trademarks\r\n ","Your Privacy Choices Opt-Out Icon","Your Privacy Choices","Consumer Health Privacy"]}
Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more. Get started

v-stephen-msft

在Power Query中使用Web.page实现正则表达式

引言:

在 Power Query 中,当我们遇到复杂的数据结构,而 M 语言无法直接实现时,我们可以借助其他语言来实现。鉴于 Web.Page 与 HTML 兼容,我将使用 JavaScript 来执行正则表达式,这与使用 M 语言相比是一种更直接的方法。本例获取网络状态信息中的网络请求状态码, 即从[RequestInfo]中提取状态码。

正文:

1.了解Web.page返回的数据结构

最初,我们使用 Web.page 来检索数据。可以观察到,DOM数据被获取,其中包括额外的数组。

vstephenmsft_0-1723171143829.png

 

紧接着,我们可以继续向下查找数据。[Data] 默认的第一次钻取数组名称,{0}为获取该数组中的第一个数据,此处为下一层的数据对象。

= Table.AddColumn(#"Changed Type", "Custom", each Web.Page("<script>document.write('"&[RequestInfo]&"')</script>")[Data]{0})

这一步我们会获取请求类型等数据:

vstephenmsft_0-1723108613332.png

使用下面的code钻取到该数据对象中的[Children]中的第一个数据对象。

 

 

 

 

= Table.AddColumn(#"Changed Type", "Custom", each Web.Page("<script>document.write('"&[RequestInfo]&"')</script>")[Data]{0}[Children]{0})

 

 

 

 

 

Name中的HEAD为请求头,BODY为请求体:

vstephenmsft_0-1723108657091.png

请求头

 

 

 

 

 

= Table.AddColumn(#"Changed Type", "Custom", each Web.Page("<script>document.write('"&[RequestInfo]&"')</script>")[Data]{0}[Children]{0}[Children]{0})

 

 

 

 

 

vstephenmsft_0-1723108746412.png

请求体

 

 

 

 

 

= Table.AddColumn(#"Changed Type", "Custom", each Web.Page("<script>document.write('"&[RequestInfo]&"')</script>")[Data]{0}[Children]{0}[Children]{1})

 

 

 

 

 

可以看到,请求体返回了我们需要的数据。

vstephenmsft_1-1723108807947.png

 

 

 

 

 

= Table.AddColumn(#"Changed Type", "Custom", each Web.Page("<script>document.write('"&[RequestInfo]&"')</script>")[Data]{0}[Children]{0}[Children]{1}[Text]{0})

 

 

 

 

 

我们可以输出返回的数据:

vstephenmsft_0-1723108984992.png

2.使用 JavaScript 正则表达式

按照上述步骤,我们可以轻松地在 HTML 环境中获取必要的数据。因此,我们唯一的要求就是编写所需的函数,以方便正则表达式的直接执行。如下,Custom列成功返回了RequestInfo列中的网络状态码。

 

 

 

 

 

= Table.AddColumn(#"Changed Type", "Custom", each Web.Page("<script>document.write('"&[RequestInfo]&"'.match(/\b\d{3}\b/g))</script>")[Data]{0}[Children]{0}[Children]{1}[Text]{0})

 

 

 

 

 

vstephenmsft_0-1723109046037.png

实现的要求是获取网络请求状态代码。显而易见,它由三位数字组成,因此条件是: /\b\d{3}\b/.

 

可以观察到,样本数据包含多个或单个状态代码,分散在不同位置,还包括 "32145 "等错误数据。使用正则表达式可以准确地筛选出这些数据。如果使用 M 语言,则可能需要使用 Text.Contains、Text.StartsWith 和 Text.EndsWith 等函数。特别是当数据分布不一致时,可能还需要使用 Text.Replace,这使得过滤过程的实现具有挑战性。

 

总结:   

通过探索,我们可以使用该语句获取所需的数据:

 

 

 

 

Web.Page("<script>Your Fuction</script>")[Data]{0}[Children]{0}[Children]{1}[Text]{0}

 

 

 

 

M 语言中难以实现的功能,可以尝试使用 JavaScript 完成。

 

相关资料

正则表达式 - JavaScript | MDN 

Web.Page - PowerQuery M | Microsoft Learn 

 

作者:常天意

指导:Ula&Kerry

 

Comments

cx