SAP Business Warehouse 连接器故障排除
本文提供使用 SAP Business Warehouse (BW) 连接器的故障排除情况(和可能的解决方案)。
收集 SAP BW 高级跟踪
注意
收集发送到 SAP BW 服务器的查询的跟踪时,需要某些选项和设置,这些选项和设置只能使用 Power BI Desktop 提供。 如果还没有 Power BI Desktop 的副本,可以在 Microsoft 下载中心获取副本。 可以使用此免费版本设置高级跟踪的所有必需选项和设置。
多次发生错误时,收集发送到 SAP BW 服务器的查询及其响应的跟踪可能很有帮助。 以下过程演示如何为使用 SAP BW 连接器时发生的问题设置高级跟踪。
关闭 Power BI Desktop(如果正在运行)。
创建新环境变量:
从 Windows 控制面板中,选择系统>高级系统设置。
还可以打开“命令提示符”并输入 sysdm.cpl。
在系统属性中,选择高级选项卡,然后选择环境变量。
在环境变量中的系统变量下,选择新建。
在新建系统变量中,在变量名称下输入 PBI_EnableSapBwTracing,并在变量值下输入 true。
选择“确定”。
激活此高级跟踪后,将在跟踪文件夹中再创建一个名为 SapBw 的文件夹。 有关跟踪文件夹的位置,请参阅此过程的其余部分。
打开 Power BI Desktop。
在捕获之前清除缓存。
- 在 Power BI Desktop 中,选择文件选项卡。
- 选择选项和设置>选项。
- 在全局设置下,选择数据加载。
- 选择清除缓存。
当仍在选项和设置中时,启用跟踪。
- 在全局设置下,选择诊断。
- 选择“启用跟踪”。
仍在选项和设置>全局>诊断中时,选择打开故障转储/跟踪文件夹。 在捕获新跟踪之前,确保已清除该文件夹。
重现此问题。
完成后,关闭 Power BI Desktop,以便将日志刷新到磁盘。
可以在 SapBw 文件夹下查看新捕获的跟踪(将显示跟踪文件夹,其中包含 SapBw 文件夹,方法是在 Power BI Desktop 的诊断页面中选择打开故障转储/跟踪文件夹)。
通过删除环境变量或将 PBI_EnableSapBwTracing 设置为 false,确保在完成后停用此高级跟踪。
使用 CPIC 跟踪收集 SAP BW 高级跟踪
如果要调查身份验证或单一登录 (SSO) 问题,请使用与收集 SAP BW 高级跟踪中所述相同的过程(步骤 2d 除外),输入以下其他系统变量和值:
- CPIC_TRACE—3
- CPIC_TRACE_DIR - 有效文件夹,例如:E:\traces\CPIC
过程的其余部分保持不变。 可以在 CPIC_TRACE_DIR 环境变量中指定的文件夹中查看 CPIC 跟踪。 还可以在 SapBw 文件夹下查看常规跟踪。
此外,确保在完成后停用此高级跟踪,方法是删除环境变量或将 BI_EnableSapBwTracing 设置为 false 并将 CPIC_TRACE 设置为 0。
执行 SAP .NET 连接器的干净安装
如果需要重新安装 SAP .NET 连接器:
删除(卸载)SAP .NET 连接器。
删除后,通过确保以下路径不存在或不包含 DLL,验证 SAP .NET 连接器是否未安装在全局程序集缓存 (GAC) 中:
32 位 GAC:
C:\Windows\Microsoft.NET\assembly\GAC_32\sapnco\v4.0_3.0.0.42__50436dca5c7f7d23
C:\Windows\Microsoft.NET\assembly\GAC_32\sapnco_utils\v4.0_3.0.0.42__50436dca5c7f7d23
64 位 GAC:
C:\Windows\Microsoft.NET\assembly\GAC_64\sapnco\v4.0_3.0.0.42__50436dca5c7f7d23
C:\Windows\Microsoft.NET\assembly\GAC_64\sapnco_utils\v4.0_3.0.0.42__50436dca5c7f7d23
验证 Program Files 中是否没有二进制文件。 确保以下位置不存在或为空:
C:\Program Files\SAP\SAP_DotNetConnector3_Net40_x64
C:\Program Files (x86)\sap\SAP_DotNetConnector3_Net40_x86
重新安装连接器,并记得选择将程序集安装到 GAC 选项。 建议使用最新的 3.0.23。
错误消息故障排除
未找到 SAP BW ErrorCode 方法
Method not found: 'Int32 SAP.Middleware.Connector.RfcBaseException.get_ErrorCode()'
当 SAP BW 服务器上发生错误并且 SAP .NET 连接器尝试检索有关该错误的信息时,将引发此错误。 但是,此错误可能隐藏了实际错误。 在以下情况下可能会发生此错误:
使用旧版 SAP .NET 连接器。
安装了多个版本的 SAP .NET 连接器。
SAP .NET 连接器安装了两次,一次安装在全局程序集缓存 (GAC) 中,一次未安装在 GAC 中。
按照执行 SAP .NET 连接器的干净安装下的说明重新安装连接器。
这无法解决问题,但将提供实际的错误消息。
异常:“Microsoft.Mashup.Engine1.Library.SapBusinessWarehouse.
SapBwMicrosoftProviderFactoryService“的类型初始化程序引发异常。
按照执行 SAP .NET 连接器的干净安装下的说明重新安装连接器。
此连接器需要一个或多个附加组件
如果收到此错误消息,请使用以下故障排除步骤:
验证是否以正确的位长度安装 SAP .NET 连接器的版本。 如果已安装 Power BI Desktop 64 位,确保安装了 64 位 SAP .NET 连接器。
验证是否在安装 SAP .NET 连接器时选中将程序集安装到 GAC。 要验证 GAC 是否已安装,请打开 Windows 资源管理器并转到:
C:\Windows\Microsoft.NET\assembly\GAC_64\sapnco
例如,完整路径可能为:
C:\Windows\Microsoft.NET\assembly\GAC_64\sapnco\v4.0_3.0.0.42__50436dca5c7f7d23\sapnco.dll
如果安装了 32 位版本的 SAP .NET 连接器,则为 C:\Windows\Microsoft.NET\assembly\GAC_32\sapnco\v4.0_3.0.0.42__50436dca5c7f7d23\sapnco.dll(需要 32 位版本的 Power BI Desktop)。
检查 GAC 的另一种方法是使用 gacutil(禁用强名称签名的选项之一)。 需要从 64 位命令提示符运行它。 可以通过打开命令提示符,导航到 gacutil.exe 路径并执行来检查 GAC 的内容:
gacutil -l
例如,在输出中应该看到:
sapnco, Version=3.0.0.42, Culture=neutral, PublicKeyToken=50436dca5c7f7d23, processorArchitecture=AMD64 sapnco_utils, Version=3.0.0.42, Culture=neutral, PublicKeyToken=50436dca5c7f7d23, processorArchitecture=AMD64
“函数没有 RFC 授权 ...*
实现 2.0 需要访问以下 BAPI。 要解决此问题,请联系 SAP Basis 团队,并为用户请求这些 BAPI 和 RFC 的权限。
连接性:
- RFC_PING
- RFC_METADATA_GET
MDX 执行:
- RSR_MDX_CREATE_OBJECT
- BAPI_MDDATASET_CREATE_OBJECT
- BAPI_MDDATASET_SELECT_DATA
- BAPI_MDDATASET_DELETE_OBJECT
- RSR_MDX_GET_AXIS_INFO
- RSR_MDX_GET_AXIS_DATA
- RSR_MDX_GET_CELL_DATA
- BAPI_MDDATASET_GET_AXIS_INFO
- BAPI_MDDATASET_GET_AXIS_DATA
- BAPI_MDDATASET_GET_CELL_DATA
ExecutionMode 平展:
- RSR_MDX_GET_FLAT_DATA
- RSR_MDX_GET_FS_DATA
- BAPI_MDDATASET_GET_FLAT_DATA
- BAPI_MDDATASET_GET_FS_DATA
ExecutionMode 流式处理:
- BAPI_MDDATASET_GET_STREAMDATA
- BAPI_MDDATASET_GET_STREAMINFO
ExecutionMode BasXml:
- RSR_MDX_BXML_GET_DATA
- RSR_MDX_BXML_GET_GZIP_DATA
- RSR_MDX_BXML_GET_INFO
- RSR_MDX_BXML_SET_BINDING
元数据:
- BAPI_MDPROVIDER_GET_DIMENSIONS
- BAPI_MDPROVIDER_GET_CATALOGS
- BAPI_MDPROVIDER_GET_CUBES
- BAPI_MDPROVIDER_GET_MEASURES
- BAPI_MDPROVIDER_GET_HIERARCHYS
- BAPI_MDPROVIDER_GET_LEVELS
- BAPI_MDPROVIDER_GET_PROPERTIES
- BAPI_MDPROVIDER_GET_MEMBERS
- BAPI_MDPROVIDER_GET_VARIABLES
信息:
- BAPI_IOBJ_GETDETAIL(类型化维度(DATS、TIMS)需要)
- BAPI_USER_GET_DETAIL(仅用于平展接口)
- RFC_READ_TABLE(目录名称和某些变量值调用需要)
基础 SAP .NET 连接器可能会调用:
- RFC_GET_FUNCTION_INTERFACE
- FUNCTION_IMPORT_INTERFACE
- DDIF_FIELDINFO_GET
- SYSTEM_FINISH_ATTACH_GUI
- BGRFC_DEST_CONFIRM
- BGRFC_CHECK_UNIT_STATE_SERVER
- BGRFC_DEST_SHIP
- ARFC_DEST_SHIP
- RFC_FUNCTION_SEARCH
- RFC_SYSTEM_INFO
- RFC_SET_REG_SERVER_PROPERTY
- RFC_DOCU
- SEO_GET_CLIF_REMOTE
- SYSTEM_PREPARE_ATTACH_GUI
- API_CLEAR_TID
- ARFC_DEST_CONFIRM
未找到方法 'Int32 SAP.Middleware.Connector.RfcBaseException.get_ErrorCode()
验证是否已正确安装 SAP .NET 连接器。 请参阅执行 SAP .NET 连接器的干净安装。
如果 GAC 中已安装的版本低于预期的 3.0.18.0 版本,则会出现此错误。 SAP 说明 2417315 讨论了此场景。
连接器设置的连接字符串属性
同时提供 SNC 合作伙伴名称和 SNC 库时,SAP BW 应用程序服务器连接器(实现 2.0)将在连接字符串中设置以下属性:
- SNC_MODE—SncModeApply
- SNC_LIB - 指定库路径;如果它是环境变量,则此时会进行扩展
- SNC_PARTNERNAME - 提供了值
- SNC_QOP = RfcConfigParameters.RfcSncQOP.Default
这些用于 SAP BW 应用程序服务器和 SAP BW 消息服务器连接。
对于这两种连接类型,连接器设置:
- LANG(语言)
- 客户端
对于 SAP BW 应用程序服务器连接,连接器设置:
- ASHOST (AppServerHost)
- SYSNR (SystemNumber)
对于 SAP BW 消息服务器连接,连接器设置:
- MSHOST (MessageServerHost)
- SYSID (SystemID)
- GROUP (LogonGroup)
含 <internal> 的 MDX 命令无效
此错误直接来自 SAP BW 服务器。 连接器的实现 1 基于 Netweaver RFC,未向用户公开这些错误,而是返回空结果集。
以下 SAP 说明中讨论了此问题。 要访问这些顺说明,需要 S 用户。 请联系 SAP Basis 团队,以应用此问题的相关修复。
- 1084454 - MDX:系统错误“含 <internal> 的 MDX 命令无效”
- 1282785 - MDX:系统错误“含 <internal> 的 MDX 命令无效”
- 401607 - 在切片器中具有 CROSSJOIN 的 MDX 命令错误
- 1786009 - 在将成员公式与特殊字符结合使用时 MDX 无效
此外,对于其他类似的错误,可以查看以下 SAP 说明的内容,并应用适合环境的说明:
问题和限制
更改 SAP 多维数据集上的变量名称会使 DirectQuery 报表处于中断且不可恢复的状态
出现以下症状:
错误消息 -
[Expression.Error] The import [XXXX] matches no exports.
在日志中 -
Message: [Expression.Error] The key didn't match any rows in the table.
堆栈跟踪:
at Microsoft.Mashup.Engine1.Runtime.TableValue.get_Item(Value key) at Microsoft.Mashup.Engine1.Library.Cube.CubeParametersModule.Cube.ApplyParameterFunctionValue.GetParameterValue(CubeValue cubeValue, Value parameter) at Microsoft.Mashup.Engine1.Library.Cube.CubeParametersModule.Cube.ApplyParameterFunctionValue.TypedInvoke(TableValue cube, Value parameter, Value arguments) Detail: [Key = [Id = \"[!V000004]\"], Table = #table({...}, {...})]
一种可能的解决方法是:
创建 PBIX 文件的副本(因为情况可能会中断)。
添加名为 PBI_AlwaysEnableQueryEditor 且值为 true 的环境变量。 此设置将允许在 DirectQuery 模式下访问查询编辑器。
注意
此环境变量不受支持,因此应仅按此处所述使用。
右键单击"多维数据集"查询,然后选择高级编辑器。
查询应有一行以“{Cube.ApplyParameter, "[!V000004]"(缺少的参数)”开头。 删除该行。
选择“完成”。
关闭 Power Query 编辑器。
刷新受影响的视觉对象。
如果上述解决方法不起作用,唯一的备用解决方法是重新创建报表。
SAP BW 中的数值数据
注意
以下信息仅适用于将 SAP BW 连接器的实现 1.0 或 SAP BW 连接器的实现 2.0 与平展模式配合使用(当 ExecutionMode=67 时)。
SAP BW 中的用户帐户对在 SAP GUI 中向用户显示小数值或日期/时间值的格式使用默认设置。
默认设置在 SAP 系统中的帐户的用户配置文件中维护,用户可以使用菜单路径系统>用户配置文件>自己的数据在 SAP GUI 中查看或更改这些设置。
Power BI Desktop 查询 SAP 系统,以获取连接的用户的十进制表示法,并使用该表示法设置 SAP BW 数据中的小数值的格式。
SAP BW 返回以 ,
(逗号)或 .
(点)作为小数分隔符的十进制数据。 要指定哪些 SAP BW 应用于小数分隔符,Power BI Desktop 使用的驱动程序将调用 BAPI_USER_GET_DETAIL
。 此调用会返回名为 DEFAULTS
的结构,该结构具有名为 DCPFM
的字段,用于存储十进制格式表示法。 该字段会采用以下值之一:
- ' ' (空格) = 小数点为逗号:N.NNN,NN
- 'X' = 小数点为句点:N,NNN.NN
- 'Y' = 小数点为 N NNN NNN,NN
报告此问题的客户发现,特定用户调用 BAPI_USER_GET_DETAIL
失败,显示不正确的数据,并显示类似于以下消息的错误消息:
You are not authorized to display users in group TI:
<item>
<TYPE>E</TYPE>
<ID>01</ID>
<NUMBER>512</NUMBER>
<MESSAGE>You are not authorized to display users in group TI</MESSAGE>
<LOG_NO/>
<LOG_MSG_NO>000000</LOG_MSG_NO>
<MESSAGE_V1>TI</MESSAGE_V1>
<MESSAGE_V2/>
<MESSAGE_V3/>
<MESSAGE_V4/>
<PARAMETER/>
<ROW>0</ROW>
<FIELD>BNAME</FIELD>
<SYSTEM>CLNTPW1400</SYSTEM>
</item>
要解决此错误,用户必须要求其 SAP 管理员授予在 Power BI 中使用的 SAP BW 用户执行 BAPI_USER_GET_DETAIL
的权限。 需要确定的另一点是,用户是否具有必需的 DCPFM
值,如本故障排除解决方案前面的内容所述。
SAP BEx 查询的连接
可以通过启用特定属性在 Power BI Desktop 中执行 BEx 查询,如下图所示:
MDX 接口限制
MDX 接口的限制是,长变量会丢失其技术名称,并替换为 V00000#。
导航器窗口中没有数据预览
在某些情况下,导航器对话框不显示数据预览,而是提供 对象引用未设置为对象 错误消息。
SAP 用户需要访问特定的 BAPI 函数模块,以便从 SAP BW InfoProvider 获取元数据和检索数据。 这些模块包括:
- BAPI_MDPROVIDER_GET_CATALOGS
- BAPI_MDPROVIDER_GET_CUBES
- BAPI_MDPROVIDER_GET_DIMENSIONS
- BAPI_MDPROVIDER_GET_HIERARCHYS
- BAPI_MDPROVIDER_GET_LEVELS
- BAPI_MDPROVIDER_GET_MEASURES
- BAPI_MDPROVIDER_GET_MEMBERS
- BAPI_MDPROVIDER_GET_VARIABLES
- BAPI_IOBJ_GETDETAIL
要解决此问题,请验证用户是否有权访问各种 MDPROVIDER 模块和 BAPI_IOBJ_GETDETAIL
。 要进一步解决此问题或类似问题,可以启用跟踪。 选择文件>选项和设置>选项。 在选项中,选择诊断,然后选择启用跟踪。 尝试在跟踪处于活动状态时从 SAP BW 检索数据,并检查跟踪文件以获取更多详细信息。
内存异常
在某些情况下,可能会遇到以下内存错误之一:
Message: No more memory available to add rows to an internal table.
Message: [DataSource.Error] SAP Business Warehouse: The memory request for [number] bytes could not be complied with.
Message: The memory request for [number] bytes could not be complied with.
这些内存异常来自 SAP BW 服务器,由于服务器内存不足以处理查询。 当查询返回大量结果或查询太复杂而服务器无法处理时(例如,当查询包含许多交叉联接时)时,可能会发生这种情况。
要解决此错误,建议简化查询或将其拆分为较小的查询。 如果可能,请向服务器推送更多聚合。 或者,请与 SAP Basis 团队联系,以增加服务器中可用的资源。
在 Power BI Desktop 中加载超过 60 个字符的文本字符串失败
在某些情况下,可能会发现文本字符串在 Power BI Desktop 中被截断为 60 个字符。
首先,遵循 2777473 - MDX:访问 BW 或 BW/4HANA 的 Power BI 的常见问题解答中的说明,并了解这是否解决了问题。
由于 Power Query SAP Business Warehouse 连接器使用 SAP 提供的 MDX 接口进行第三方访问,因此需要联系 SAP 以获取可能的解决方案,因为他们拥有 MDX 接口和 SAP BW 服务器之间的层。 询问如何为特定场景指定“长文本为 XL”。
尽管 SAP BW 中存在“长文本”,但 CHAR 限制为 60
存在一个已知限制,即 SAP BW 中的“长文本”特征在 Power BI 中出现 60 个字符的限制。 此字符限制是由于 MDX 接口中的限制,并且没有可用的已知解决方法。 SAP 在此 SAP 说明中介绍了此 MDX 限制。
使用直接查询时迁移到实现 2.0
由于弃用 SAP Business Warehouse 连接器的实现 1.0,可能需要更新查询才能利用实现 2.0。 使用直接查询时,将限制对查询编辑器的访问。 因此,无需重新创建整个查询即可轻松转换为实现 2.0。 解决方法是添加系统环境变量,以允许访问查询编辑器。 请注意,以下步骤不受正式支持,应仅按此处所述使用。
- 通过导航到文件资源管理器>这台电脑>属性>高级系统设置>环境变量>系统变量>新建,或通过打开命令提示符,输入
sysdm.cpl
,然后选择新建(系统变量下方),创建新环境变量。 - 命名环境变量
PBI_AlwaysEnableQueryEditor
并设置值true
。 即使在直接查询模式下,此变量设置也允许访问查询编辑器。 - 在 Power BI Desktop 的主页选项卡中,选择转换数据以打开 Power Query 编辑器。
- 按照以下说明更新查询以使用实现 2.0,从本文中的步骤 2 开始。
结束查询应类似于 SapBusinessWarehouse.Cubes("server", "system", "clientId", [Implementation = "2.0"])
。