# 报表样例 制作如下图所示的报表: ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_f40377f3538889e53c45520b6683d838_r.png) 在这个报表中,按照销售额从大到小排列。和第一名的差距这个指标的运算逻辑是:第一名的销售额 - 当前销售的销售额。接下来,我们通过一个很简单的网格式报表,来了解与第一名差距的运算。 # 制作方法 ## 第一步 定义数据集 报表中的数据来自产品中自带的数据表“DEMO_ORDERS”、 “DEMO_ORDERDETAILS“和“DEMO_EMPLOYEE”。 新建复杂SQL数据集“雇员订单”,SQL语句为:select DEMO_EMPLOYEE.雇员ID,DEMO_EMPLOYEE.销售人员,DEMO_EMPLOYEE.出生日期,DEMO_EMPLOYEE.职务,DEMO_ORDERDETAILS.数量,DEMO_ORDERDETAILS.单价 from DEMO_EMPLOYEE,DEMO_ORDERDETAILS,DEMO_ORDERS where DEMO_ORDERS.订单ID=DEMO_ORDERDETAILS.订单ID and DEMO_EMPLOYEE.雇员ID = DEMO_ORDERS.雇员ID ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_1aff6c720d569efb0a888f7b4c33112d_r.png) ## 第二步 制作表样并定义单元格表达式 **1.绘制报表基本框架** ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_f357be20d1c8427b500bf2c397e27582_r.png) **2.设置取数表达式** B2单元格表达式:`=雇员订单.Group(销售人员,false,,,雇员订单.sum(数量*单价),true)` C2单元格表达式:`=雇员订单.sum(数量*单价)`, **3.设置C2单元格显示格式和对齐方式** 显示格式为¥#,##0.00,对齐方式为靠右,缩进3。 ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_4c05f2780fa9b1b4a113fa5d63cefd8e_r.png) ## 第三步 设置名次 在A2单元格写入表达式`=&B2`,并设置A2的左主格为B2。 ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_c6dd7d8a6350015eb1b31658513ce36c_r.png) >对于A2单元格的名次表达式,要知道某个扩展出来的格子在所有扩展出来的格子中排第几,就用到了&运算符,它可以获得当前单元格所属的某主格在所有扩展出来的格子中排第几。 ## 第四步 设置与第一名差距 D2格的表达式最关键的在于如何表达出“第一名的销售额”,该报表是按照销售额从大到小排列的,因此第一名的销售额肯定是第一个C2格。如何在报表扩展前在表达式中描述出扩展后的第N个C2格呢? 这里用到了层次坐标,我们把D2单元格的表达式写成:`=C2[1]-C2`。 然后设置D2单元格显示格式为¥#,##0.00,对齐方式为靠右,缩进3。 ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_2d568ae9f59331589d385162851d063a_r.png) ## 第五步 保存预览 点击设计界面左上角的【预览】按钮对报表模板进行保存和查看。 预览页面: ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_26b5693d06c1a305195e68f9ead3314a_r.png) # 功能点说明 ## &运算符 单元格是可以扩展的,一个单元格可以扩展出多个格子,那么如何知道某个扩展出来的格子在所有扩展出来的格子中排第几呢?这时我们就引入了&运算符,它可以获得当前格所属的某主格在所有扩展出来的格子中的排序,这种运算我们也称为层次坐标的逆运算。 语法: &Cellx 返回值: 整数,当前格所属的Cellx主格在所有扩展出来的格子中的排序 说明: Cellx必须是当前格的主格,这样&Cellx才能够正确运算,其返回值相当于是当前格所属的Cellx主格的位置。