我有一个包含数千个 JSON 文件的文件夹,我正在尝试将其导入到 PowerBI 中。我至少在其中一个文件中遇到以下错误,但很难判断是哪一个文件以及如何解决它。
[Expression.Error] We cannot convert a value of type Record to type List.
这是 JSON 文件之一的示例:
[
{
"Server": "SERVER",
"Name": "SHARE NAME",
"ScopeName": "*",
"Path": "D:\\PATH\\TO\SHARE NAME",
"Description": "",
"ShareState": 1,
"AvailabilityType": 0,
"ShareRights": [
{
"AccountName": "BUILTIN\\Administrators",
"AccessRight": 2,
"AccessControlType": 0
}
],
"ShareSddl": "REMOVED",
"ShareRoot": [
{
"Path": "D:\\PATH\\TO\SHARE",
"Owner": "BUILTIN\\Administrators",
"Group": "US\\Domain Users",
"Access": [
"@{FileSystemRights=FullControl; AccessControlType=Allow; IdentityReference=BUILTIN\\Administrators}",
"@{FileSystemRights=FullControl; AccessControlType=Allow; IdentityReference=CREATOR OWNER}",
"@{FileSystemRights=FullControl; AccessControlType=Allow; IdentityReference=NT AUTHORITY\\SYSTEM}",
"@{FileSystemRights=ReadAndExecute, Synchronize; AccessControlType=Allow; IdentityReference=BUILTIN\\Users}"
],
"Sddl": "REMOVED"
}
],
"SubDirectories": [
{
"Path": "D:\\PATH\\TO\SHARE\\Report",
"Owner": "BUILTIN\\Administrators",
"Group": "US\\Domain Users",
"Access": [
"@{FileSystemRights=FullControl; AccessControlType=Allow; IdentityReference=BUILTIN\\Administrators}",
"@{FileSystemRights=FullControl; AccessControlType=Allow; IdentityReference=CREATOR OWNER}",
"@{FileSystemRights=FullControl; AccessControlType=Allow; IdentityReference=NT AUTHORITY\\SYSTEM}",
"@{FileSystemRights=ReadAndExecute, Synchronize; AccessControlType=Allow; IdentityReference=BUILTIN\\Users}"
],
"Sddl": "REMOVED"
}
],
"TotalFileCount": 300,
"TotalDirectoryCount": 1,
"TotalFolderSizeBytes": "3,506,449,314 Bytes",
"TotalFolderSizeInMB": "3,344.01 MB",
"TotalFolderSizeInGB": "3.27 GB",
"TreeSizeDirFailed": null,
"TreeSizeFileFailed": null,
"TreeErrorHistory": null
},
{
"Server": "SERVER",
"Name": "Public",
"ScopeName": "*",
"Path": "D:\\Public",
"Description": "",
"ShareState": 1,
"AvailabilityType": 0,
"ShareRights": [
{
"AccountName": "Everyone",
"AccessRight": 0,
"AccessControlType": 0
}
],
"ShareSddl": "REMOVED",
"ShareRoot": [
{
"Path": "D:\\Public",
"Owner": "NT AUTHORITY\\SYSTEM",
"Group": "NT AUTHORITY\\SYSTEM",
"Access": [
"@{FileSystemRights=FullControl; AccessControlType=Allow; IdentityReference=BUILTIN\\Administrators}",
"@{FileSystemRights=FullControl; AccessControlType=Allow; IdentityReference=NT AUTHORITY\\SYSTEM}",
"@{FileSystemRights=FullControl; AccessControlType=Allow; IdentityReference=CREATOR OWNER}",
"@{FileSystemRights=FullControl; AccessControlType=Allow; IdentityReference=NT AUTHORITY\\SYSTEM}",
"@{FileSystemRights=ReadAndExecute, Synchronize; AccessControlType=Allow; IdentityReference=BUILTIN\\Users}"
],
"Sddl": "REMOVED"
}
],
"SubDirectories": [],
"TotalFileCount": 0,
"TotalDirectoryCount": 1,
"TotalFolderSizeBytes": "1,630,278,865 Bytes",
"TotalFolderSizeInMB": "1,554.76 MB",
"TotalFolderSizeInGB": "1.52 GB",
"TreeSizeDirFailed": null,
"TreeSizeFileFailed": null,
"TreeErrorHistory": null
}
]
这是我正在使用的查询:
let
Source = Folder.Files("C:\DATA"),
#"Filtered Hidden Files1" = Table.SelectRows(Source, each [Attributes]?[Hidden]? <> true),
#"Invoke Custom Function1" = Table.AddColumn(#"Filtered Hidden Files1", "Transform File (2)", each #"Transform File (2)"([Content])),
#"Renamed Columns1" = Table.RenameColumns(#"Invoke Custom Function1", {"Name", "Source.Name"}),
#"Removed Other Columns1" = Table.SelectColumns(#"Renamed Columns1", {"Source.Name", "Transform File (2)"}),
#"Expanded Table Column1" = Table.ExpandTableColumn(#"Removed Other Columns1", "Transform File (2)", Table.ColumnNames(#"Transform File (2)"(#"Sample File (2)"))),
#"Changed Type" = Table.TransformColumnTypes(#"Expanded Table Column1",{{"Source.Name", type text}, {"Server", type text}, {"Name", type text}, {"ScopeName", type text}, {"Path", type text}, {"Description", type text}, {"ShareState", Int64.Type}, {"AvailabilityType", Int64.Type}, {"ShareRights", type any}, {"ShareSddl", type text}, {"ShareRoot", type any}, {"SubDirectories", type any}, {"TotalFileCount", Int64.Type}, {"TotalDirectoryCount", Int64.Type}, {"TotalFolderSizeBytes", type text}, {"TotalFolderSizeInMB", type text}, {"TotalFolderSizeInGB", type text}, {"TreeSizeDirFailed", Int64.Type}, {"TreeSizeFileFailed", Int64.Type}, {"TreeErrorHistory", type any}}),
#"Removed Columns" = Table.RemoveColumns(#"Changed Type",{"Source.Name"}),
#"Filtered Rows" = Table.SelectRows(#"Removed Columns", each ([ScopeName] = "*")),
#"Removed Columns1" = Table.RemoveColumns(#"Filtered Rows",{"SubDirectories", "ScopeName", "Path", "Description", "ShareState", "AvailabilityType", "ShareSddl", "TotalFileCount", "TotalDirectoryCount", "TotalFolderSizeBytes", "TotalFolderSizeInMB", "TotalFolderSizeInGB", "TreeSizeDirFailed", "TreeSizeFileFailed", "TreeErrorHistory"}),
#"Expanded ShareRoot" = Table.ExpandListColumn(#"Removed Columns1", "ShareRoot"),
#"Expanded ShareRoot1" = Table.ExpandRecordColumn(#"Expanded ShareRoot", "ShareRoot", {"Path", "Owner", "Group", "Access", "Sddl"}, {"ShareRoot.Path", "ShareRoot.Owner", "ShareRoot.Group", "ShareRoot.Access", "ShareRoot.Sddl"}),
#"Expanded ShareRights" = Table.ExpandListColumn(#"Expanded ShareRoot1", "ShareRights"),
#"Expanded ShareRights1" = Table.ExpandRecordColumn(#"Expanded ShareRights", "ShareRights", {"AccountName", "AccessRight", "AccessControlType"}, {"ShareRights.AccountName", "ShareRights.AccessRight", "ShareRights.AccessControlType"}),
#"Added Custom" = Table.AddColumn(#"Expanded ShareRights1", "Custom", each if Value.Is([ShareRoot.Access], List.Type) then Text.Combine([ShareRoot.Access], "") else Text.Combine({"@{FileSystemRights=" & Number.ToText(Record.Field([ShareRoot.Access], "FileSystemRights")), "; AccessControlType=" & Number.ToText(Record.Field([ShareRoot.Access], "AccessControlType")), "; IdentityReference=" & Record.Field([ShareRoot.Access], "IdentityReference"), "}"})),
#"Filtered Rows1" = Table.SelectRows(#"Added Custom", each ([ShareRoot.Path] <> null)),
#"Removed Columns2" = Table.RemoveColumns(#"Filtered Rows1",{"ShareRoot.Access"}),
#"Renamed Columns" = Table.RenameColumns(#"Removed Columns2",{{"Custom", "ShareRoot.Access"}}),
#"Reordered Columns" = Table.ReorderColumns(#"Renamed Columns",{"Server", "Name", "ShareRights.AccountName", "ShareRights.AccessRight", "ShareRights.AccessControlType", "ShareRoot.Path", "ShareRoot.Owner", "ShareRoot.Access", "ShareRoot.Group", "ShareRoot.Sddl"}),
#"Added Custom1" = Table.AddColumn(#"Reordered Columns", "ID", each [Server] & "-" & [Name]),
#"Reordered Columns1" = Table.ReorderColumns(#"Added Custom1",{"ID", "Server", "Name", "ShareRights.AccountName", "ShareRights.AccessRight", "ShareRights.AccessControlType", "ShareRoot.Path", "ShareRoot.Owner", "ShareRoot.Access", "ShareRoot.Group", "ShareRoot.Sddl"}),
#"Replaced Value" = Table.ReplaceValue(#"Reordered Columns1","@{","•",Replacer.ReplaceText,{"ShareRoot.Access"}),
#"Replaced Value1" = Table.ReplaceValue(#"Replaced Value","}","#(cr)#(lf)",Replacer.ReplaceText,{"ShareRoot.Access"})
in
#"Replaced Value1"
有什么想法可以解决这个问题吗?谢谢!
看看这是否有效,您可以稍后添加一些错误检查 请注意,您的 JSON 示例很糟糕,因为您总是需要 // 而不是单个 /
let Source = Folder.Files("C:\temp"),
Filter = Table.SelectRows(Source, each ([Extension] = ".json")),
#"Parsed JSON" = Table.TransformColumns(Filter,{{"Content", Json.Document}}),
#"Renamed Columns" = Table.RenameColumns(#"Parsed JSON",{{"Name", "File_Name"}}),
T0 = Table.TransformColumns(#"Renamed Columns",{{"Content", each Table.Combine(List.Transform(_, each Table.PromoteHeaders(Table.Transpose(Record.ToTable(_))))) }}),
#"Removed Other Columns" = Table.SelectColumns(T0,{"Content", "File_Name", "Date modified", "Date created", "Folder Path"}),
r0=Table.ColumnNames(Table.Combine(Table.Column( #"Removed Other Columns", "Content"))),
Expand0 = Table.ExpandTableColumn(#"Removed Other Columns", "Content",r0,r0 ),
T1 = Table.TransformColumns(Expand0,{{"ShareRights", each Table.Combine(List.Transform(_, each Table.PromoteHeaders(Table.Transpose(Record.ToTable(_))))) }}),
T2 = Table.TransformColumns(T1,{{"ShareRoot", each Table.Combine(List.Transform(_, each Table.PromoteHeaders(Table.Transpose(Record.ToTable(_))))) }}),
T3 = Table.TransformColumns(T2,{{"SubDirectories", each Table.Combine(List.Transform(_, each Table.PromoteHeaders(Table.Transpose(Record.ToTable(_))))) }}),
r1=Table.ColumnNames(Table.Combine(Table.Column( T3, "ShareRights"))),
r2=Table.ColumnNames(Table.Combine(Table.Column( T3, "ShareRoot"))),
r3=Table.ColumnNames(Table.Combine(Table.Column( T3, "SubDirectories"))),
Expand1 = Table.ExpandTableColumn(T3, "ShareRights",r1,List.Transform(r1, each "ShareRights"&_) ),
Expand2 = Table.ExpandTableColumn(Expand1, "ShareRoot",r2,List.Transform(r2, each "ShareRoot"&_) ),
Expand3 = Table.ExpandTableColumn(Expand2, "SubDirectories",r3,List.Transform(r3, each "SubDirectories"&_) ),
#"Expanded ShareRootAccess" = Table.ExpandListColumn(Expand3, "ShareRootAccess")
in #"Expanded ShareRootAccess"