跳到内容
产品信息
作者简介照片Sef万博新体育手机客户端an Linders

构建基于S/4HANA层次结构的SAP Data Warehouse Cloud父子层次结构

介绍

SAP数据仓库云为层次结构提供建模功能,以便在SAP分析云中使用。然而,在撰写本文时,SAP数据仓库云中的层次结构功能与典型SAP源系统(如SAP S/4HANA或SAP ECC)中层次结构的丰富性不匹配。它还没有层级版本、节点有效期间隔、孤立节点处理、文本语言支持或允许不同数据类型作为叶节点等特性。您可能正在寻找一种仍然使用这些源层次结构的方法,好消息是:这是可能的!

在这篇博文中,我将解释如何转换典型的S/4HANA父子层次结构以适应当前的SAP数据仓库云功能。作为一个例子,我们使用了一个GL Account Hierarchy,它来源于SAP S/4 HANA Cloud Essentials。在下面的图中,您可以看到SAP Analytics Cloud中的最终结果。

图1:最终结果

源cd视图

使用云数据集成(Cloud Data Integration, CDI)连接类型建立到源系统的连接。使用了四个CDS视图,其中一个包含用于事务数据的GlAccount行项,以便能够显示一些示例数据,另外三个是层次结构模型的输入,即父子层次结构本身、派生功能节点名称的层次结构文本和派生功能GL Account名称的GL Account文本。下面列出了这些CDS视图的定义。

总账科目的原始数据
总账账户层次节点
总账账户层次节点-文本
总账-文本

图2:使用云数据集成(CDI)提取的源CDS视图

过滤和快照GL帐户行项目

由于导入非常简单和直接,因此本文将跳过导入CDS视图。

由于层次结构模型将包含相当多的连接逻辑,并且事务数据量相当大,因此首先将数据持久化到SAP data Warehouse Cloud中。因为我们不需要所有的行项,所以它们只对一个特定的公司代码进行过滤,正如您在下面的SQL视图中看到的那样。部署之后,视图被持久化,如下图右侧的“persistence”标题下所示。

这个SQL视图稍后将用于SAP Analytics Cloud Story所基于的主要分析数据集。顺便说一下,如果您想知道命名约定:前缀“tc08_”代表在此空间中构建的第8个测试用例,因此它仅适用于我自己的组织,不需要遵守。你还可以看到源表的名称不同于使用的CDS视图,这是因为我在导入CDS视图时给了它那个名称。

图3 % 203% % 20线% 20项% 20过滤% 20和% 20快照

图3:行项过滤器和快照

创建层次结构维度

在SAP Data Warehouse Cloud中,您可以使用图形化编辑器或SQL编辑器对视图建模。我选择SQL作为层次结构维度,因为我发现它更容易尝试和错误(在层次结构工作之前花了一段时间……),并且它还一次显示了所有应用的逻辑。请参阅下面的截图,它显示了在SAP数据仓库云中的样子,下面是代码的副本。滚动到代码以查看有关逻辑的解释。请注意,您必须选择“Dimension”作为您的“Semantic Usage”,否则无法设置层次语义。在下面的截图中,这个选择还没有做出,仍然设置为“关系数据集”。

图4:SQL dim

选择“嗨”。“HierarchyUUID”、“嗨”。"HierarchyName",大小写为"HI"。"NodeTypeField" = " GLAccount "然后"HI"。"GLAccount" ELSE "HI"。"HierarchyNode" END为"HierarchyNode", "H2"。"HierarchyNode"即"HierarchyParentNode", "HI"。“NodeTypeField”、“嗨”。“NodeID”、“嗨”。“ParentID”、“嗨”。"GLAccount",大小写为"HI"。"NodeTypeField" = " GLAccount "然后"GT"。"GLAccountName" ELSE "TX"。"HierarchyNodeText" END AS "HierarchyNodeText", "TX"。"Language" FROM "tc08_s4hierarchy_rt_cdi" AS "HI" LEFT OUTER JOIN "tc08_s4hierarchy_rt_cdi" AS "H2" ON ("HI"."HierarchyUUID" = "H2"."HierarchyUUID" AND "HI"."ParentID" = "H2"."NodeID" AND "HI"."ValidFrom" = "H2"."ValidFrom") LEFT OUTER JOIN "tc08_s4hier_rt_node_texts" AS "TX" ON ("HI"."HierarchyNode" = "TX"."HierarchyNode" AND "HI"."HierarchyName" = "TX"."GLAccountHierarchy" AND "TX"."Language" = 'EN' AND "TX"."ValidityStartDate" <= CURRENT_DATE AND "TX"."ValidityEndDate" >= CURRENT_DATE) LEFT OUTER JOIN "tc08_s4hier_glacc_txt" AS "GT" ON ("HI"."ChartOfAccounts" = "GT"."ChartOfAccounts" AND "HI"."GLAccount" = "GT"."GLAccount" AND "GT"."Language" = 'EN') WHERE "HI"."GLAccountHierarchy" = '3010' AND "HI"."ValidFrom" <= CURRENT_DATE AND "HI"."ValidTo" >= CURRENT_DATE;

在编写本文时,还不支持几个层次结构特性,这基本上就是上面代码所要解决的问题。在代码中,我们通过选择一个层次结构版本,删除层次结构和文本时间有效性,通过设置固定语言,以及通过将层次结构节点和GL帐户“合并”到单个关键字段,将源层次结构适合SAP数据仓库云。

SQL中发生了什么?让我们从上到下检查代码。

  1. 输出字段HierarchyNode这是我们在亲子关系中使用的字段。它还充当SAP Analytics云故事中的“技术名称”,包含GlAccount(如果它是最低的(“叶子”)节点)或中间节点的id。在源表中,我们已经有了一个字段HierarchyNode。中间节点该字段的内容很好。但是对于叶节点,我宁愿显示实际的GlAccount id。因此,使用CASE语句,如果节点是GLAccount类型,我们选择GLAccount,否则坚持使用HierarchyNode源字段。顺便说一下,选择“NodeID”源字段作为子字段会更容易,但这是一个生成的长字符串ID,我们不想向最终用户显示。但我们确实将该字段用于连接逻辑。还需要注意的是:源表中有一个childdid,但如果它是叶节点,则不提供值。
  2. 输出字段HierarchyParentNode。父节点始终是中间节点,因此我们可以从父记录的HierarchyNode中选择这个值。可以使用指向父记录的NodeID的ParentID找到父记录。因此,代码中的第一个连接是自连接,使用它可以找到父记录的HierarchyNode并将其重命名为HierarchyParentNode。
  3. 输出字段HierarchyNodeText。在SAP Analytics Cloud Story中,也应该显示功能名称。因此,将检索(中间)层次结构节点和GL帐户的文本。代码中的第二个连接检索层次结构节点文本,其中需要对语言进行筛选。
  4. GLAccountHierarchy上的过滤器。这里我们选择一个层次结构版本,在本例中对应于行项目上的公司代码过滤器。
  5. 过滤层次结构的有效性。应该显示当前有效的层次结构,因此我们过滤ValidFrom和ValidTo日期。

代码完成后,应用语义就很简单了。首先从层次结构菜单中选择父列和子列。

图3 % 203 b % % 20 % 20配置层次结构

图5:层次结构配置

然后,通过将HierarchyNodeText设置为HierarchyNode字段的标签,进行配置以使功能名称与技术名称相匹配。

语义

图6:层次列语义

作为最后一步,在视图设置中,只有HierarchyNode被定义为键。层次结构的键定义只能有一个字段。

图3 % 203 d % % 20 hierarchynode % 20 % 20 % 20只% 20键

图7:HierarchyNode作为唯一的键

GlAccount到HierarchyNode的映射

层次结构的键是HierarchyNode。但是,该字段不是行项数据的一部分,因此我们必须使其成为行项数据的一部分。行项数据确实包含GL Account字段,并且GL Account和HierarchyNode之间的关系已经是层次结构维度的一部分。层次结构可以直接连接到行项数据中以获得HierarchyNode,但是为了清晰起见,为它创建了一个单独的视图。

图3 % 205% % 20映射% 20 glaccount % 20 hierarchynode % 20

图8:将GlAccount映射到HierarchyNode

分析数据集和孤立节点

分析数据集是SAP Analytics Cloud使用的视图,在这里我们将事务数据与层次结构关联起来。为了改变,我使用了图形视图。首先,插入过滤的行项视图,然后通过与包含GL Account到HierarchyNode映射的视图连接,用HierarchyNode字段丰富数据。

选择左连接是有目的的:可能存在层次结构维度中不存在的GL Accounts事务数据。对于这些记录,将添加一个公式节点,其中字段HierarchyNode的所有NULL值都替换为值' 00NOTASSGND ',该值与未分配节点的层次结构维度数据中的条目相匹配。基本上,左连接和公式表示在编写本文时不属于层次结构功能的“孤立节点”功能。如果没有左连接和公式,当使用层次结构显示时,事务数据将不会显示在SAP Analytics Cloud中。

图3 % 207% % 20的公式

图9:公式

在视图属性中,根据HierarchyNode字段定义到层次结构维度的关联。

图3 % 208% % 20协会

图10:与层次结构维度的关联

是的,使用了图形视图,但是如果您有兴趣查看代码,可以从图形视图中简单地选择“预览SQL”来查看建模的SQL表示。下图显示了此功能,代码粘贴在其下方。

图3 % 209% % 20预览% 20 sql

图11:预览SQL

选择“tc08_s4h_items_filtered”。“SourceLedger”作为“SourceLedger”,“tc08_s4h_items_filtered”。“CompanyCode”为“CompanyCode”,“tc08_s4h_items_filtered”。“财政年度”为“财政年度”,“tc08_s4h_items_filtered”。“AccountingDocument”作为“AccountingDocument”,“tc08_s4h_items_filtered”。“LedgerGLLineItem”作为“LedgerGLLineItem”,“tc08_s4h_items_filtered”。“LedgerFiscalYear”为“LedgerFiscalYear”,“tc08_s4h_items_filtered”。"ChartOfAccounts" AS "ChartOfAccounts", "tc08_s4h_items_filtered"。“ControllingArea”为“ControllingArea”,“tc08_s4h_items_filtered”。“GLAccount”作为“GLAccount”,“tc08_s4h_items_filtered”。“ProfitCenter”为“ProfitCenter”,“tc08_s4h_items_filtered”。“Segment”为“Segment”,“tc08_s4h_items_filtered”。"BalanceTransactionCurrency" AS "BalanceTransactionCurrency", "tc08_s4h_items_filtered"。"AmountInGlobalCurrency" AS "AmountInGlobalCurrency", "tc08_s4h_items_filtered"。"FixedAmountInGlobalCrcy" AS "FixedAmountInGlobalCrcy", "tc08_s4h_items_filtered"。"AmountInBalanceTransacCrcy" AS "AmountInBalanceTransacCrcy", "tc08_s4h_items_filtered"。AmountInTransactionCurrency" AS "AmountInTransactionCurrency", "tc08_s4h_items_filtered"。" amountincompanycodecrency " AS " amountincompanycodecrency ", "tc08_s4h_items_filtered"。"AmountInFunctionalCurrency" AS "AmountInFunctionalCurrency", "tc08_s4h_items_filtered"。"TransactionCurrency" AS "TransactionCurrency", "tc08_s4h_items_filtered"。"CompanyCodeCurrency"即"CompanyCodeCurrency", "tc08_s4h_items_filtered"。"GlobalCurrency"即"GlobalCurrency", "tc08_s4h_items_filtered"。FunctionalCurrency" AS "FunctionalCurrency", "tc08_s4h_items_filtered"。"FiscalPeriod" AS "FiscalPeriod", "tc08_s4h_items_filtered"。“FiscalYearVariant”为“FiscalYearVariant”,“tc08_s4h_items_filtered”。"FiscalYearPeriod" AS "FiscalYearPeriod", "tc08_s4h_items_filtered"。“PostingDate”作为“PostingDate”,“tc08_s4h_items_filtered”。"DocumentDate" AS "DocumentDate", IFNULL("tc08_s4hier_node_glacc_mapping"."HierarchyNode", '00NOTASSGND') AS "HierarchyNode" FROM ("tc08_s4h_items_filtered" LEFT MANY TO ONE JOIN "tc08_s4hier_node_glacc_mapping" ON "tc08_s4h_items_filtered"."GLAccount" = "tc08_s4hier_node_glacc_mapping"."GLAccount")

这个故事

现在它只是在SAP分析云故事中使用分析数据集的问题。当您在行部分中选择HierarchyNode时,层次结构已经显示出来,默认情况下带有函数名(Description)。这就是在这篇博文的第一个图中数据可视化的方式。如下图所示,也可以显示ID。

图12:故事

结论

这篇博文展示了如何在SAP Data Warehouse Cloud中使用典型的SAP源系统层次结构,并在SAP Analytics Cloud中显示它,方法是在撰写本文时将数据转换为受支持的层次结构特性。这只是完成它的一种方法,所以请随意采用不同的方法,并在评论中随意分享您的方法。

指定的标签

      6个评论
      你一定是登录评论:评论或回复帖子
      作者资料照片Pau万博新体育手机客户端l Vatter
      保罗增值税

      嗨Sefan

      谢谢你的博客!

      我们和我们的客户就同样的主题进行了研究,并且有一个非常相似的解决方案——也许你已经对我们的开放性问题有了一些看法:

      据我所知,您现在在SAC中有一个专用的“维度”,仅包含G/L帐户层次结构,对吗?或者您是否也考虑过只有一个“维度”,称为G/L帐户,其中还包含诸如是否为资产负债表帐户之类的属性?

      您知道视图的排序是否反映在层次结构的排序中吗?

      你有什么好主意,如何消除前导零而不干扰排序行为(更相关的成本中心层次结构)?

      提前感谢并致以最良好的问候

      保罗

      作者简介照片ded万博新体育手机客户端utt Dwivedi
      Deodutt已经受理

      嗨Sefan,

      感谢详细的博客,我通过从我的S/4HANA 2020 OP系统中导入标准的G/L帐户和层级相关的CDS视图,尝试了图形化的方式。不幸的是,父、子字段的数据类型被自动分配给Binary,不能从配置中重写(可能会尝试导入/导出),这导致了join中的问题。这是你选择脚本而不是图形视图创建的原因吗?

      问候,

      作者简介照片Sef万博新体育手机客户端an Linders
      Sefan Linders
      博客作者

      嗨Deodutt,

      我部分选择了SQL,因为它更容易尝试和犯错。我没有遇到数据类型强制转换问题。听起来需要一张罚单才能登记。作为一种变通方法,您还可以在图形视图公式节点中尝试强制转换操作(TO_NVARCHAR)。

      问候,

      Sefan

      作者简介照片ded万博新体育手机客户端utt Dwivedi
      Deodutt已经受理

      感谢Sefan的检查和反馈。

      问候,

      作者简介照片Adl万博新体育手机客户端in Sundararaj
      Adlin Sundararaj

      “tc08_s4hierarchy_rt_cdi”是用于CDS视图的本地名称I_GLAccountHierarchyNode?

      我没有看到任何字段作为NodeTypeField具有“GL帐户”的值。它是创建的自定义字段吗?

      谢谢

      adlin

      作者简介照片Mar万博新体育手机客户端ianne van Loenen
      玛丽安·范洛南

      嗨Adlin,
      既然我碰巧看到了这个问题,我就替Sefan回答…
      不,“tc08_s4hierarchy_rt_cdi”是行项视图的技术名称(在导入时选择)https://api.sap.com/cdsviews/I_GLACCOUNTLINEITEMRAWDATA

      希望这能帮到你,
      玛丽安