SAP HANA 数据库

总结

项目 说明
发布状态 正式版
产品 Excel
Power BI(语义模型)
Power BI(数据流)
Fabric(数据流 Gen2)
Power Apps(数据流)
Analysis Services
支持的身份验证类型 基本
数据库
Windows
函数参考文档 SapHana.Database

注意

由于部署计划和特定于主机的功能,某些功能可能只存在于一个产品中。

先决条件

需要 SAP 帐户才能登录到网站并下载驱动程序。 如果不确定,请与贵组织的 SAP 管理员联系。

要在 Power BI Desktop 或 Excel 中使用 SAP HANA,必须在本地客户端计算机上安装 SAP HANA ODBC 驱动程序,SAP HANA 数据连接才能正常工作。 可以从 SAP 开发工具下载 SAP HANA 客户端工具,其中包含所需的 ODBC 驱动程序。 也可以从 SAP 软件下载中心获取。 在“软件”门户中,搜索 Windows 计算机的 SAP HANA 客户端。 由于 SAP 软件下载中心的结构经常发生变化,因此没有有关站点导航的更多具体指导。 有关安装 SAP HANA ODBC 驱动程序的说明,请转到在 Windows 64 位上安装 SAP HANA ODBC 驱动程序

要在 Excel 中使用 SAP HANA,必须在本地客户端计算机上安装 32 位或 64 位 SAP HANA ODBC 驱动程序(具体取决于使用的是 32 位还是 64 位版本的 Excel)。

仅当具有 Office 2019 或 Microsoft 365 订阅时,才可在 Excel for Windows 中使用此功能。 如果您订阅了 Microsoft 365,确保拥有最新版本的 Office

HANA 1.0 SPS 12rev122.09、2.0 SPS 3rev30 和 BW/4HANA 2.0 受支持。

支持的功能

  • 导入
  • Direct Query(Power BI 语义模型)
  • 高级
    • SQL 语句

从 Power Query Desktop 连接到 SAP HANA 数据库

要从 Power Query Desktop 连接到 SAP HANA 数据库:

  1. 在 Power BI Desktop 中选择获取数据 > SAP HANA 数据库,或在 Excel 的数据 功能区中选择从数据库 > 从 SAP HANA 数据库

  2. 输入要连接到的 SAP HANA 服务器的名称和端口。 下图中的示例在端口 30015 上使用 SAPHANATestServer

    输入 SAP HANA 服务器信息。

    默认情况下,端口号设置为支持单个容器数据库。 如果 SAP HANA 数据库可以包含多个多租户数据库容器,请选择多容器系统数据库 (30013)。 如果要连接到租户数据库或具有非默认实例编号的数据库,请从“端口”下拉菜单中选择“自定义”。

    如果要从 Power BI Desktop 连接到 SAP HANA 数据库,则还可以选择“导入”或 DirectQuery。 本文中的示例使用导入,这是默认模式(也是 Excel 的唯一模式)。 有关在 Power BI Desktop 中使用 DirectQuery 连接到数据库的详细信息,请转到在 Power BI 中使用 DirectQuery 连接到 SAP HANA 数据源

    还可以输入 SQL 语句,或从高级选项启用列绑定。 详细信息:使用高级选项进行连接

    输入所有选项后,选择确定

  3. 如果是首次访问数据库,系统会要求您输入凭据进行身份验证。 在此示例中,SAP HANA 服务器需要数据库用户凭据,因此选择数据库,然后输入用户名和密码。 如有必要,输入服务器证书信息。

    输入服务器凭证。

    此外,可能还需要验证服务器证书。 有关使用验证服务器证书选项的详细信息,请参阅使用 SAP HANA 加密。 在 Power BI Desktop 和 Excel 中,默认启用验证服务器证书选项。 如果已在 ODBC 数据源管理器中设置这些选项,请清除验证服务器证书复选框。 要详细了解如何使用 ODBC 数据源管理器设置这些选项,请转到为 ODBC 客户端访问 SAP HANA 配置 SSL

    有关身份验证的详细信息,请转到使用数据源进行身份验证

    填写所有必填信息后,选择连接

  4. 导航器对话框中,可以选择转换数据以在 Power Query 编辑器中转换数据,也可以选择加载以加载数据。

从 Power Query Online 连接到 SAP HANA 数据库

要从 Power Query Online 连接到 SAP HANA 数据:

  1. 数据源页面中,选择 SAP HANA 数据库

  2. 输入要连接到的 SAP HANA 服务器的名称和端口。 下图中的示例在端口 30015 上使用 SAPHANATestServer

  3. (可选)从高级选项中输入 SQL 语句。 详细信息:使用高级选项进行连接

  4. 选择要用于访问数据库的本地数据网关的名称。

    注意

    无论数据是本地还是联机,都必须对此连接器使用本地数据网关。

  5. 选择要用于访问数据的身份验证类型。 还需要输入用户名和密码。

    注意

    目前,Power Query Online 仅支持“基本”身份验证。

  6. 如果使用任何加密连接,则选择使用加密连接,然后选择 SSL 加密提供程序。 如果未使用加密连接,请清除使用加密连接。 详细信息: 为 SAP HANA 启用加密

    SAP HANA 数据库在线登录。

  7. 选择“下一步”继续操作。

  8. 导航器对话框中,可以选择转换数据以在 Power Query 编辑器中转换数据,也可以选择加载以加载数据。

使用高级选项进行连接

Power Query 提供一组高级选项,可以根据需要将这些选项添加到查询中。

下表介绍了可以在 Power Query 中设置的所有高级选项。

高级选项 说明
SQL 语句 详细信息:使用本机数据库查询从数据库导入数据
启用列绑定 在提取数据时将变量绑定到 SAP HANA 结果集的列。 可能会提高性能,但代价是内存利用率略高。 此选项仅在 Power Query Desktop 中可用。 详细信息:启用列绑定
ConnectionTimeout 一段持续时间,用于控制在放弃尝试与服务器建立连接之前等待的时间。 默认值为 15 秒。
CommandTimeout 一段持续时间,用于控制在取消服务器端查询之前允许该查询运行的时间。 默认值为十分钟。

SAP HANA 支持的功能

以下列表显示了 SAP HANA 支持的功能。 SAP HANA 数据库连接器的所有实现并非都支持此处列出的所有功能。

  • SAP HANA 数据库的 Power BI Desktop 和 Excel 连接器都使用 SAP ODBC 驱动程序,来提供最佳用户体验。

  • 在 Power BI Desktop 中,SAP HANA 同时支持 DirectQuery 和“导入”选项。

  • Power BI Desktop 支持 HANA 信息模型(如分析和计算视图),并具有优化的导航。

  • 借助 SAP HANA,还可以使用本机数据库查询 SQL 语句中的 SQL 命令连接到 HANA 目录表中的行表和列表,这些表不包括在导航器体验提供的分析/计算视图中。 还可以使用 ODBC 连接器查询这些表。

  • Power BI Desktop 包括 HANA 模型的优化导航。

  • Power BI Desktop 支持 SAP HANA 变量和输入参数。

  • Power BI Desktop 支持基于 HDI 容器的计算视图。

  • SapHana.Database 函数现在支持连接和命令超时。 详细信息:使用高级选项进行连接

    • 要在 Power BI 中访问基于 HDI 容器的计算视图,请确保使用 Power BI 的 HANA 数据库用户有权访问其中存储要访问的视图的 HDI 运行时容器。 要授予此访问权限,请创建允许访问 HDI 容器的角色。 然后将角色分配给将使用 Power BI 的 HANA 数据库用户。 (和往常一样,此用户还必须具有从 SYSBI 架构中的系统表中读取内容的权限。)要详细了解如何创建和分配数据库角色,请参阅 SAP 官方文档。 不妨先从阅读这篇 SAP 博客文章开始。

    • 附加到基于 HDI 的计算视图的 HANA 变量目前存在一些限制。 这些限制是因为 HANA 方面出错。 首先,无法将 HANA 变量应用到基于 HDI 容器的计算视图的共享列中。 若要修复这一限制,请升级到 HANA 2 版本 37.02 及更高版本或 HANA 2 版本 42 及更高版本。 其次,变量和参数的多项默认值当前不在 Power BI UI 中显示。 SAP HANA 中的错误会导致此限制,但是 SAP 尚未发布修复程序。

启用列绑定

从数据源提取的数据以应用程序为此目的分配的变量返回到该应用程序。 在执行此操作之前,应用程序必须将这些变量关联或绑定到结果集的列;从概念上讲,此过程与将应用程序变量绑定到语句参数的过程相同。 当应用程序将变量绑定到结果集列时,会向驱动程序描述该变量(地址、数据类型等)。 驱动程序将这些信息存储在其为该语句维护的结构中,并在提取行时使用这些信息返回列中的值。

目前,使用 Power Query Desktop 连接到 SAP HANA 数据库时,可以选择启用列绑定高级选项来启用列绑定。

还可以通过在 Power Query 编辑栏或高级编辑器中手动将 EnableColumnBinding 选项添加到连接,在现有查询或 Power Query Online 中使用的查询中启用列绑定。 例如:

SapHana.Database("myserver:30015", [Implementation = "2.0", EnableColumnBinding = true]),

存在与手动添加 EnableColumnBinding 选项相关的限制:

  • 启用列绑定在导入和 DirectQuery 模式下都有效。 但是,无法改造现有的 DirectQuery 查询来使用此高级选项。 相反,必须创建新查询才能使此功能正常工作。
  • 在 SAP HANA Server 2.0 或更高版本中,列绑定要么全有,要么全无。 如果无法绑定某些列,则不会绑定任何列,并且用户将收到异常,例如 DataSource.Error: Column MEASURE_UNIQUE_NAME of type VARCHAR cannot be bound (20002 > 16384)
  • SAP HANA 版本 1.0 服务器并不总是报告正确的列长度。 在此上下文中,EnableColumnBinding 允许部分列绑定。 对于某些查询,这可能意味着未绑定任何列。 如果未绑定任何列,则不会获得性能优势。

SAP HANA 数据库连接器中的本机查询支持

Power Query SAP HANA 数据库连接器支持本机查询。 有关如何在 Power Query 中使用本机查询的信息,请转到使用本机数据库查询从数据库导入数据

本机查询上的查询折叠

Power Query SAP HANA 数据库连接器现在支持本机查询上的查询折叠。 详细信息:本机查询上的查询折叠

注意

在 Power Query SAP HANA 数据库连接器中,将 EnableFolding 设置为 true 时,本机查询不支持重复的列名称。

本机查询中的参数

Power Query SAP HANA 数据库连接器现在支持本机查询中的参数。 可以使用 Value.NativeQuery 语法在本机查询中指定参数。

与其他连接器不同,SAP HANA 数据库连接器同时支持 EnableFolding = True 和指定参数。

要在查询中使用参数,请将问号 (?) 放在代码中作为占位符。 要指定参数,请使用SqlType 文本值和该 SqlTypeValue 中的值。 Value 可以是任何 M 值,但必须分配给指定的 SqlType 值。

可通过多种方式指定参数:

  • 仅以列表的形式提供值:

    { “Seattle”, 1, #datetime(2022, 5, 27, 17, 43, 7) }
    
  • 以列表的形式提供值和类型:

    { [ SqlType = "CHAR", Value = "M" ], 
       [ SqlType = "BINARY", Value = Binary.FromText("AKvN", BinaryEncoding.Base64) ], 
       [ SqlType = "DATE", Value = #date(2022, 5, 27) ] }
    
  • 混合并匹配两者:

    { “Seattle”, 1, [ SqlType = "SECONDDATE", Value = #datetime(2022, 5, 27, 17, 43, 7) ] }
    

SqlType 遵循 SAP HANA 定义的标准类型名称。 例如,以下列表包含最常用的类型:

  • BIGINT
  • BINARY
  • BOOLEAN
  • CHAR
  • DATE
  • DECIMAL
  • DOUBLE
  • INTEGER
  • NVARCHAR
  • SECONDDATE
  • SHORTTEXT
  • SMALLDECIMAL
  • SMALLINT
  • TIME
  • TIMESTAMP
  • VARBINARY
  • VARCHAR

以下示例演示如何提供参数值列表。

let
    Source = Value.NativeQuery(
        SapHana.Database(
            "myhanaserver:30015", 
            [Implementation = "2.0"]
        ), 
        "select ""VARCHAR_VAL"" as ""VARCHAR_VAL""
    from ""_SYS_BIC"".""DEMO/CV_ALL_TYPES""
    where ""VARCHAR_VAL"" = ? and ""DATE_VAL"" = ?
    group by ""VARCHAR_VAL""
    ", 
        {"Seattle", #date(1957, 6, 13)}, 
        [EnableFolding = true]
    )
in
    Source

以下示例演示如何提供记录列表(或混合值和记录):

let
    Source = Value.NativeQuery(
        SapHana.Database(Server, [Implementation="2.0"]), 
    "select
        ""COL_VARCHAR"" as ""COL_VARCHAR"",
        ""ID"" as ""ID"",
        sum(""DECIMAL_MEASURE"") as ""DECIMAL_MEASURE""
    from ""_SYS_BIC"".""DEMO/CV_ALLTYPES""
    where
        ""COL_ALPHANUM"" = ? or
        ""COL_BIGINT"" = ? or
        ""COL_BINARY"" = ? or
        ""COL_BOOLEAN"" = ? or
        ""COL_DATE"" = ?
    group by 
        ""COL_ALPHANUM"",
        ""COL_BIGINT"",
        ""COL_BINARY"",
        ""COL_BOOLEAN"",
        ""COL_DATE"",
       {
            [ SqlType = "CHAR", Value = "M" ],                                                // COL_ALPHANUM - CHAR
            [ SqlType = "BIGINT", Value = 4 ],                                                // COL_BIGINT - BIGINT
            [ SqlType = "BINARY", Value = Binary.FromText("AKvN", BinaryEncoding.Base64) ],   // COL_BINARY - BINARY
            [ SqlType = "BOOLEAN", Value = true ],                                            // COL_BOOLEAN - BOOLEAN
            [ SqlType = "DATE", Value = #date(2022, 5, 27) ],                                 // COL_DATE - TYPE_DATE
        } ,
        [EnableFolding=false]
    )
in
    Source

动态属性支持

SAP HANA 数据库连接器处理已计算列的方式得到了改进。 SAP HANA 数据库连接器是一个“多维数据集”连接器,有一些操作集(添加项、折叠列等)在“多维数据集”空间中进行。 此多维数据集空间显示在 Power Query Desktop 和 Power Query Online 用户界面中,该“多维数据集”图标将替换更常见的“表”图标。

Power Query 中当前视图左侧的屏幕截图,突出显示行号列顶部的多维数据集图标。

之前,在添加表列(或在内部添加列的另一个转换)时,查询将“退出多维数据集空间”,并且将在表级别完成所有操作。 在某些时候,此退出可能会导致查询停止折叠。 不再可在添加列后执行多维数据集操作。

由于此更改,添加的列被视为多维数据集中的动态属性。 如果对于此操作,查询仍保留在多维数据集空间中,其优点是让您即使在添加列后也能继续使用多维数据集操作。

注意

仅当连接到 SAP HANA Server 2.0 或更高版本中的计算视图时,此新功能才可用。

以下示例查询利用这一新功能。 过去,应用 Cube.CollapseAndRemoveColumns 时,会收到“值不是多维数据集”异常。

let
    Source = SapHana.Database(“someserver:someport”, [Implementation="2.0"]),
    Contents = Source{[Name="Contents"]}[Data],
    SHINE_CORE_SCHEMA.sap.hana.democontent.epm.models = Contents{[Name="SHINE_CORE_SCHEMA.sap.hana.democontent.epm.models"]}[Data],
    PURCHASE_ORDERS1 = SHINE_CORE_SCHEMA.sap.hana.democontent.epm.models{[Name="PURCHASE_ORDERS"]}[Data],
    #"Added Items" = Cube.Transform(PURCHASE_ORDERS1,
        {
            {Cube.AddAndExpandDimensionColumn, "[PURCHASE_ORDERS]", {"[HISTORY_CREATEDAT].[HISTORY_CREATEDAT].Attribute", "[Product_TypeCode].[Product_TypeCode].Attribute", "[Supplier_Country].[Supplier_Country].Attribute"}, {"HISTORY_CREATEDAT", "Product_TypeCode", "Supplier_Country"}},
            {Cube.AddMeasureColumn, "Product_Price", "[Measures].[Product_Price]"}
        }),
    #"Inserted Year" = Table.AddColumn(#"Added Items", "Year", each Date.Year([HISTORY_CREATEDAT]), Int64.Type),
    #"Filtered Rows" = Table.SelectRows(#"Inserted Year", each ([Product_TypeCode] = "PR")),
    #"Added Conditional Column" = Table.AddColumn(#"Filtered Rows", "Region", each if [Supplier_Country] = "US" then "North America" else if [Supplier_Country] = "CA" then "North America" else if [Supplier_Country] = "MX" then "North America" else "Rest of world"),
    #"Filtered Rows1" = Table.SelectRows(#"Added Conditional Column", each ([Region] = "North America")),
    #"Collapsed and Removed Columns" = Cube.CollapseAndRemoveColumns(#"Filtered Rows1", {"HISTORY_CREATEDAT", "Product_TypeCode"})
in
    #"Collapsed and Removed Columns"

后续步骤

以下文章包含连接到 SAP HANA debase 时您可能发现很有帮助的详细信息。