You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Power Query中UTF-32表情符号M代码未被SAP HANA处理的解决方法

Power Query添加表情符号列报错的解决办法

问题背景

我在Power Query中编写M代码,试图创建包含🚢的列,代码如下:

#"Added Column" = Table.AddColumn(#"PreviousStep", "Column Name", each Character.FromNumber(128674))

运行时出现ODBC语法错误,具体报错信息:

DataSource.Error: ODBC: ERROR [42000] [SAP AG][LIBODBCHDB DLL][HDBODBC] Syntax error or access violation; 257 sql syntax error: incorrect syntax near "🚢": line 36 col 5 (at pos 2176)
Details:
DataSourceKind = SapHana
DataSourcePath = xxx.xxx.xxx:xxx
OdbcErrors=[Table]

推测是Power Query无法正确处理UTF-32编码的表情符号,需要纯Power Query层面的解决方案,不使用DAX。完整M代码如下:

let
    Source = SapHana.Database(DataSource, [Implementation="2.0"]),
    Contents = Source{[Name="XX"]}[Data],
    Schema = Contents{[Name="Schema"]}[Data],
    Table = Schema{[Name="Table"]}[Data],
    #"Added Items" = Cube.Transform(Table,
        {
            {Cube.AddAndExpandDimensionColumn, "Table", {"columns"}, {"Columns Names"}}
        }),
    #"Added Column" = Table.AddColumn(#"Added Items", "Columns Name", each "🚢"),
    #"Added Column1" = Table.AddColumn(#"Added Column", "Column Name1", each "⭐"),
    #"Added Conditional Column" = Table.AddColumn(#"Added Column1", "Conditional Column Name", each if [XX] = "xx" then [XX] else null),
    #"Changed Type" = Table.TransformColumnTypes(#"Added Conditional Column",{{"XX", type datetime}}),
    #"Filtered Rows" = Table.SelectRows(#"Changed Type", each not Text.StartsWith([XXYY], "xxyy "))
in
    #"Filtered Rows"

解决方案

问题本质是Power Query将添加表情符号列的操作推送到了SAP HANA数据源执行,但HANA的ODBC驱动不支持解析UTF-32表情符号的语法。以下是两种纯Power Query的解决方法:

方法1:缓冲数据到本地,强制本地执行操作

在添加表情符号列之前,用Table.Buffer()把数据加载到本地内存,切断与数据源的实时关联,避免后续操作被推送到HANA执行。修改后的关键代码如下:

#"Added Items" = Cube.Transform(Table,
    {
        {Cube.AddAndExpandDimensionColumn, "Table", {"columns"}, {"Columns Names"}}
    }),
// 新增缓冲步骤,将数据加载到本地
#"Buffered Data" = Table.Buffer(#"Added Items"),
// 基于缓冲后的本地数据添加表情符号列
#"Added Column" = Table.AddColumn(#"Buffered Data", "Columns Name", each "🚢"),

方法2:使用UTF-16代理对生成表情符号

如果缓冲后仍有问题,可通过UTF-16代理对组合生成表情符号(🚢的UTF-16代理对为U+D83D和U+DEE2,对应十进制的55356和56530),替代直接输入表情符号或UTF-32编码:

#"Added Column" = Table.AddColumn(#"Buffered Data", "Columns Name", each Character.FromNumber(55356) & Character.FromNumber(56530)),

这种方式能确保Power Query在本地正确生成表情符号,避免直接传递表情符号字符串到数据源引发语法错误。

验证

替换代码后运行查询,检查错误是否消失,确认表情符号列正常显示。

内容的提问来源于stack exchange,提问作者Abdulrahman Hocaoglu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 15:53:16