从SAS EG元数据中获取SAS VA报表名称及关联SAS表名
提取SAS VA报表关联的SAS表名(Data Step实现)
完全可以用Data Step结合SAS元数据函数实现这个需求。你只需要在现有代码基础上,添加遍历报表数据源关联的逻辑,追踪到对应的物理SAS表对象即可。
以下是修改后的完整代码:
data MDIDs_with_Tables; length Server_Uri rp_uri source_uri table_uri Metadata_ID Name _Name TypeName Path Location _Location MetadataCreated MetadataUpdated CreatedBy ModifiedBy $256; length Created Modified 8.; format Created Modified datetime19.; /* 新增表相关变量 */ length LibName TableName $256; nobj = 1; n=1; call missing(Metadata_ID, _Name, MetadataCreated, MetadataUpdated, Created, Modified, TypeName, Path, Server_Uri, _location, CreatedBy, ModifiedBy, LibName, TableName); do while(n le nobj); nobj=metadata_getnobj("omsobj:Transformation?@PublicType = 'Report.BI'",n,Server_Uri); rc=metadata_getattr(Server_Uri,'Id',Metadata_ID); rc=metadata_getattr(Server_Uri,'Name',_Name); rc=metadata_getattr(Server_Uri,"MetadataCreated",MetadataCreated); rc=metadata_getattr(Server_Uri,"MetadataUpdated",MetadataUpdated); name=translate(translate(translate(translate(_name,"-","–"),"£","£"),"%","%"),"+","+"); Created=input(MetadataCreated,anydtdtm.); Modified=input(MetadataUpdated,anydtdtm.); rc=metadata_getattr(Server_Uri,"PublicType",TypeName); numrp=metadata_getnasn(Server_Uri,"ResponsibleParties",1,rp_uri); if numrp>0 then do; numrp=metadata_getnasn(Server_Uri,"ResponsibleParties",1,rp_uri); rc=metadata_getattr(rp_uri,"name",CreatedBy); numrp=metadata_getnasn(Server_Uri,"ResponsibleParties",2,rp_uri); rc=metadata_getattr(rp_uri,"name",ModifiedBy); end; TreesCount=metadata_getnasn(Server_Uri,"Trees",1,Server_Uri); rc=metadata_getattr(Server_Uri,"Name",Path); _tree=1; do while (_tree>0); _tree=metadata_getnasn(Server_Uri,"ParentTree",1,Server_Uri); if _tree > 0 then do; _rc=metadata_getattr(Server_Uri,"Name",_location); Path=catx('/',_location,Path); end; end; Location = '/'||Path; /* -------------------------- 新增:提取关联SAS表逻辑 -------------------------- */ i = 1; do while(metadata_getnasn(Server_Uri, "Sources", i, source_uri) > 0); /* 获取数据源对象类型 */ rc = metadata_getattr(source_uri, "PublicType", source_type); /* 筛选物理SAS表对象 */ if source_type in ('SASTable', 'Table') then do; /* 获取表的名称 */ rc = metadata_getattr(source_uri, "Name", TableName); /* 获取表所属的库对象URI */ rc = metadata_getnasn(source_uri, "Library", 1, lib_uri); if rc > 0 then do; rc = metadata_getattr(lib_uri, "Name", LibName); end; /* 输出当前报表-表关联记录 */ output; end; i + 1; call missing(source_uri, source_type, TableName, LibName, lib_uri); end; /* ------------------------------------------------------------------------- */ n=n+1; end; keep Metadata_ID Name TypeName Location Created Modified CreatedBy ModifiedBy LibName TableName; run;
关键逻辑说明
- 遍历报表数据源:通过
metadata_getnasn(Server_Uri, "Sources", i, source_uri)循环获取当前报表关联的所有数据源对象 - 筛选物理表:通过
PublicType判断数据源是否为SAS物理表(常见类型为SASTable或Table) - 提取表和库信息:从表对象中获取表名,再通过
Library关联获取所属库名
内容的提问来源于stack exchange,提问作者Jason Orosco
相关产品推荐
相关产品推荐

