精华内容
下载资源
问答
  • 典型数据报表的样式和作用

    千次阅读 2014-12-05 10:00:28
    数据报表概念 数据报表,即为用表格和图形来直观的展示数据。数据报表的类型和样式繁多,包括最常见的财务数据报表(资产负债表、利润表、现金流量表和股东权益变动表等)、销售数据报表(产品销售明细表、销售...

    数据报表的概念

    数据报表,即为用表格和图形来直观的展示数据。数据报表的类型和样式繁多,包括最常见的财务数据报表(资产负债表、利润表、现金流量表和股东权益变动表等)、销售数据报表(产品销售明细表、销售成本表、销售计划和完成情况表、市场分析表等)等。

    数据报表的样式

    FineReport是中国web报表软件领导品牌,在设计和制作数据报表上有着强大的优势和丰富的经验,制作的报表“性能好、样式多、交互性强”,下面就分享一下FineReport的demo中的一些典型的数据报表的样式和作用。

    基本表

    基本数据报表
    基本明细汇总表:该表用于展现数据明细,进行最基础的数据汇总。

    段落明细表:段落明细表为普通的明细格式报表。每条数据占据较规则的一片区域,一个段落。形成多个单据主体。此类报表的设计方法非常简单,仅需在设计时自定义数据的跟随扩展父格即可。
    段落明细数据报表

    多层统计表:多层统计表可以更好的展示多个维度的数据,是数据报表中常用的类型之一。
    多层统计数据报表

    高级条件分组表:这种分组表实质上是基本的数据汇总分析,因为在数据库中基本上不会存储汇总数据。
    高级条件分组数据报表

    动态折叠树表:为了更好的有规则的展示报表,企业也会选用动态折叠树表。
    动态折叠树数据报表

    卡片分栏条码表:很多行业都需要卡片分栏报表,打印之后贴在物品之上,便于管理识别,快递行业经常使用。
    卡片分栏条码数据报表

    简单自由填报表:填报是采集数据的途径,通过web报表采集可以保证数据的规范性和实效性。简单自由填报表,就是最基本的填报报表了。
    简单自由填报数据报表

    销售主题数据报表

    销售情况综合分析数据表:用于展示销售的收入、成本、净利润和销售业绩的数据,分析维度众多,包括常见的发货情况、收款情况、年份增长等。同时,也会有市场分布和员工业绩分析,是综合的销售数据报表。
    销售主题数据报表

    TOP10员工回款和销售额分析数据表:用于分析前10名的销售员每月的订单金额和回款率。
    员工回款和销售额分析数据报表

    产品分析数据表:用来分析产品的市场情况、销售额、价格等情况,进行展现产品的SWOT的分析情况。
    产品分析数据报表

    客户ABC等级分析数据表:对客户进行分级管理,方便企业获取更多的利润。
    客户ABC等级分析数据报表

    订单分析数据表:用于分析订单的总额、来源和销售额预计。
    订单分析数据报表

    财务主题数据报表

    EVA经济附加值模型表:根据表中的数据分析,EVA是一个计算的数字,随着所得税税率的增加而减少。仅从算术角度上来说,是很容易理解的。EVA公司的管理人员清楚明白增加价值只有三条基本途径:一是可以通过更有效地经营现有的业务和资本,提高经营收入;二是投资所期回报率超出公司资本成本的项目;三是可以通过出售对别人更有价值的资产或通过提高资本运用效率,比如加快流动资金的运转,加速资本回流,而达到把资本沉淀从现存营运中解放出来的目的。
    EVA经济附加值模型表

    盈亏平衡点分析表:根据表中的数据分析,该企业将要投产的新产品,当销售单价定为30元时,销售量需要达到40000个,方能达到盈亏平衡,盈亏平衡点的销售额为120000。
    盈亏平衡点分析数据报表

    F分数模型分析表:F分数低于临界点,表示公司财务情况不妙。本表根据实际的财务计算后发现,得分仅有-0.12,低于临界值0.0274,该公司的财务情况及其恶劣,有极大可能会破产。
    F分数模型分析数据报表

    阿特曼Z-SCORE模型分析表:Z值与公司发生财务危机的可能性成反比,Z值越小。公司发生财务危机的可能行就越大,Z值越大,公司发生财务危机的可能性就越小。对于不同的企业,临界值可能会有所不同。本表根据实际的计算后发现,Z得分仅有0.7,因此前景堪忧,企业很可能破产。
    阿特曼Z-SCORE模型分析数据报表

    杜邦分析表:Z值与公司发生财务危机的可能性成反比,Z值越小。公司发生财务危机的可能行就越大,Z值越大,公司发生财务危机的可能性就越小。对于不同的企业,临界值可能会有所不同。本表根据实际的计算后发现,Z得分仅有0.7,因此前景堪忧,企业很可能破产。
    杜邦分析数据报表

    巴萨利分数模型分析表:巴萨利指数过低,或者负数,表示公司前景不妙。本表根据实际的财务计算后发现,得分仅有1.69,因此可能公司的财务状况相对较差,前景堪忧。
    巴萨利分数模型数据报表

    帕里普分析模型表:根据表中连续三年的数据分析可知,股利支付比率没有变化,影响可持续增长比率的原因在于净资产收益率的变化。将净资产收益率展开,可以继续对比分析引起净资产收益率的因素:净利润率、总资产周转率和财务杠杆作用。09年到11年三年间除净利润率先减后增,总资产周转率和财务杠杆作用都呈现下降趋势。
    帕里普分析模型据报表

    资产负债表:通过统计企业各项资产和收入支出来评判企业的资产负债情况,是企业极为重要的财务数据报表之一。
    资产负债数据报表

    现金流量表:用于展示分析企业的各种账款的流水明细,由于现金流是企业的命脉,所以现金流量表也是企业财务数据报表不可分割的一部分。
    现金流量数据报表

    损益表:通过企业的营业总收入、总成本和其他经营收益,反映出一段时间内企业的收入、市场、支出情况。
    损益数据报表

    利润结构分析表:用于分析企业利润的构成。
    利润结构分析数据报表

    展开全文
  • 2020年刚刚接手公司管理工作的时候,我就有个想法:把财务部门变成公司的...因此就有了建立财务数据中心的想法,请注意,这个财务数据中心远远不同于以往的Excel和ERP等数据库和普通报表,具体是什么?我们往下看。 ...

    2020年刚刚接手公司管理工作的时候,我就有个想法:把财务部门变成公司的数据中心。

    我发现,财务部门汇集了几乎公司内外所有的数据:每项业务活动只要涉及到money的进出,都会在财务账上留下记录。如果把这些数据汇总起来,就会比较清楚的知道公司整体的运营情况,

    因此就有了建立财务数据中心的想法,请注意,这个财务数据中心远远不同于以往的Excel和ERP等数据库和普通报表,具体是什么?我们往下看。

    可能很多初学者会有这样的经历:在看完一份财务数据分析的报表之后,脑中除了一行行的数字,别的什么都记不得。此时,我们需通过构建一个分析框架,将复杂的财务数据拆分并重新罗列和归集到一个特定框架中,从而帮助我们分析企业。

    2020年领导最满意的可视化工具!分分钟做好数据报表,吊打python

    这种财务报表能看出什么?

    我总结了一下,就是如下的4个步骤:

    2020年领导最满意的可视化工具!分分钟做好数据报表,吊打python

     

    其实搭建这个业务模型和炒菜的过程是一样的:

    • 业务明细数据:来自世界各地的食材,全部堆在一起供选择
    • 数据仓库:将食材进行分类和保存
    • 数据可视化:不同口味的菜,不同方式的摆盘
    • 数据建模预警:通过以往经验看一看食材够不够,是不是过期了,质量如何

    2020年领导最满意的可视化工具!分分钟做好数据报表,吊打python

     

    1、明确财务数据

    很多小公司的财务数据量不大,所以基本上Excel就能解决,但是这是非常不合理的做法,因为财务报表的来源复杂,没有专门的数据库管理,都靠手动的话迟早会让人崩溃。

    所以企业一定要有属于自己的财务数据软件,自己开发也好,商用的也罢,这是一个企业想要做大最基础的东西。

    2、数据仓库的建立

    很多人会问,有了数据库了,为什么还要数据仓库呢?其实这是两个完全不同的概念。

    企业需要数据中心的最终意义是什么?肯定是要进行分析,不然存在那里每年就为了付数据库的钱?

    2020年领导最满意的可视化工具!分分钟做好数据报表,吊打python

     

    数据库就是一个装数据的柜子,你在需要数据的时候可以从里面查找到,企业的所有数据都在里面,所以你现在知道为什么删库跑路这么严重了吧?

    而数据仓库的核心意义在于数据分析:所需数据维度太多时,从数据库调用非常麻烦,于是必须得建立一个不同的数据处理中心,以满足实时化和自动化决策需求。

    按照过程,一般的数据是由交易型数据库转移至分析型数据库,清洗整理后在数据仓库加载,最后转移至数据集市供用户使用。

    3、数据可视化

    “举头望明月,低头做报表” 的时候,想必企业中的很多部门都因为报表而忙得不可开交吧。相较于传统密密麻麻的表格汇报形式,图表却能够将数据真正直接可视化,更加直观地呈现数据的业务状况。

    我们所见过许多眼花缭乱的可视化,大部分是用华丽的视效堆叠起来博人眼球,然而经不起业务价值的推敲,而且还会浪费分析人的很多时间,有时候不得不加班加点。

    除了这个原因之外,还有一个重要原因是不懂得利用工具。

    很多人做可视化就先考虑Excel,确实,Excel能做可视化,但是做出如下的效果,需要写各种函数,熟悉的人都要用到一小时以上,95%的人Excel要做成这样基本上不太可能。

    2020年领导最满意的可视化工具!分分钟做好数据报表,吊打python

     

    何况Excel遇到大数据,还会经常出现这种情况...

    2020年领导最满意的可视化工具!分分钟做好数据报表,吊打python

     

    而如果能够掌握一些专业的可视化工具,起码能够减少一半的工作时间和重复量,比如FineBI、python、tableau等,这些都属于数据分析工具中比较适合新手的可视化帮手。

    比如,FineBI对于数据的图表设置相对来说比较简单,进行数据字段的拽拖即可,同时还有一些数据的查询操作等,也是只需要拖拽空间即可。

    2020年领导最满意的可视化工具!分分钟做好数据报表,吊打python

     

    这样的可视化大屏也完全不在话下:

    2020年领导最满意的可视化工具!分分钟做好数据报表,吊打python

     

     

    2020年领导最满意的可视化工具!分分钟做好数据报表,吊打python

     

    4、建立数据分析模型

    这一块如果要细讲,可以有很多点可以讲,这里我就简单说一下吧。

    任何重复性的工作、手工操作的工作,我都希望自动化、智能化,财务部门不能再像以前那样简单处理个数据就OK了,好多工作都能自动化,不需要那么多人力。

    不同模块用到的数据源是不同的,为了方便,我把几个模块常用的数据模型化,放在一张表里面,我做分析的时候,调整一下几个模块的数据就OK了。

    再来说说各位在建立财务分析框架时可能遇到的最为棘手的问题吧:

    • 基层业务数据的质量:这极大地影响了财务分析数据库和模型的搭建。看起来似乎容易,但是一家集团公司的财务数据系统都会有N个小的数据软件,种类真的很多
    • 数据清洗(核心):如果数据洗不干净或者没法打散,后边的一切分析工作都免谈。如何将缺失行列信息或遗漏信息的数据清洗成标准格式是重中之重
    • 权限问题:正如真正负责集团业务财务数据建模和整合的都是在集团层面,每个可视化报告的数据源权限,报告权限都是谁可以拥有,解决这个问题需要的时间比想象更长

    对这些问题,FineBI都是这么解决的。

    1、数据质量问题

    企业数据质量不一,来源不同应该是老大难问题了,FineBI支持丰富的数据源链接,多种数据整合毫无压力。

    2020年领导最满意的可视化工具!分分钟做好数据报表,吊打python

     

    FineBI的表间关联支持灵活应用,一次建立即可多次使用

    2020年领导最满意的可视化工具!分分钟做好数据报表,吊打python

     

    2、数据清洗问题

    用FineBI导入数据之后,可以创建自助数据集,即自己可以根据需要整合数据,这一步也是去除脏数据,留下有用数据的过程。

    2020年领导最满意的可视化工具!分分钟做好数据报表,吊打python

     

    下图展示了FineBI强大的数据处理能力。

    2020年领导最满意的可视化工具!分分钟做好数据报表,吊打python

     

    3、权限问题

    FineBI数据决策系统中的权限受体不仅包括部门、角色,还为特殊权限分配的需求提供了基于单个用户的权限设置功能。

    你想给他看的时候,他才能看见,一键操作即可完成:

    2020年领导最满意的可视化工具!分分钟做好数据报表,吊打python

     

    来看看FineBI的实际操作吧:

    1、趋势分析

    一般可使用折线图进行分析统计,用横轴表示时间(年、月、日),纵轴表示如营业收入、成本支出、利润率等指标再合适不过了。如下图所示,左值轴统计出每年营业收入和成本支出的走势,右值轴统计出每年的利润率走势情况。

    2020年领导最满意的可视化工具!分分钟做好数据报表,吊打python

     

    2、对比分析

    我相信每个企业都需要这个,多维度对比,将不同种类的数据都联系起来,这是很重要的环节。

    2020年领导最满意的可视化工具!分分钟做好数据报表,吊打python

     

    我们在做对比分析时,比较数据的大小,通常推荐使用柱状图、条形图,当进行数据结构比较时通常推荐使用累积柱形图、累积条形图进行数据对比分析。

    总结

    不管任何财务分析,如果没有把握透过数据看企业业务实质这个基本精神,而只是从形式,方式,框架方面花心思,都是不切实际的。

    关注我,并转发该文章,私信回复“可视化”,即可获得FineBI数据分析平台和方法论~

    展开全文
  • 通过缓存和维护Excel Workbook实例,极速响应Excel数据报表请求。 维护一份Workbook资源池。程序启动后,写一个定时器,监控资源池中的对象数量,达到资源下界的时候,就构造一些新的对象放进资源池中。

    摘要

    通过缓存和维护Excel Workbook实例,极速响应Excel数据报表请求。

    这是一个真实的大数据“云计算”项目中的解决方案,在给定的时间和资源下,只有这种方法是最简单并且是可行的。

    XX公司的需求

    简单Excel报表:1个sheet。5秒内可以在界面展示。

    复杂Excel报表:7个sheet。20秒内可以在界面展示。

    并发响应:20个用户

    详细介绍

    每个sheet中有大量的Excel公式,如 F=E32-[35764%D1]*[DD]/[LD]。

    每个单元格的值,需要后台从Mongodb数据库中取出并计算。

    Web前端获得后台返回的数据,插入到Excel单元格中,然后Excel自动执行公式,然后将Excel完整地显示到界面中。

    时间瓶颈

    后台数据获取和数据计算的时间:

    1个sheet要3-4s,7个sheet要10到20s。

    前台展示剩下的时间:
    1个sheet:1到2秒
    7个sheet:0到10秒

    读取Excel文件需要的时间

    1个sheet:1s左右

    7个sheet:2s左右

    Excel文件构造成POI XSSFWorkbook对象

    1个sheet:1s左右

    7个sheet:7s左右

    最初,我以为是IO有瓶颈,后来发现不是。主要是POI 构造XSSFWorkbook对象,需要花费很长时间。

    XSSFWorkbook这可是一个比较大且复杂的数据结构,维护着一个Excel文档的所有信息。

    (令人可气的是,测试机Linux服务器性能竟然还不如我的笔记本)

    解决方案

    考虑到并发请求最多也就是20,而且这只是一个Demo项目,因此“空间换时间”是可行的。

    灵感来源:数据库连接池、对象池、缓存等都可以用来提高程序的性能。

    最终方案维护一份Workbook资源池。程序启动后,写一个定时器,监控资源池中的对象数量,达到资源下界的时候,就构造一些新的对象放进资源池中。

    与数据库连接池等不同的是,Workbook资源池中的每一个XSSFWorkbook对象,只能使用一次。用完后,就必须从资源池中删除。

    因为,XSSFWorkbook被使用后,很多状态都变了。

    资源池代码结构

    public class WorkbookPool {
    
    
        private static int complexMinSize = TemplatePropertyReader.COMPLEX_MIN_SIZE;
        // 复杂报表--最大缓存
        private static int complexMaxSize = TemplatePropertyReader.COMPLEX_MAX_SIZE;
    
        public WorkbookPool() {
    
        }
    
        public void init() {
    
          simpleReportTimer();
          complexReportTimer();
        }
    
    
       // 定时器任务---创建报表对象    
    
        private void simpleReportTimer() {
            log.info("Simple Producter Timer Start...");
            Timer producterTimer = new Timer();
            // 在1秒后执行此任务,每次间隔1秒
            producterTimer.schedule(new SimpleProducterTask(), 1000, 1000);
    
        }
    
        private void complexReportTimer() {
            log.info("Complex Producter Timer Start...");
            Timer complexProducterTimer = new Timer();
            // 在1秒后执行此任务,每次间隔1秒
            complexProducterTimer.schedule(new ComplexProducterTask(), 1000, 1000);
        }
    
    
    // 简单报表--定时器任务
        class SimpleProducterTask extends TimerTask {
    
            public void run() {
    
                int simpleSize = simpleVector.size();
                if (simpleSize <= simpleMinSize) {
                    int toBuildSize = simpleMaxSize - simpleSize;
                    log.info("before : simpleSize=" + simpleSize + ",toBuildSize=" + toBuildSize);
                    buildSimple(toBuildSize);
                    log.info("after : simpleSize=" + simpleVector.size());
                }
    
            }
        }
    
        // 复杂报表--定时器任务
        class ComplexProducterTask extends TimerTask {
    
            public void run() {
                int complexSize = complexVector.size();
                if (complexSize <= complexMinSize) {
                    int toBuildSize = complexMaxSize - complexSize;
                    log.info("before: complexSize=" + complexSize + ",toBuildSize=" + toBuildSize);
                    buildComplex(toBuildSize);
                    log.info("after: complexSize=" + complexVector.size());
                }
            }
        }
    
    }


    启示

    数据库连接池、对象池、缓存等很多程序设计中的概念,是存在着相似之处的。

    学习和借鉴每一个成熟的概念和解决方案,能够产生更多的好方法。

    活学活用,灵活解决实际工作中遇到的问题。

    拒绝码农,谢绝书呆子。

    相关阅读

    ExcelToHtmlTable转换算法:将Excel转换成Html表格并展示(项目源码+详细注释+项目截图)

    码农:客户是恶魔

    原文参见http://FansUnion.cn/articles/2851 小雷网(FansUnion.cn)

    展开全文
  • 业界专家Edward Tufte提出了数据墨水(Data Ink)的概念,来指导表格数据显示和表格设计。 本文介绍了数据墨水在报表数据显示中的重大作用。
  • 如何优化多数据集关联报表

    千次阅读 2018-11-12 11:42:52
    数据集关联报表是很常见的报表形式,它允许开发者分别从不同的来源(表或数据库)分别准备数据形成不同的数据集,在报表端(模板)通过表达式描述数据集间的关系完成关联。这样可以避免在数据准备时写过于复杂的 ...

    多数据集关联报表是很常见的报表形式,它允许开发者分别从不同的来源(表或数据库)分别准备数据形成不同的数据集,在报表端(模板)通过表达式描述数据集间的关系完成关联。这样可以避免在数据准备时写过于复杂的 SQL/ 存储过程,降低维护难度。尤其当报表数据来源于多个数据库时,多数据集的优势更加明显。

    凡事都有两面性,多数据集为开发带来方便的同时却对性能造成了极大的影响。在报表端进行多数据集关联时要计算关联表达式(举例:ds2.select(name,,id==A1))时,报表引擎一般会采用顺序遍历的方式进行,先拿一个数据集的第一条记录去第二个数据集中遍历查找符合条件的记录,然后是第二条,第三条…。因此两个数据集关联的时间复杂度是 O(n²),数据量不大时感受还不明显,数据量稍大一些就会很慢,随着数据集数量的增多报表性能也会呈指数下降。

    因此在实际报表业务中,当多数据集关联导致报表性能降低时可以考虑将多个数据集 SQL 合并成一句,利用数据库的关联计算能力提升性能。但这种方式又会导致 SQL 过于复杂,很难维护,而太复杂的 SQL 很可能被数据库搞错优化路径,结果性能仍不可控。并且合并 SQL 的方式有适用场景的限制(如无法完成跨异构库关联、文本关联等)。

    下面介绍采用集算器的优化方法,写法简单且性能高,能够普遍适用于各种场景:

    1. 单数据库,多个数据集 SQL 比较复杂,很难写成一句
    2. 单数据库,多数据集中使用了存储过程,无法整合成一句 SQL
    3. 单数据库,多数据集合并成一句 SQL 后性能仍不如人意
    4. 多数据库,多数据集来源多个数据库,无法通过一句 SQL 进行查询
    5. 涉及文件数据,多数据集中部分数据来自文件,无法使用 SQL 进行统一查询

    不同于 SQL(关系代数)采用笛卡尔积再过滤的方式看待 JOIN,基于离散数据集模型的集算器将关联运算做了区分(只考虑等值 JOIN):多对一的主外键表采用外键属性化方式关联、一对一的同维表采用同维表等同化方式关联、一对多的主子表采用主子表一体化关联,针对不同的表间关系采用不同算法进行运算,可以获得更简单的写法和更高的性能以及更广泛的适用范围。

    我们将通过一些示例来说明面向各种情况时,如何使用集算器获得最优的实现和效率。需要说明的是,为了描述方便我们使用抽象后最简单的情况说明各种关联运算,实际业务会复杂得多,每个数据集 SQL 也会复杂得多,但是不管怎样多数据集关联关系也逃不出多对一、一对一和一对多的情况,所以拿原子操作来说明问题,以期大家遇到问题时可以采用最合适的方式处理。

    报表集成

    这里假定读者已经了解集算器与报表的关系,集算器仅为报表提供数据准备,将原来的多数据集通过集算器完成关联计算,将计算以结果以单 / 多数据集的方式提供给报表进行呈现。

    集算器脚本可以直接被润乾报表 5.0 及以上版本直接引用(集算器数据集);如果是其他报表工具,集算器提供了标准 JDBC 和 ODBC 接口,可以采用类似调用存储过程的方式调用集算器脚本,详细可以参考教程《应用集成 - 被 JAVA 调用》章节,以及《集算器与 BIRT 集成》或《集算器与 JasperReport 集成》。

    因此下面大部分例子将省略报表制作部分,主要说明集算器处理多数据集关联计算的过程。

    外键表(多对一)

    表 A 的某些字段与表 B 的主键关联。A 表称为事实表,B 表称为维表。A 表中与 B 表主键关联的字段称为 A 指向 B 的外键,B 也称为 A 的外键表。外键表是多对一的关系,且只有 JOIN 和 LEFT JOIN,一般不会用到 FULL JOIN。如:订单表和客户表

    Orders 表和 Customer 表的主键都是其中的 id 字段,Orders 表的 customerID 字段是指向 Customer 表的外键。

    这里说的主键是指逻辑上的主键(下同),也就是在表中取值唯一的字段(组),一个表上可能有多个字段(组)都取值唯一(并不常见),可以认为都是主键。不是一定是在物理表上建立的那个主键。

    单外键举例

    报表中有两个数据集,数据分别来自订单信息表(Orders)和客户表(Customer)(实际业务中可能是两条复杂 SQL),订单表的客户 ID 指向客户表的主键客户 ID,属于典型的主外键关系。

    【计算目标】 查询某时间段内订单和客户详单

    集算器数据准备

    单库情况

    当两个数据集来源于单个数据库,数据集 SQL 比较复杂不易合并时,通过集算器实现多对一关联计算,脚本如下:

     AB
    1=connect(“db”)/ 建立数据库连接
    2=A1.query(“select * from 订单 where 订购日期 >=? and 订购日期 <=?”,begin,end)/ 查询订单数据
    3=A1.query@x(“select * from 客户”)/ 查询客户数据
    4>A2.switch(客户 ID,A3: 客户 ID)/ 关联,在 A2 订单表客户 ID 字段上建立指向客户表的指针
    5=A2.new(客户 ID. 公司名称: 客户名称, 订单 ID, 订购日期, 运货费, 订单金额)/ 通过外键属性化的方式,将外键表字段作为客户 ID 属性使用

    脚本解析:

    1、前 3 行连接数据库后分别取订单和客户数据作为两个独立数据集(事实上 A2 和 A3 的 SQL 可以任意复杂,取数阶段无需将两条 SQL 合并,分别查询即可);这里为了说明指针与记录,将两个表所有字段都选出,实际业务中应该用哪些字段取哪些。

    2、A2 中使用了脚本参数 begin 和 end 来接收起止时间范围

    3、注意 A3 的 query 函数使用了 @x 选项,代表查询后关闭连接,使用完数据库连接一定要及时关闭(也可以通过 Aclose() 显示关闭数据库连接)

    4、A4 中通过 switch 函数在 A2 订单表的客户 ID 字段上建立指向客户表记录的指针实现关联

    5、A5 利用建立关联关系通过“外键字段. 维表字段”的方式进行引用,如“客户 ID: 客户名称”,将维表记录看做外键的的属性,这便是外键属性化的由来;

    6、A5 为报表返回关联后结果集

    关于 switch 函数

    在 SQL 的概念体系中并不区分外键表和主子表,多对一和一对多从 SQL 的观点看来只是关联方向不同,本质上是一回事。比如,订单也可以理解成订单明细的外键表。但是,集算器把它们区分开,在简化语法和性能优化时使用不同的手段。

    switch 是集算器中实现多对一关联的函数,通过建立事实表和维表之间的外键指针实现连接。其原理是通过 HASH 算法在外键字段上建立指向维表记录的指针,这样在建立关联的时间与数据库中最快的关联方式 HASH JOIN 一样,但接下来使用连接结果时就不需要再查找 HASH TABLE,直接通过指针定位到内存中的维表记录。

    建立外键指针后外键字段的原值不再存储,而被转化为指向维表记录的指针,所有维表字段都可以通过“外键字段. 维表字段”方式引用,因此 switch 函数只适合做单外键的关联(原外键字段值变了),多外键关联时需要使用 A.join 函数(后面会说明多外键情况)。

    指针式连接的意义在于一次建立多次使用,重复使用时由于无需再建立连接性能高效得多。如上述例子中,除了获取订单和客户详单,还想针对客户所在区域汇总订单数量,那么可以写成这样(B5 格):

     AB
    1=connect(“db”) 
    2=A1.query(“select * from 订单 where 订购日期 >=begin and 订购日期 <=end”) 
    3=A1.query@x(“select * from 客户”) 
    4>A2.switch(客户 ID,A3: 客户 ID) 
    5=A2.new(客户 ID. 公司名称: 客户名称, 订单 ID, 订购日期, 运货费, 订单金额)=A2.groups(客户 ID. 所在区域;count(订单 ID):num)

    B5 的计算继续使用了在 A2 客户 ID 字段上建立的指针,而无需重新建立关联。实际应用中,指针式关联建立后,重复使用次数越多性能优势越明显。

    在报表中复用连接,计算不同的结果集多用于分片报表,分片报表在报表业务中并非很常见,但也不算罕见,不过对应业务都比较复杂,不大合适举例,这里就不细说了。当遇到报表分片且有相同关联情况时可以考虑使用集算器进行连接复用。

    多库情况

    前面提到多库尤其是异构多库情况下无法利用 SQL 做关联计算,在报表中计算性能又低,这时非常适合使用集算器来做。下面假设订单和客户表分别来源两个不同数据库 db1 和 db2,计算目标仍然是:查询某时间段内订单和客户详单,来看集算器的具体写法。

     AB
    1=connect(“db1”)=connect(“db2”)
    2=A1.query@x(“select * from 订单 where 订购日期 >=? and 订购日期 <=?”,begin,end) 
    3=B1.query@x(“select * from 客户”) 
    4>A2.switch(客户 ID,A3: 客户 ID) 
    5=A2.new(客户 ID. 公司名称: 客户名称, 订单 ID, 订购日期, 运货费, 订单金额) 

    注意到和单库情况的区别了吗?

    多库情况只需要在脚本中建立多库的连接(A1 和 B1)分别执行 SQL 查询(A2 和 A3),剩下的运算和单库完全一致,轻松实现基于多库的关联计算。

    事实上,集算器(脚本)还非常利于应用移植和数据库扩展,当底层数据库发生变化或者由单库拆分成多库时,只需更改数据库连接,主要的计算逻辑完全不用改。更进一步,如果连接信息也维护在配置中,则可以写出更加通用的脚本做到系统扩展时脚本无缝移植。

    涉及文本

    集算器作为开放计算引擎提供了多数据源支持,除了关系数据库外,本地文件(Excel、TXT、CSV、JSON/XML)、NoSQL、Hadoop 等也可以直接作为数据源参与运算。因此如果报表中有数据来源于文本、Excel 等文件,可以通过集算器直接处理(SQL 就无能为力了)。

    沿用上面的例子,假设客户信息来源于 TXT,计算目标仍然是:查询某时间段内订单和客户详单。来看集算器的写法。

     AB
    1=connect(“db1”) 
    2=A1.query@x(“select * from 订单 where 订购日期 >=? and 订购日期 <=?”,begin,end) 
    3=file(“/usr/ 客户.txt”).import@t()/ 读入文件数据
    4>A2.switch(客户 ID,A3: 客户 ID) 
    5=A2.new(客户 ID. 公司名称, 订单 ID, 订购日期, 运货费, 订单金额) 

    涉及到文本有什么变化吗?只将 A3 改为读取文件数据即可,核心计算逻辑仍然没有变化。

    上面我们通过多对一的两个表对单库、多库和文件三种情况进行说明,报表遇到相应问题可以使用集算器处理。实际业务中还可能涉及多层外键情况,即多表外键关联。

    多层外键关联举例

    报表中有三个数据集,数据分别来自订单信息表(Orders)、客户表(Customer)和地区表(Area),订单表的客户 ID 指向客户表的主键客户 ID,客户表的所在区域指向区域表的主键区域 ID。

    【计算目标】 查询某时间段内订单及其客户与所在区域详细信息

    集算器数据准备

     AB
    1=connect(“db”) 
    2=A1.query(“select * from 订单 where 订购日期 >=? and 订购日期 <=?”,begin,end) 
    3=A1.query(“select 客户 ID, 公司名称 from 客户”)=A1.query@x(“select 区域 ID, 区域名称 from 地区”)
    4>A3.switch(所在区域,B3: 区域 ID)>A2.switch(客户 ID,A3: 客户 ID)
    5=A2.new(客户 ID. 所在区域. 区域名称: 区域, 客户 ID. 公司名称: 客户, 订单 ID, 订购日期, 运货费, 订单金额) 

    脚本解析:

    1、A2-B4 分别查询订单、客户和地区数据

    2、A4 中通过 switch 函数在 A3 所在区域上建立指向地区记录的指针实现关联

    3、同理,B4 在 A2 订单表的客户 ID 字段上建立指向客户表记录的指针实现关联,这里得到了一个三层结果的集合

    4、A5 通过外键属性化的方式引用区域和客户信息,可以看到无论有多少层外键都可以通 过 [点](.)的方式作为外键属性引用

    在实际业务中很常见的星型结构还会涉及到同一个事实表和多个维表进行关联,不同于传统的 HASH 分段 JOIN 方案,集算器无需两两消除、多次遍历,通过遍历一次事实表即可完成与多个维表的关联,非常高效,适合多数据库表关联性能低下需要改善的场景。

    下面以一个事实表与两个维表关联说明多维表情况下集算器处理方式。

    关联多个维表举例

    订单信息表(Orders)与客户表(Customer)、雇员表(Employee),订单表的客户 ID 指向客户表的主键客户 ID;销售 ID 指向雇员表的员工 ID

    【计算目标】 按客户所在区域和销售人员汇总订单金额

    集算器数据准备

    集算器实现脚本:

     AB
    1=connect(“db”) 
    2=A1.query(“select * from 订单”) 
    3=A1.query(“select * from 客户”) 
    4=A1.query@x(“select * from 雇员”) 
    5>A2.switch(客户 ID,A3: 客户 ID; 雇员 ID,A4: 雇员 ID)/ 同时关联两个维表
    6=A2.groups(客户 ID. 地区: 地区, 雇员 ID. 姓名: 姓名;sum( 订单金额):amount)/ 外键属性化方式访问维表字段,汇总指标

    在 A5 中通过 switch 将订单信息同时与客户表和雇员表关联,客户 ID 和雇员 ID 分别指向对应维表的记录

    这里可以看到,通过遍历一次订单表就关联了客户和雇员,当外键关联较多时使用 switch 更加简单高效。相反,在写 SQL 关联多个表时,偶尔会出现漏写 join 条件导致数据库被跑死的情况,而集算器则完全避免了这种情况。

    多外键情况举例

    单外键下无论是数据来源数据库或是文件均可使用 switch 进行处理,实际业务中还可能存在多外键的情况。报表中有两个数据集分别来自学生表(Students)和班级表(Classes),学生表的专业号和班级号为外键字段,分别指向班级表的联合主键(专业号,班级号)。

    【计算目标】 查询所有学生的学号,姓名,专业,班级,班主任

    集算器数据准备

     AB
    1=connect(“db”) 
    2=A1.query(“select * from 学生”) 
    3=A1.query@x(“select * from 班级”).keys(专业号, 班级号) 
    4=A2.join(专业号: 班级号,A3, 班主任)/ 双主键关联

    脚本解析:

    1、A3 查询班级数据,并通过 keys 设置班级的主键为专业号和班级号;

    2、A4 使用 A.join() 函数进行双主键关联,将班主任信息添加到学生信息中,形成目标结果集

    与 switch 处理单外键关联不同,当出现多外键的情况下需要使用 A.join 完成关联。

    同维表(一对一)

    表 A 的主键与表 B 的主键关联,A 和 B 互称为同维表。同维表是一对一的关系,JOIN、LEFT JOIN 和 FULL JOIN 的情况都会有,如:员工表和经理表。

    两个表的主键都是 id,经理也是员工,两表共用同样的员工编号,经理会比普通员多一些属性,另用一个经理表来保存。

    单主键举例

    报表中有三个数据集,分别来自回款表(OrderPayment)、客户表(Customer)和订单表(Orders),回款表的客户 ID 指向客户表主键客户 ID,订单表的客户 ID 指向客户表主键客户 ID。

    【计算目标】 按客户(所有)查看某时间段订单总额和回款总额

    这是很常见的一类报表,按照某个维度(如地区、日期、人员)汇总多个指标(如订单额、回款额),但我们发现报表的三个数据集之间并不是像销售表和员工表(主键都是人员 ID)那样互为同维表,不过结合计算目标分析一下,由于一个客户会有多笔订单和回款记录,因此需要对两个表分别按照客户 ID 分组后(结果集以客户 ID 为主键)向客户表主键客户 ID 对齐,显然三个集合是一组以客户 ID 为主键的同维表。

    集算器数据准备

     AB
    1=connect(“db”) 
    2=A1.query(“select 客户 ID,sum( 订单金额) 订单金额 from 订单 where 订购日期 >=? and 订购日期 <? group by 客户 ID”) 
    3=A1.query(“select 客户 ID,sum( 回款金额) 回款金额 from 回款 where 回款日期 >=begin and 回款日期 <=end group by 客户 ID “) 
    4=A1.query@x(“select 客户 ID, 公司名称 from 客户”) 
    5=join@1(A4: 客户, 客户 ID;A2: 订单, 客户 ID;A3: 回款, 客户 ID) 
    6=A5.new(客户. 公司名称: 客户名称, 订单. 订单金额: 订单金额, 回款. 回款金额: 回款金额) 

    脚本解析:

    1、A2 和 A3 针对订单和回款数据分别按照客户 ID 进行分组汇总;

    2、A5 按照客户表左关联(@1 选项代表左连接)订单和回款数据

    3、A6 获得关联结果返回报表数据集

    这里关注一下 join 函数(上述例子 A5=join@1(A4: 客户, 客户 ID; A2: 订单, 客户 ID;A3: 回款, 客户 ID)),可以看到 join 的各个表之间看起来似乎是无关的,在集算器中关联时无需关注表间关系,只需要同时向某一个维度(如客户维度)对齐即可,这样在关联表增多或减少时修改非常方便。如果是 SQL 的写法必须指定两个表的关联条件,关联的表数量太多时就容易漏写一两个条件导致出现叉乘算错的情况,如果漏写条件的表比较大,还容易把数据库跑死;集算器的 join 则避免了这种情况。

    另外,从上述例子来看当涉及多个事实表同时向维表对齐汇总时,一定要先 group 再 join,如果先 join 再 group 就会算错,写成 SQL 应该是维表和有两个 group by 的子查询 join。

    多主键情况举例

    与多外键情况类似,当同维表采用联合主键时就会存在多主键同维表关联的情况。报表中有两个数据集,分别来自回款表(OrderPayment)和订单表(Orders),两个表没有关联关系。

    【计算目标】 按客户和年份汇总回款金额和订单金额

    这两个表直接并没有关联关系,但经过同样两个维度分组汇总后,就形成了两个以客户和日期为主键的同维表

    按照计算目标,要同时获得回款金额和订单金额,需要将两个表进行关联计算。

    集算器数据准备

     AB
    1=connect(“db”) 
    2=A1.query(“select 客户 ID,year( 订购日期) 年份,sum(订单金额) 订单金额 from 订单 where 订购日期 >=? and 订购日期 <=? group by 客户 ID, 年份”,begin,end) 
    3=A1.query(“select 客户 ID,year( 回款日期) 年份,sum(回款金额) 回款金额 from 回款 where 回款日期 >=? and 回款日期 <=? group by 客户 ID, 年份 “,begin,end) 
    4=join@f(B2: 订单, 客户 ID, 年份;B3: 回款, 客户 ID, 年份) 
    5=A4.new(订单. 客户 ID: 客户, 订单. 年份: 年份, 订单. 订单金额: 订单金额, 回款. 回款金额: 回款金额) 

    脚本解析:

    1、A2 和 A3 分别查询订单和回款数据,并按客户和年份汇总订单额和回款额;

    2、A4 通过全连接对齐带有两个主键(客户 ID, 年份)的结果集

    3、A5 根据关联结果返回报表数据集

    同维表与外键表混合

    在实际业务中还经常能见到同维表和外键表混合使用的情况,集算器处理起来仍然简单高效。

    举例

    沿用上述单主键同维表的例子,现在还有一张地区表(Area),客户表外键字段所在区域指向区域表主键区域 ID。

    【计算目标】 按客户所在区域和客户查看某时间段订单总额和回款总额

    分析后仍然得到下面的同维表,只不过客户表外键字段所在区域又指向了地区表,出现了同维表和外键表混合的情况。

    集算器数据准备

     AB
    1=connect(“db”) 
    2=A1.query(“select 客户 ID,sum( 订单金额) 订单金额 from 订单 where 订购日期 >=? and 订购日期 <=? group by 客户 ID”,begin,end) 
    3=A1.query(“select 客户 ID,sum( 回款金额) 回款金额 from 回款 where 回款日期 >=?  and 回款日期 <=? group by 客户 ID “,begin,end) 
    4=A1.query(“select 客户 ID, 公司名称, 所在区域 from 客户”) 
    5=A1.query@x(“select 区域 ID, 区域名称 from 区域”) 
    6>A4.switch(所在区域,A5: 区域 ID) 
    7=join@1(A4: 客户, 客户 ID;A2: 订单, 客户 ID;A3: 回款, 客户 ID) 
    8=A7.new(客户. 所在区域. 区域名称: 区域, 客户. 公司名称: 客户名称, 订单. 订单金额: 订单金额, 回款. 回款金额: 回款金额) 

    脚本解析:

    1、A6 在 A4 客户信息中建立外键关联

    2、A7 关联后结果可以看到集算器的结果集可以是任意多层结构

    3、A8 通过外键属性化方式引用区域名称,为报表返回结果集

    主子表(一对多)

    表 A 的主键与表 B 的部分主键关联,A 称为主表,B 称为子表。主子表是一对多的关系,只有 JOIN 和 LEFT JOIN,不会有 FULL JOIN,如:订单和订单明细。

    Orders 表的主键是 id,OrderDetail 表中的主键是 (id,no),前者的主键是后者的一部分,订单表是主表,订单明细表子表。从子表去看主表,与前述提到的外键表非常类似,只是外键表不要求外键字段是主键,因此从子表角度观察表间关系可以将主子表看做外键表的特殊情况,所以有时也可以采用外键表处理关联的方法(switch)。

    主子表关联计算在报表中并不常见,即使有,多数情况下可以转换成将主表作为外键表关联,或者子表 group 后变成同维表处理。当主表作为外键表处理时,除了可以用到外键表(多对一)switch 的处理方式,还可以通过 join 实现。除了 join 可以关联多外键情况,当关联的两个结果集按照关联字段有序时还可以使用归并算法,性能比 switch 更高(数据量不大时优势并不明显)。

    子表关联主表将主表作为外键表可参考前述外键表中 < 单外键举例 >,子表 group 后变成同维表关联的例子可参考前述同维表中 < 单主键举例 >。

    下面介绍一种有序归并实施关联计算的方法,读者在对主子表(包括同维表)进行关联计算时也可选用,以获得更高性能。

    主子表有序归并举例

    报表有两个数据集,分别来自订单表(Orders)和订单明细表(OrderDetails)

    订单表主键与订单明细表部分主键关联,订单表是主表,订单明细表是子表。现在两个表都按照订单 ID 有序

    【计算目标】 查询某时间段内客户订单明细

    集算器数据准备

     AB
    1=connect(“db”) 
    2=A1.query(“select 订单 ID, 客户 ID from 订单 order by 订单 ID where 订购日期 >=? and 订购日期 <=?”,begin,end) 
    3=A1.query@x(“select 订单 ID, 订购产品, 价格, 数量 from 订单明细 order by 订单 ID “) 
    4=join@m(A2:o, 订单 ID;A3:od, 订单 ID) 
    5=A4.new(o. 客户 ID: 客户,o. 订单 ID: 订单,od. 订购产品: 产品,od. 价格: 价格,od. 数量: 数量) 

    脚本解析:

    1、A2-A3 分别查询订单和订单明细数据,结果集按订单 ID 有序

    2、A4 通过有序归并算法(@m 选项)对两个集合按照订单 ID 关联

    3、A5 获得关联结果为报表返回结果集

    有序归并可以极大提高关联效率,下面简单解释一下。

    设两个关联表的规模(记录数)分别是 N 和 M,则 HASH 分段技术的计算复杂度(关联字段的比较次数)大概是 SUM(Ni*Mi),其中 Ni 和 Mi 分别是 HASH 值为 i 的两表记录数,满足 N=SUM(Ni) 和 M=SUM(Mi),这大概率会比完全遍历时的复杂度 N*M 要小很多(运气较好的时候会小 K 倍,K 是 HASH 值的取值范围)。

    如果这两个表针对关联键都有序,那么我们就可以使用归并算法来处理关联,这时的复杂度是 N+M;在 N 和 M 都较大的时候(一般都会远大于 K),这个数会远小于 SUM(Ni*Mi),这就是有序归并的好处。

    润乾报表层次数据集

    通过这些例子,集算器为报表准备数据时最终返回的均为标准 ResutSet,这就经常需要将集算器的分层结构(如 switch 和 join 后结果集)转换成标准的二维表,虽然转换工作不复杂,但如果能直接使用分层结果集会更加简单高效。

    润乾报表 5.0 及以上版本就支持直接使用带有层次的数据集进行数据呈现。沿用订单和订单明细的主子表结构。

    【报表展现目标】

    报表每个单元上面是订单信息(单条),下面是明细信息(多条),属于典型的主子报表。

    集算器数据准备

     AB
    1=connect(“demo”) 
    2=A1.query(“select 订单 ID, 客户 ID from 订单 order by 订单 ID where 订购日期 >=? and 订购日期 <=?”,begin,end) 
    3=A1.query@x(“select 订单 ID, 订购产品, 价格, 数量 from 订单明细”)=A3.group(订单 ID)
    4=join@1(A2:o, 订单 ID;B3:od, 订单 ID) 
    5=A4.new(o. 客户 ID: 客户,o. 订单 ID: 订单,od) 

    脚本解析:

    1、B3 将订单明细按照订单 ID 分组,得到分组子集(保留分组成员)

    2、A4 订单关联订单明细,一条订单信息对应多条明细

    3、A5 生成报表可以接收的多层结果并为报表返回数据集

    润乾报表设计

    设置参数

    打开报表设计器,新建报表后设置查询参数

    设置数据集

    设置报表数据集,选择集算器数据集类型,添加上述准备好的集算器脚本文件,并设置报表参数与集算器脚本参数对应

    数据集设置后,在报表设计器右下角的数据集窗口中即输出层次结构如下:

    编写报表表达式

    直接使用集算器提供的层次结果集设置报表表达式,其中设置 B4、B5、B6、B7、B8 左主格为 C4(按照订单扩展)

    通过以上步骤即可完成基于层次数据集的报表设计,目前只有润乾报表提供了层次数据集支持,在制作主子表、分组明细报表时就可以在数据准备(数据集)阶段将数据准备好,然后为报表返回带有层次的数据集,报表直接引用无需再次关联或分组,可以带来更高的报表性能。

    子表有序计算举例

    区分主子表后,如果从主表观察子表常常会涉及分组子集和有序运算,这时用集算器处理就非常方便了。举一个并不十分常见的例子,读者可以感受一下。

    报表有三个数据集,分别来自回款表(OrderPayment)、订单表(Orders)和订单明细表(OrderDetails)。

    订单表的主键是订单 ID,回款表的主键是(编号,订单 ID),订单明细表的主键是(编号,订单 ID),订单的主键是回款和订单明细的一部分,订单表是主表,回款表和订单明细表是子表。

    【计算目标】 统计每个客户的每个订单中,最大和最小两笔回款,最高和最低两个价格

    这里并不是计算汇总值,而是要找出每个客户的每笔订单中回款金额最大和最小的两笔回款,以及每笔订单中订购产品最高和最低的两个价格,用以识别客户类型及其回款能力。

    集算器数据准备

     ABC
    1=connect(“db”)  
    2=A1.query(“select 订单 ID, 客户 ID from 订单 order by 客户 ID, 订单 ID”)  
    3=A1.query(“select 订单 ID, 回款金额 from 回款 order by 订单 ID, 回款金额 desc”)=A3.group(订单 ID)=B3.(.m(1).m(-1))
    4=A1.query@x(“select 订单 ID, 单价 as 价格 from 订单明细 order by 订单 ID, 价格 desc”)=A4.group(订单 ID)=B4.(.m(1).m(-1))
    5=join@1(A2:o, 订单 ID;C3:op, 订单 ID;C4:od, 订单 ID)  
    6=A5.new(o. 客户 ID: 客户,o. 订单 ID: 订单,op.m(1). 回款金额: 最大回款金额,op.m(-1). 回款金额: 最小回款金额,od.m(1). 价格: 最高单价,od.m(-1). 价格: 最低单价 )  

    脚本解析:

    1、A2 查询订单数据,按照客户和订单排序

    2、A3 查询回款数据,按照订单排序,回款金额降序

    3、B3 按照订单 ID 分组,由于要查找分组成员(最大和最小值),所以这里需要使用 group 函数分组并保留分组结果(不聚合)

    4、C3 找出每组中回款金额最大和最小两条记录

    5、同理 A4-C4 按照订单分组查找每组中价格最高和最低两条记录

    6、A5 根据客户和订单信息左关联上述两个结果集(注意:关联一定要在前面两个分组后进行,如果先关联则会出现多对多叉乘,导致结果错误)。

    每一条关联结果,订单只有一条记录,回款和订单明细则包含两条记录,这是主子表关联关联计算的特点,主表的一条记录指向子表的多条记录

    7、根据关联结果,生成最终结果集,并为报表返回结果集

    以上通过集算器关联运算解决了多数据集关联报表的性能问题,实测中报表性能可获得数倍到数百倍的提升(随数据规模和关联表数量线性增长)。同时集算器解决方案实现比较简单,适用范围更广,适用于数据库无法完成的跨异构库关联、文本关联等情况,从而为报表性能优化、降低报表应用耦合性提供了新思路。

    展开全文
  • 数据概念

    千次阅读 2014-09-30 16:10:13
    数据概念 按照传统的定义,元数据(Metadata)是关于数据数据。在数据仓库系统中,元数据可以帮助数据仓库管理员和数据仓库的开发人员非常方便地找到他们所关心的数据;   元数据是描述数据仓库内数据的...
  • 润乾报表中宏的概念

    2013-08-19 16:25:04
    宏是一个没有数据类型的字符串标识,在报表运算之前,系统会全面搜索整张报表的表达式定义,将所有的宏名替换成宏值。 利用宏可以在报表中动态的进行表达式的替换,根据用户传入的不同宏值,在报表中可以计算出不同...
  • 内部轮训 合并报表系统数据结构讲解 客户支持中心 符达文 主要内容 合并报表的会计原理 合并报表的操作流程 合并报表数据结构 合并报表概念 合并报表是以母公司和子公司组成的企业集团为 一个会计主体以母公司和...
  • 文末有超多干货! 这是一个很经典的组织架构图,任何公司,小到几十人的公司,大到...信息化的较高层次,以前介绍过,对于企业来说,能实现的有两点,建立企业中台和数据报表体系,也许有人会问,那么多技术解决方..
  • 目的是示范概念。这些示例报表被完全用文献证明,并且不被技术支持所支援。文档包含了每种应用的描述,及其下载链接。目录示范报表设计的示例报表 数组示例 营业日和小时示例 交叉表示例 日期和时间示例 格式化...
  • 前言 2010年左右,还是在上学的时候,学过一门...如今,十年风云际会,大数据早已成了行业绕不开的话题,这其中我们或多或少会接触到很多新兴的概念,例如数据湖、数据中台等,通过一些碎片化的学习,也是大概知...
  • sql 2005 创建动态数据报表的整个流程分析. SQL Server 2005 联机丛书设计和创建报表Reporting Services 包括两个报表设计工具:报表生成器和报表设计器。报表生成器是一种客户端应用程序,可以基于报表模型生成报表...
  • 数据数据仓库相关概念

    千次阅读 2018-09-28 11:48:53
    文章目录元数据(metadata)的概念Data about Data定义技术元数据业务元数据总结数据仓库ODS简单的理解为 Operational Data Store, 运营数据仓储 数据整合层(也叫做数据缓冲层)EDW简单理解为 Enterprise Data ...
  • 我们谈论数据中台之前,我们也听到过数据平台、数据仓库、数据湖的相关概念,它们都与数据有关系,但他们和数据中台有什么样的区别,下面我们将分别介绍数据平台数据仓库数据湖和数据中台。相关概念数...
  • 深度解读Hadoop与数据仓库概念

    千次阅读 2014-07-05 15:45:20
    那些想要弄清楚“大数据”概念的组织需要做出一个选择,是要采用传统的数据仓库概念和现有的数据仓库架构,还是不熟越来越流行的开源Hadoop分布式处理平台,或者使用这二者的结合。  那些想要从简单的BI报表转向...
  • 大家可能见过女程序员、女IT工程师,但是我今天要讲的这位,肯定和你们看到的都不一样:一位30岁左右的女IT,为了自己的数据梦想,重构企业数据架构的故事,就以第一人称来说吧。 我毕业快6年了,从事的第一份工作...
  • 对于大数据报表,若每次直接从数据库中查询数据,不仅增加数据库服务器的压力,也极大的影响了取数的速度从而降低了报表的执行速度,为此FineReport提供了数据集缓存与共享功能。 FineReport可先将其数据集查询的...
  • 还得经常熬夜加班做可视化,10张里有一张满意就谢天谢地了,老板经常说的一句就是:我没学过html、css,js,我不懂sql,不懂什么是服务器,不懂什么是数据库,但是你的数据可视化和数据报表必须让我看明白。...
  • 一、【业务模型】业务表数据模型梳理         1、电商业务库表模型整体架构         2、本项目中所需要用到的业务表               &...
  • 如今,大数据和数据分析的概念相当普及,从基层到管理层,从IT到业务,都深知“数据化管理”、“数据决策”的重要性。越多重视,压力也就越多,导致信息中心和数据部门往往处于进退两难的状态: 数据变多,需求变多...
  • 马云曾说过,未来5年最重要的能源是数据。到那时,数据分析将是人人必备的能力。 某招聘网站上的岗位需求 ...对于企业来说,无论是向上汇报还是向客户汇报,步骤无非2个:处理数据+输出可视化报表。 很多人...
  • 报表项目中,当数据计算较为复杂的时候,报表开发人员可能会考虑是否用存储过程来实现报表数据源准备。这里,我们从几个不同的方面来看一下,用存储过程来实现报表数据源计算的利和弊。 一、 性能  说到存储...
  • 报表软件的设计器与服务器不可能满足所有的需求,某些个性化需求可能无法实现。...想要了解我们内核结构及api的使用,首先我们必须掌握一些基本的概念,今天就来谈谈最基本的东西,从简单程序数据集谈起。
  • 数据仓库概念(三) - 数据集市

    千次阅读 2015-04-03 07:15:07
    1. 什么是数据集市?数据集市与数据仓库的区别?  数据仓库(Data Warehouse) 是一个面向主题的(Subject Oriented) 、集成的( ...对于数据仓库的概念我们可以从两个层次予以理解,首先,数据仓库用于支持决策,面
  • 是规划、控制和提供数据及信息资产的一组业务职能,包括开发执行监督有关 数据的计划、政策、方案、项目、流程、方法和程序,从而控制、保护、交付和提高数据和信息资产的价值。——DMBOK 1.0 数据治理 Data ...
  • 数据仓库基本概念介绍

    千次阅读 2019-02-22 18:40:28
    2、数据仓库概念 面向主题的  集成的 随时间变化的 非易失的 3、一般架构 STAGE层  ODS层 MDS层 ADS层  DIM层 ETL调度系统 元数据管理系统 4、设计的两个重要问题 1、 粒度 2、 分区 1、数据仓库...
  • 现在各种新名词层出不穷,顶层的有...在数据技术方面,随着大数据技术的不断更新和迭代,数据管理工具得到了飞速的发展,相关概念如雨后春笋一般应运而生,如从最初决策支持系统(DSS)到商业智能(BI)、数据仓库、数据

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 52,303
精华内容 20,921
关键字:

数据报表概念