18、数据报告中的背景图像、超链接与目录节点控制技巧

数据报告中的背景图像、超链接与目录节点控制技巧

1. 使用背景图像属性

HTML 是使用 BACKGROUNDIMAGE= 属性的有效输出目标之一。以下示例展示了如何将合适的图像作为背景图像插入到特定列中。

示例代码如下:

proc report data=orders;
    column order_type;
    define order_type / group format=typef.
    style(column)=[just=c cellwidth=1in cellheight=1in]; 
    compute order_type;
        if order_type = 1 then call define(_col_,'style',
            'style=[backgroundimage="goldmedal.tiff"]');
        else if order_type = 2 then call define(_col_,'style',
            'style=[backgroundimage="silvermedal.tiff"]');
        else if order_type = 3 then call define(_col_,'style',
            'style=[backgroundimage="bronzemedal.tiff"]');
    endcomp;
run;

操作步骤说明:
1. 设置列样式 :通过 style(column)=[just=c cellwidth=1in cellheight=1in] 设置列的样式,确保图像大小合适。
2. 应用背景图像 :在 compute 块中,根据 order_type 的不同值,使用 CALL DEFINE 语句为每一行设置不同的背景图像。

2. 创建超链接

报告中常常需要使用超链接,超链接可以指向单个网站,也可以指向与报告相关的文件。以下介绍几种创建超链接的方法。

2.1 创建自定义样式模板

在输出为 PDF 时,默认情况下超链接会被蓝色框包围。可以创建自定义样式模板来移除这些蓝色框。
示例代码:

ods path(prepend) work.templat(update); 
proc template;
    define style styles.pearl2;
        parent=styles.pearl;
        style body from document /
            linkcolor=_undef_; 
    end;
run;
ods pdf file='url.pdf' notoc style=pearl2;

操作步骤:
1. 设置路径 :使用 ods path(prepend) work.templat(update); 设置临时样式模板的路径。
2. 定义样式 :在 proc template 中定义新样式 styles.pearl2 ,并将 LINKCOLOR 属性设置为未定义,以移除蓝色框。
3. 应用样式 :在 ods pdf 语句中指定使用新样式。

2.2 超链接到静态位置

可以将 URL= 属性设置为硬编码的值,为表头或单元格添加超链接。
示例代码:

proc report data=orders;
    column customer_type n;
    define customer_type / group
    style(header)=[url="http://www.sas.com" flyover="SAS"];
run;

操作步骤:在 define 语句的 style(header) 中设置 URL flyover 属性,为表头单元格添加超链接。

也可以在 CALL DEFINE 语句中使用 URL= 属性:

proc report data=orders;
    column customer_type n;
    define customer_type / group;
    compute n;
        call define(_col_,'style','style=[url=http://www.sas.com flyover="SAS"]');
    endcomp;
run;

操作步骤:在 compute 块中使用 CALL DEFINE 语句,将 URL flyover 属性应用到单元格。

2.3 链接到多个文件

可以在 CALL DEFINE 语句中使用 URL 作为第二个参数,将整个单元格设置为链接。
示例代码:

proc report data=orders;
    column customer_type n;
    define customer_type / group;
    compute customer_type;
        length link $100;
        link = cats(customer_type,".pdf");
        call define(_col_,'url',link);
    endcomp;
run;

操作步骤:
1. 创建链接变量 :在 compute 块中创建 link 变量,根据 customer_type 的值生成不同的链接。
2. 应用链接 :使用 CALL DEFINE 语句将链接应用到单元格。

为了在 PDF 中更清晰地显示链接,可以使用 TEXTDECORATION= 属性为链接文本添加下划线。
示例代码:

compute customer_type;
    length link $100;
    link = cats(customer_type,".pdf");
    call define(_col_,'url',link);
    call define(_col_,'style','style=[textdecoration=underline]');
endcomp;

操作步骤:在 compute 块中添加额外的 CALL DEFINE 语句,设置 textdecoration 属性为 underline

3. 控制目录节点

掌握 PROC REPORT 的最后一步是学习如何控制目录节点和标签。以下介绍几种控制目录节点的方法。

3.1 默认节点

PROC REPORT 创建的默认目录有三个节点级别:
|节点级别|控制方式|说明|
| ---- | ---- | ---- |
|程序标签|由 ODS PROCLABEL 语句控制|标签可赋值为任意字符串,可设为空,但除非使用 PROC DOCUMENT ,否则不能完全消除该节点|
|报告标签|由 PROC REPORT 语句中的 CONTENTS= 选项控制|文本值是静态的,可通过赋值为空字符串完全消除该节点|
|表格标签|由 BREAK 语句中的 CONTENTS= 选项控制| BREAK 语句必须指定 PAGE 选项才能更改节点标签,需要有分页变量,文本值是静态的,可通过赋值为空字符串完全消除该节点|

示例代码:

proc report data=orders;
    column product_line quantity total_retail_price;
    define product_line / group;
run;

操作步骤:运行上述代码生成默认目录节点。

更改默认标签示例:

data orders;
    set orders;
    dummy = 1;
run;
ods proclabel = 'Sales Data';
proc report data=orders contents='Product Line';
    column dummy product_line quantity total_retail_price;
    define dummy / group noprint;
    define product_line / group;
    break before dummy / contents='Full Report' page;
run;

操作步骤:
1. 添加虚拟变量 :在数据集中添加 dummy 变量。
2. 设置程序标签 :使用 ods proclabel 设置程序标签。
3. 设置报告标签 :在 proc report 语句中设置 CONTENTS 属性。
4. 设置表格标签 :在 break 语句中设置 CONTENTS PAGE 属性。

3.2 BY 变量节点

使用 BY 变量会为目录添加一个节点级别。
示例代码:

proc sort data=orders;
    by customer_age_group;
run;
proc report data=orders;
    by customer_age_group;
    column product_line quantity total_retail_price;
    define product_line / group;
run;

操作步骤:
1. 排序数据 :使用 proc sort customer_age_group 对数据进行排序。
2. 运行报告 :在 proc report 中使用 by 语句,生成包含 BY 变量节点的目录。

为了更改每个 BY 组的节点标签,可以将 PROC REPORT 步骤放在宏程序中。
示例代码:

proc sort data=orders;
    by customer_age_group;
run;
%macro bynode(byvar);
    ods proclabel = "&byvar"; 
    proc report data=orders contents=""; 
        where customer_age_group="&byvar";
        column product_line quantity total_retail_price;
        define product_line / group;
    run;
%mend bynode;
data _null_;
    set orders;
    by customer_age_group;
    if first.customer_age_group then
        call execute('%bynode('||customer_age_group||')'); 
run;

操作步骤:
1. 排序数据 :使用 proc sort 对数据进行排序。
2. 定义宏 :定义 bynode 宏,在宏中设置程序标签和报告标签,并根据 byvar 的值筛选数据。
3. 执行宏 :在 data _null_ 步中,使用 call execute 为每个 BY 组执行一次宏。

还可以使用 BREAK BEFORE 语句移除表格标签节点:

proc sort data=orders;
    by customer_age_group;
run;
%macro bynode(byvar);
    ods proclabel = "&byvar";
    proc report data=orders contents="";
        where customer_age_group="&byvar";
        column customer_age_group product_line quantity total_retail_price;
        define customer_age_group / group noprint; 
        define product_line / group;
        break before customer_age_group / contents="" page; 
    run;
%mend bynode;
data _null_;
    set orders;
    by customer_age_group;
    if first.customer_age_group then
        call execute('%bynode('||customer_age_group||')'); 
run;

操作步骤:
1. 排序数据 :使用 proc sort 对数据进行排序。
2. 定义宏 :定义 bynode 宏,在宏中设置程序标签和报告标签,添加 customer_age_group 列并设置为 noprint ,使用 break 语句消除表格标签节点。
3. 执行宏 :在 data _null_ 步中,为每个 BY 组执行一次宏。

3.3 DEFINE 语句的 CONTENTS= 选项

DEFINE 语句的 CONTENTS= 选项只有在同时指定 PAGE 选项时才有效。可以使用该选项更改第三个节点(表格标签)。
示例代码:

proc report data=orders;
    column product_line quantity total_retail_price;
    define product_line / group contents='Product Line' page;
run;

操作步骤:在 define 语句中设置 CONTENTS PAGE 属性,更改表格标签。

当表格很宽时, DEFINE 语句的 PAGE 选项会创建水平分页,同时在目录中生成多个表格条目。
示例代码:

proc report data=orders;
    column customer_id customer_name customer_age customer_gender
        customer_birthdate customer_country customer_group
        customer_type product_name quantity total_retail_price;
    define customer_id / group;
    define customer_name / group;
    define customer_age / group;
    define customer_gender / group;
    define customer_birthdate / group;
    define customer_country / group format=$cntry.;
    define customer_group / group;
    define customer_type / group;
    define product_name / group page;
run;

操作步骤:在 define 语句中为 product_name 列设置 PAGE 选项,生成多个表格条目。

可以使用两个 DEFINE 语句的 CONTENTS= 选项来控制这些表格标签:

proc report data=orders;
    column customer_id customer_name customer_age customer_gender
        customer_birthdate customer_country customer_group
        customer_type product_name quantity total_retail_price;
    define customer_id / group contents='Customer Info, Entry 1';
    define customer_name / group;
    define customer_age / group;
    define customer_gender / group;
    define customer_birthdate / group;
    define customer_country / group format=$cntry.;
    define customer_group / group;
    define customer_type / group;
    define product_name / page contents='Customer Info, Entry 2';
run;

操作步骤:在两个 define 语句中分别设置 CONTENTS 属性,控制不同表格的标签。

3.4 BREAK 语句的 CONTENTS= 选项

BREAK 语句通常用于使用 PAGE 选项创建新表格,每个新表格在目录中都会有一个条目。可以使用 CONTENTS= 选项更改表格标签。
示例代码:

proc report data=orders;
    column customer_country product_line quantity total_retail_price;
    define customer_country / group;
    define product_line / group;
    break after customer_country / page;
run;

操作步骤:在 break 语句中设置 PAGE 选项,创建新表格并在目录中生成条目。

使用 CONTENTS= 选项更改表格标签:

proc report data=orders;
    column customer_country product_line quantity total_retail_price;
    define customer_country / group;
    define product_line / group;
    break after customer_country / page contents='Customer Country';
run;

操作步骤:在 break 语句中设置 PAGE CONTENTS 属性,更改表格标签。

最佳实践是在 BREAK BEFORE 语句中控制表格标签:

proc report data=orders;
    column customer_country product_line quantity total_retail_price;
    define customer_country / group;
    define product_line / group;
    break before customer_country / page contents='Customer Country';
run;

操作步骤:在 break 语句中设置 BEFORE 位置、 PAGE CONTENTS 属性,更改表格标签。

综上所述,通过合理运用背景图像、超链接和目录节点控制技巧,可以使数据报告更加美观、实用,提高报告的可读性和交互性。

数据报告中的背景图像、超链接与目录节点控制技巧(续)

4. 技巧总结与应用建议

在数据报告的制作过程中,我们介绍了使用背景图像、创建超链接以及控制目录节点的多种方法。下面对这些技巧进行总结,并给出一些应用建议。

4.1 背景图像应用总结
  • 使用场景 :当需要为报告中的特定列添加视觉效果,以区分不同类型的数据时,可使用 BACKGROUNDIMAGE= 属性。例如,在订单报告中,根据订单类型显示不同的奖牌图像。
  • 注意事项 :确保图像大小与单元格大小匹配,可通过设置 CELLWIDTH= CELLHEIGHT= 属性来实现。同时,要注意图像的格式和路径,确保能够正确显示。
4.2 超链接应用总结
  • 静态链接 :对于指向固定网站的链接,可在 style(header) CALL DEFINE 语句中直接设置 URL= 属性。这种方式简单直接,适用于需要在表头或单元格中添加固定链接的情况。
  • 动态链接 :当需要为每个单元格设置不同的链接时,可在 CALL DEFINE 语句中使用变量作为链接地址。同时,为了在 PDF 中更清晰地显示链接,可使用 TEXTDECORATION= 属性添加下划线。
  • 样式模板 :在输出为 PDF 时,可创建自定义样式模板来移除超链接周围的蓝色框,提高报告的美观度。
4.3 目录节点控制总结
  • 默认节点 :了解默认目录节点的三个级别及其控制方式,可根据需要更改程序标签、报告标签和表格标签。通过合理设置这些标签,可使目录更加清晰明了。
  • BY 变量节点 :使用 BY 变量会增加目录节点级别。若要更改每个 BY 组的节点标签,可将 PROC REPORT 步骤放在宏程序中。同时,可使用 BREAK BEFORE 语句移除表格标签节点。
  • DEFINE 语句 DEFINE 语句的 CONTENTS= 选项在指定 PAGE 选项时可用于更改表格标签。当表格很宽时, PAGE 选项会创建多个表格条目,可使用两个 DEFINE 语句的 CONTENTS= 选项控制这些标签。
  • BREAK 语句 BREAK 语句的 PAGE 选项可创建新表格, CONTENTS= 选项可更改表格标签。最佳实践是在 BREAK BEFORE 语句中控制表格标签。
5. 流程图展示

下面是一个简单的流程图,展示了创建带有超链接和自定义目录的报告的主要步骤:

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px

    A([开始]):::startend --> B(准备数据):::process
    B --> C{是否需要背景图像}:::decision
    C -- 是 --> D(设置背景图像):::process
    C -- 否 --> E{是否需要超链接}:::decision
    D --> E
    E -- 是 --> F(创建超链接):::process
    E -- 否 --> G{是否需要控制目录节点}:::decision
    F --> G
    G -- 是 --> H(控制目录节点):::process
    G -- 否 --> I(生成报告):::process
    H --> I
    I --> J([结束]):::startend
6. 实际案例分析

假设我们要制作一份销售报告,包含不同客户类型的订单信息。报告需要满足以下要求:
- 根据订单类型显示不同的背景图像。
- 为客户类型列添加指向 SAS 官网的超链接。
- 自定义报告的目录节点,使其更加清晰。

以下是实现该报告的代码:

/* 设置背景图像 */
proc report data=orders;
    column order_type customer_type n;
    define order_type / group format=typef.
    style(column)=[just=c cellwidth=1in cellheight=1in]; 
    compute order_type;
        if order_type = 1 then call define(_col_,'style',
            'style=[backgroundimage="goldmedal.tiff"]');
        else if order_type = 2 then call define(_col_,'style',
            'style=[backgroundimage="silvermedal.tiff"]');
        else if order_type = 3 then call define(_col_,'style',
            'style=[backgroundimage="bronzemedal.tiff"]');
    endcomp;
    /* 添加超链接 */
    define customer_type / group
    style(header)=[url="http://www.sas.com" flyover="SAS"];
    /* 控制目录节点 */
    ods proclabel = '销售报告';
    proc report data=orders contents='客户订单信息';
    column customer_type order_type n;
    define customer_type / group;
    define order_type / group;
    break before customer_type / contents='客户类型报告' page;
run;

操作步骤:
1. 设置背景图像 :在 compute 块中根据 order_type 的值设置不同的背景图像。
2. 添加超链接 :在 define 语句的 style(header) 中为 customer_type 列添加指向 SAS 官网的超链接。
3. 控制目录节点 :使用 ods proclabel 设置程序标签,在 proc report 语句中设置报告标签,在 break 语句中设置表格标签。

通过以上步骤,我们可以制作出一份满足要求的销售报告,提高报告的可读性和交互性。

7. 总结

通过本文的介绍,我们学习了在数据报告中使用背景图像、创建超链接以及控制目录节点的方法。这些技巧可以使报告更加美观、实用,提高报告的可读性和交互性。在实际应用中,可根据具体需求选择合适的方法,并注意相关的注意事项。希望这些技巧能够帮助你制作出更加出色的数据报告。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值