调整Hoosier的M查询获取SharePoint列表数据时遇认证错误求助
你的核心问题是错误拼接了SharePoint个人站点的API地址,原教程代码针对的是团队站点(带/sites/路径),但你的列表属于个人My Site,路径结构完全不同,导致生成的API地址无效,进而触发认证错误。
错误点拆解
sitename字段你填了完整的列表页面URL,这完全不符合原代码的设计(原代码sitename是团队站点的子路径)baseurl拼接后出现了重复的站点URL和列表路径,生成的地址是无效的,Power BI无法正确识别数据源,导致认证失败
修正后的完整M代码
let // 个人站点的根地址,不是列表页面地址 siteRoot = "https://thebravanesesocietycouk-my.sharepoint.com/personal/jeilani_thebravanesesociety_co_uk", listName = "Customers", // 正确的API基础地址 baseUrl = siteRoot & "/_api/web/lists/GetByTitle('" & listName & "')/", // 获取列表总条目数 itemCount = Json.Document(Web.Contents(baseUrl & "ItemCount", [Headers=[Accept="application/json"]]))[value], // 生成分页跳过的序列(每页5000条) skipList = List.Numbers(0, Number.RoundUp(itemCount/5000), 5000), // 转换为表格处理分页 #"Converted to Table" = Table.FromList(skipList, Splitter.SplitByNothing(), null, null, ExtraValues.Error), #"Renamed Columns" = Table.RenameColumns(#"Converted to Table",{{"Column1", "Skip"}}), #"Changed Type" = Table.TransformColumnTypes(#"Renamed Columns",{{"Skip", type text}}), // 分页参数,可按需修改字段选择 fieldSelect = "&$top=5000", // 逐页获取数据 #"Added Items Column" = Table.AddColumn(#"Changed Type", "Items", each Json.Document(Web.Contents(baseUrl & "items?$skipToken=Paged=TRUE%26p_ID=" & [Skip] & fieldSelect, [Headers=[Accept="application/json"]]))), // 展开数据记录 #"Expanded Items" = Table.ExpandRecordColumn(#"Added Items Column", "Items", {"value"}, {"value"}), #"Expanded Value" = Table.ExpandListColumn(#"Expanded Items", "value") in #"Expanded Value"
后续排查步骤
- 确认凭据类型:
- 在Power BI中点击「主页」→「数据源设置」,找到对应的SharePoint数据源
- 将凭据类型改为OAuth2,点击「登录」,使用拥有该列表访问权限的微软账号登录
- 验证API地址有效性:
- 在浏览器中打开
https://thebravanesesocietycouk-my.sharepoint.com/personal/jeilani_thebravanesesociety_co_uk/_api/web/lists/GetByTitle('Customers')/ItemCount - 确认能返回类似
{"value":123}的JSON数据,说明地址和权限都正常
- 在浏览器中打开
- 自定义字段选择(可选):
- 如果只需要特定字段,可修改
fieldSelect参数,比如:fieldSelect = "&$top=5000&$select=Id,Title,Email,Phone" - 若需展开 lookup 或人员字段,参考原代码的注释添加
$expand参数
- 如果只需要特定字段,可修改
内容的提问来源于stack exchange,提问作者MsBrava
相关产品推荐
相关产品推荐

