在IDT中解析XML列生成新维度的方法咨询
在IDT Universe中拆分XML列生成独立维度的解决方案
由于IDT本身不直接支持SQL里CROSS APPLY这类原生操作,但可以通过自定义SQL或派生表两种方式实现XML数据的拆分,以下是具体操作步骤:
方法一:使用自定义SQL替代原生表引用
适合从头构建数据源,直接把拆分逻辑嵌入基础查询:
- 在IDT的Data Foundation层,添加数据源时选择自定义SQL选项
- 输入包含XML拆分逻辑的SQL语句(以SQL Server为例,其他数据库需调整语法):
SELECT ps.Policy_ID, ps.DateAdded, ps.DateUpdated, ps.AccountNumber, ps.UpdatedBy, ps.UpdatedOn, -- 提取XML节点字段,XPath路径需匹配实际XML结构 pr.value('(PartyTypeCode/text())[1]', 'varchar(50)') AS PartyTypeCode, pr.value('(PartyName/text())[1]', 'varchar(100)') AS PartyName, pr.value('(PartyCorrespondenceName/text())[1]', 'varchar(100)') AS PartyCorrespondenceName, pr.value('(LocationAddressLine1/text())[1]', 'varchar(200)') AS LocationAddressLine1, pr.value('(LocationAddressLine2/text())[1]', 'varchar(200)') AS LocationAddressLine2, pr.value('(LocationCity/text())[1]', 'varchar(100)') AS LocationCity, pr.value('(LocationStateCode/text())[1]', 'varchar(10)') AS LocationStateCode, pr.value('(LocationPostalCode/text())[1]', 'varchar(20)') AS LocationPostalCode, pr.value('(PartyRole/text())[1]', 'varchar(50)') AS PartyRole FROM Policy_Stat ps -- 拆分XML中的每个PartyRecord节点 CROSS APPLY ps.PartyRecords.nodes('/PartyRecords/PartyRecord') AS PartyRecords(pr)
- 验证SQL执行正常后保存数据源,后续可直接基于结果集创建维度对象。
方法二:基于现有表创建派生表
若已在Data Foundation中添加Policy_Stat表,可通过派生表实现拆分:
- 在Data Foundation层右键点击
Policy_Stat表,选择Create Derived Table - 在编辑器中输入上述相同的SQL语句(表别名需对应现有表)
- 保存派生表后,该表会包含拆分后的所有字段,可直接用于维度构建。
关键注意事项
- XPath路径验证:确保
nodes()方法中的XPath(如/PartyRecords/PartyRecord)与实际XML结构匹配,若节点名称不同需对应调整。 - 数据库适配:若使用Oracle,需用
XMLTable替代CROSS APPLY,示例SQL如下:
SELECT ps.Policy_ID, ps.DateAdded, ps.DateUpdated, ps.AccountNumber, ps.UpdatedBy, ps.UpdatedOn, x.PartyTypeCode, x.PartyName, x.PartyCorrespondenceName, x.LocationAddressLine1, x.LocationAddressLine2, x.LocationCity, x.LocationStateCode, x.LocationPostalCode, x.PartyRole FROM Policy_Stat ps, XMLTable('/PartyRecords/PartyRecord' PASSING ps.PartyRecords COLUMNS PartyTypeCode VARCHAR2(50) PATH 'PartyTypeCode', PartyName VARCHAR2(100) PATH 'PartyName', PartyCorrespondenceName VARCHAR2(100) PATH 'PartyCorrespondenceName', LocationAddressLine1 VARCHAR2(200) PATH 'LocationAddressLine1', LocationAddressLine2 VARCHAR2(200) PATH 'LocationAddressLine2', LocationCity VARCHAR2(100) PATH 'LocationCity', LocationStateCode VARCHAR2(10) PATH 'LocationStateCode', LocationPostalCode VARCHAR2(20) PATH 'LocationPostalCode', PartyRole VARCHAR2(50) PATH 'PartyRole' ) x
- 维度构建:在Business Layer中,将拆分后的
PartyTypeCode、PartyName等字段拖入维度文件夹(如「Party详情」),确保Policy_ID作为关联键,即可在报表中正常使用这些维度。
内容的提问来源于stack exchange,提问作者hlock
相关产品推荐
相关产品推荐

