在 PowerBI 中将 dBGeography 解析为纬度和经度
Parse dBGeography to latitude and longitude in PowerBI
有没有办法使用 Power Query 将 dBGeography 解析为纬度或经度?或者我能做到的唯一方法是在我的 dB 中增加 2 个列,这似乎不是一个很好的解决方案。
编辑:dB 值是这样的:0xE6100000010C17D9CEF753D347407593180456965EC0
您可以通过从 PowerQuery 中选择工具栏中的“转换数据”选项来执行此操作。
在下面的代码中,我创建了一个列的副本,然后:
- 将“POINT (”替换为空(空白)
- 将“)”替换为空(空白)
- 拆分“ ”上的点 (space) 以获得两个字段。
第一个是纬度,第二个是经度。
let
Source = Sql.Database("my.database.windows.net", "mydb"),
dbo_FactTest = Source{[Schema="dbo",Item="FactTest"]}[Data],
#"Removed Columns1" = Table.RemoveColumns(dbo_FactTest,{"MyTextData"}),
#"Duplicated Column" = Table.DuplicateColumn(#"Removed Columns1", "geo", "geo - Copy"),
#"Renamed Columns" = Table.RenameColumns(#"Duplicated Column",{{"geo - Copy", "geo - original"}}),
#"Replaced Value" = Table.ReplaceValue(#"Renamed Columns","POINT (","",Replacer.ReplaceText,{"geo"}),
#"Replaced Value1" = Table.ReplaceValue(#"Replaced Value",")","",Replacer.ReplaceText,{"geo"}),
#"Split Column by Delimiter" = Table.SplitColumn(#"Replaced Value1", "geo", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"geo.1", "geo.2"}),
#"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"geo.1", type number}, {"geo.2", type number}}),
#"Renamed Columns1" = Table.RenameColumns(#"Changed Type",{{"geo.1", "Lat"}, {"geo.2", "Long"}})
in
#"Renamed Columns1"
从您的编辑看来,您使用的是 SQL 2008(或以旧格式存储数据的升级),其中点以十六进制格式保存。您需要做的是使用 SQL 在自定义 PowerBI 查询中提取纬度和经度。在 PowerBI 中,当 select 将您的数据库作为源时,单击“高级选项”,您可以放置自定义 select 语句,将十六进制解析为您可以使用的内容。请参阅下面的屏幕截图。
注意:“高级选项”仅在设置新数据源时可用,使用“最近的来源”选项不允许您捕获自己的查询。
我发现 this Whosebug answer 可以帮助您在 SQL select 语句中进行转换。
Call .STAsText() / .ToString() / .AsTextZM() on the value to see it in
human readable form.
有没有办法使用 Power Query 将 dBGeography 解析为纬度或经度?或者我能做到的唯一方法是在我的 dB 中增加 2 个列,这似乎不是一个很好的解决方案。
编辑:dB 值是这样的:0xE6100000010C17D9CEF753D347407593180456965EC0
您可以通过从 PowerQuery 中选择工具栏中的“转换数据”选项来执行此操作。
在下面的代码中,我创建了一个列的副本,然后:
- 将“POINT (”替换为空(空白)
- 将“)”替换为空(空白)
- 拆分“ ”上的点 (space) 以获得两个字段。
第一个是纬度,第二个是经度。
let
Source = Sql.Database("my.database.windows.net", "mydb"),
dbo_FactTest = Source{[Schema="dbo",Item="FactTest"]}[Data],
#"Removed Columns1" = Table.RemoveColumns(dbo_FactTest,{"MyTextData"}),
#"Duplicated Column" = Table.DuplicateColumn(#"Removed Columns1", "geo", "geo - Copy"),
#"Renamed Columns" = Table.RenameColumns(#"Duplicated Column",{{"geo - Copy", "geo - original"}}),
#"Replaced Value" = Table.ReplaceValue(#"Renamed Columns","POINT (","",Replacer.ReplaceText,{"geo"}),
#"Replaced Value1" = Table.ReplaceValue(#"Replaced Value",")","",Replacer.ReplaceText,{"geo"}),
#"Split Column by Delimiter" = Table.SplitColumn(#"Replaced Value1", "geo", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"geo.1", "geo.2"}),
#"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"geo.1", type number}, {"geo.2", type number}}),
#"Renamed Columns1" = Table.RenameColumns(#"Changed Type",{{"geo.1", "Lat"}, {"geo.2", "Long"}})
in
#"Renamed Columns1"
从您的编辑看来,您使用的是 SQL 2008(或以旧格式存储数据的升级),其中点以十六进制格式保存。您需要做的是使用 SQL 在自定义 PowerBI 查询中提取纬度和经度。在 PowerBI 中,当 select 将您的数据库作为源时,单击“高级选项”,您可以放置自定义 select 语句,将十六进制解析为您可以使用的内容。请参阅下面的屏幕截图。
注意:“高级选项”仅在设置新数据源时可用,使用“最近的来源”选项不允许您捕获自己的查询。
我发现 this Whosebug answer 可以帮助您在 SQL select 语句中进行转换。
Call .STAsText() / .ToString() / .AsTextZM() on the value to see it in human readable form.