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

SAS Viya 3.5中PROC SGRENDER生成图表显示黑块问题求助

解决SAS Viya 3.5循环生成SGRENDER图表显示黑块的问题

你碰到的循环生成SVG图表在作业链接里显示黑块、本地保存HTML后正常的情况,可尝试这几个调整方案:

方案1:调整ODS HTML5的SVG输出模式

当前用的svg_mode="inline"在Viya 3.5的动态作业环境里可能存在渲染时序问题,试试兼容设置:

ods html5 options(svg_mode="inline" embedded_images=on);

或者切换到外部SVG模式(注意确保路径权限足够生成对应文件):

ods html5 options(svg_mode="external");
ods graphics / outputfmt=svg imagename=plot_ prefix=svg;

方案2:把模板定义移出循环

每次循环重复定义ArrowPlot模板可能导致渲染资源未正确释放,将模板定义放到宏外部,通过宏变量传递参数:

PROC TEMPLATE;
   DEFINE STATGRAPH ArrowPlot;
      BEGINGRAPH ;
        ENTRYTITLE "Model: &ShortName.";
        LAYOUT OVERLAY /  WALLDISPLAY=(FILL) XAXISOPTS=(DISPLAY=NONE 
                LINEAROPTS=(VIEWMIN=-0.05 VIEWMAX=1.05)) YAXISOPTS=(DISPLAY=NONE LINEAROPTS=(VIEWMIN=-0.6 VIEWMAX=3));
            POLYGONPLOT X=x Y=y ID=Id / COLORRESPONSE=Sign COLORMODEL=(lightblue Pink) 
                DISPLAY=(OUTLINE FILL) OUTLINEATTRS=(COLOR=white THICKNESS=2px);
        ENDLAYOUT;
      ENDGRAPH;
   END;
RUN;

%macro CreatePlots;
%local model i;
%do i=1 %to %sysfunc(countw(&modelid_list.,%str( )));
    %LET model = %scan(&modelid_list., &i.,%str( ));
    %put &=model;

    PROC SQL NOPRINT;
    SELECT distinct Name into :ShortName
        FROM PlotData WHERE modelID=&model.;
    QUIT;

    PROC SGRENDER DATA=PlotData(where=(modelID=&model.)) TEMPLATE=ArrowPlot;
    RUN;
%end;
%mend CreatePlots;
%CreatePlots;

方案3:优化ODS GRAPHICS渲染参数

给ods graphics添加抗锯齿、固定尺寸参数,提升动态渲染兼容性:

ods graphics / outputfmt=svg antialiasing=on width=800px height=600px;

方案4:修复ODS语句的语法错误

原代码最后一行ods listing缺少分号,确保ODS输出正确关闭:

ods html5 (id=web) close;
ods listing;

问题根源

直接访问作业链接时,浏览器动态加载Viya服务器返回的内容,内联SVG可能因服务器响应头、渲染时序或Viya 3.5的特定bug未被正确解析;本地保存后是静态HTML文件,浏览器能完整解析所有SVG节点,因此显示正常。

内容的提问来源于stack exchange,提问作者anytnelav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 11:10:55