You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 14:22:49