精华内容
下载资源
问答
  • 需求是要做一个按月查看折线,还要满足时间段检索,各种百度都是对数据库查询时先处理,看了半天感觉比较复杂,所以决定写个只对查出数据做处理函数,只是简单满足了个人需求,有需求小伙伴可以自行修改...
    需求是要做一个按月查看的折线图,还要满足时间段检索,各种百度都是对数据库查询时先处理,看了半天感觉比较复杂,所以决定写个只对查出数据做处理的函数,只是简单的满足了个人的需求,有需求的小伙伴可以自行修改即可。
    
    首先根据开始和结束时间查出所需数据,其中要包含带有时间的字段即可,如下:
    $arr = [
        ['created_at'=>1560783582,'a'=>2],
        ['created_at'=>1560783582,'a'=>2],
        ['created_at'=>1560783582,'a'=>2],
        ['created_at'=>1560783582,'a'=>2],
    ];
    /*********************开始*******************/
    /**
     * 按月统计时补全月份并返回格式化数据结构
     * @param $start_time  统计范围(开始时间、时间戳)
     * @param $end_time  统计范围(结束时间、时间戳)
     * @param $arr  待补充数组(数组中必须含有created_at字段),二维数组可以为空
     * @return array
     */
    function pad_month($start_time,$end_time,$arr){
        $start_year = date('Y',$start_time); //2018
        $start_month = intval(date('m',$start_time)); //6
        $end_year = date('Y',$end_time);  //2019
        $end_month = intval(date('m',$end_time));//6
    
        $new = [];//用来存放格式化后的新数组
        if(!empty($arr)){
            foreach ($arr as $v){
                $year = date('Y',$v['created_at']);
                $month = date('m',$v['created_at']);
                $new[$year.$month]['month'] = date('Y-m',$v['created_at']);
                $new[$year.$month]['num'] = isset($new[$year.$month]['num']) ? $new[$year.$month]['num']+1 : 1;
            }
        }
    
    //判断开始时间和结束时间是否是同一年
        if($start_year == $end_year){
            for ($i=$start_month;$i<=$end_month;$i++){
                $month = str_pad($i,2,0,STR_PAD_LEFT);
                if(!array_key_exists($start_year.$month,$new)){
                    $new[$start_year.$month] = ['month'=>$start_year.'-'.$month,'num'=>0];
                }
            }
        }else{
            $diff = $end_year - $start_year + 1;//相差的年数
            for ($y=1;$y<=$diff;$y++){
                for($i=$start_month;$i<=12;$i++){
                    $month = str_pad($i,2,0,STR_PAD_LEFT);
                    if(!array_key_exists($start_year.$month,$new)){
                        $new[$start_year.$month] = ['month'=>$start_year.'-'.$month,'num'=>0];
                    }
                    //如果与结束时间年月相等则结束循环
                    if($start_year.$i == $end_year.$end_month){
                        break;
                    }
                }
                $start_year++;//年数增加一
                $start_month = 1;//重置月份
            }
        }
        ksort($new);
        return array_values($new);
    }
    /**********************************结束****************************/
    

    返回结果:

    展开全文
  • 工作中有时会遇到根据单元格格式统计数据个数或汇总要求,比如下案例,要求统计表格中涂红色数据的个数,并对涂色数据进行汇总:常用方法:宏表函数get.cell(63,ref)因为我们不知道涂色规律,所以无法利用...

    工作中有时会遇到根据单元格格式,统计数据个数或汇总的要求,比如下图案例,要求统计表格中涂红色数据的个数,并对涂色数据进行汇总:

    60a44ac9094ec4c287685dbf6f823455.png

    常用方法:宏表函数get.cell(63,ref)

    因为我们不知道涂色的规律,所以无法利用规律走捷径,只能用单元格是否涂色作为判断条件。常用的方法就是利用宏表函数get.cell,第一个参数63用来返回填充色值,函数用法为get.cell(63,ref),ref为单元格或单元格区域,案例具体用法为:

    1、鼠标选中A12单元格,点击菜单公式——定义名称——输入名称(gs,可随自己意愿取)——引用位置:输入公式=get.cell(63,sheet1!a2:e10)——确定。

    2feee01c987e5046acd1fc609a09b855.png

    2、鼠标框选a12:e20,在编辑栏输入公式=gs,按住ctr键回车,得到辅助区域数据。

    3、利用辅助数据进行统计:统计个数,H2单元格输入公式:=COUNTIF(A12:E20,3)

    统计合计,H3单元格输入公式:=SUMIF(A12:E20,3,A2:E10)

    过程视频:

    1462778ee99393a3bdcfae0665c7d123.gif

    对于熟练掌握了这个函数的人来说,用起来也不难。但对多数人来说,这个函数不好理解,容易出错。因为宏表函数只能通过设置公式而不能直接在单元格使用,而且公式对引用的目标单元格在单元格公式里无法直接看到,和一般函数用法习惯不同,增大了理解掌握的难度,很多人都觉得太复杂,不喜欢用。

    0ef602d099629f67490bf5ac4a7c5941.png

    升级用法:自定义函数heji(range,range,n,k)

    处理数据,简单才是硬道理。今天给大家分享一个自定义函数,专门针对根据单元格格式(填充色、字体色)统计汇总数据。只需提前导入文末提供的代码,就能在单元格直接使用,不需辅助数据。而且同一个函数只需修改一下参数,就可实现计数、累计两种功能。来一起看看。

    d6be15fe1c19c740193557fc8ffda89c.png

    使用本自定义函数实现上面宏表函数实现的涂红色数据计数、汇总功能,公式很简单:

    统计个数:heji(A2:E10,A2,1,1)

    数据汇总:heji(A2:E10,A2,1,2)

    来看看参数用法说明,函数共有4个参数,分别为:

    第一个参数A2:E10:要统计的数据区域;

    第二个参数A2:指定目标条件单元格。

    第三个参数:可选1或者2。1:根据目标单元格填充色进行统计。2:根据目标单元格字体颜色进行统计。可扩展,增加3、4.....。

    第四个参数:可选1或者2。1:计数统计。2:数据累加汇总。可扩展。

    知道了函数的用法,我们来看一下实际使用效果。

    1、想统计填充色为黄色的个数和汇总数,只需将公式中的第二个参数修改为B2即可,因为B2填充色就是黄色,当然第二个参数也可改为C2或D2都行。

    2、想统计字体为红色的个数和汇总数,将第2个参数修改为数据区域中的想统计的字体颜色的某个单元格,再将第三个参数改为2即可。

    190245e1c4d4cb5e35a6effc9637d88c.png

    总结

    自定义函数heji()的优点:

    1、解决了宏表函数不能直接在单元格使用的不足,将公式变得直观,容易理解掌握。

    2、设置目标单元格参数,将公式功能调整变得很方便灵活。

    3、设置第三、四个参数,实现一个函数完成不同的任务,而且还可扩展实现更多功能。

    完整代码

    打开代码编辑器,插入模块,在模块里粘贴下面的代码,就可以在表格里使用该函数了。

    Public Function heji(rg As Range, rg1 As Range, k1 As Integer, k As Integer)

    Dim di()

    n = rg.Rows.Count

    m = rg.Columns.Count

    n1 = 0: n2 = 0

    For i = 1 To n

    For j = 1 To m

    If k1 = 1 Then

    If Cells(rg.Row + i - 1, rg.Column + j - 1).Interior.Color = rg1.Interior.Color Then

    n1 = n1 + 1

    n2 = n2 + Cells(rg.Row + i - 1, rg.Column + j - 1).Value

    End If

    ElseIf k1 = 2 Then

    If Cells(rg.Row + i - 1, rg.Column + j - 1).Font.Color = rg1.Font.Color Then

    n1 = n1 + 1

    n2 = n2 + Cells(rg.Row + i - 1, rg.Column + j - 1).Value

    End If

    End If

    Next

    Next

    Select Case k

    Case 1

    heji = n1

    Case 2

    heji = n2

    End Select

    End Function

    展开全文
  • 文章目录一.基本需求二.解决思路三....返回数据如下所示: echarts显示结果: 二.解决思路 templatedUsed这列是varchar类型,所以看上去是数组,实际上存还是字符串(存时候使用是JSON.stringfy

    一.基本需求

    基本需求:有两张表user_api_info和templates如下图。现在需要根据templatedUsed这列的数据,统计每个template的使用量,供echarts显示。

    表一:user_api_info
    在这里插入图片描述
    表二:templates
    在这里插入图片描述
    返回数据如下图所示:
    在这里插入图片描述
    echarts显示结果:
    在这里插入图片描述

    二.解决思路

    templatedUsed这列是varchar类型,所以看上去是数组,实际上存的还是字符串(存的时候使用的是JSON.stringfy(arr))。
    感觉以纯sql语句解决不了,于是我想出了一个比较巧妙的方式:

    1. sql语句查询出templatedUsed这列全部的数据
    [
     TextRow { templatesUsed: '[42]' },
     TextRow { templatesUsed: '[42,42]' },
     TextRow { templatesUsed: '[42,43]' },
     TextRow { templatesUsed: '[43,44]' },
     TextRow { templatesUsed: '[44,45]' },
     TextRow { templatesUsed: '[42,42]' },
     TextRow { templatesUsed: '[42,42]' },
     TextRow { templatesUsed: '[42,42]' },
     TextRow { templatesUsed: '[42]' },
     TextRow { templatesUsed: '[50,50,50,50,50]' },
     TextRow { templatesUsed: '[46]' }
    ]
    
    1. 将每一个数组字符串转为数组,再将这些小数组拼接为一个大的数组。
    [
     42, 42, 42, 42, 43, 43, 44,
     44, 45, 42, 42, 42, 42, 42,
     42, 42, 50, 50, 50, 50, 50,
     46
    ]
    
    1. 统计数组内每个数值出现的次数
    { '42': 11, '43': 2, '44': 2, '45': 1, '46': 1, '50': 5 }
    
    1. 取出这个对象的所有key,拼接为数组
    [ '42', '43', '44', '45', '46', '50' ]
    
    1. sql语句查出这个数组对应的模板名字
    [
     TextRow { id: 45, name: '合同模板' },
     TextRow { id: 46, name: '新增模板12312' },
     TextRow { id: 50, name: '模板1' },
     TextRow { id: 42, name: '模板121' },
     TextRow { id: 43, name: '模板2' },
     TextRow { id: 44, name: '模板3' }
    ]
    
    1. 将上面模板名称和次数重新组合
    [
     { templateName: '合同模板', usedCount: 1 },
     { templateName: '新增模板12312', usedCount: 1 },
     { templateName: '模板1', usedCount: 5 },
     { templateName: '模板121', usedCount: 11 },
     { templateName: '模板2', usedCount: 2 },
     { templateName: '模板3', usedCount: 2 }
    ]
    
    1. 上面的结果已经是很像返回的结果了,但还可以根据usedCount排序,返回一个有序数组
    [
     { templateName: '合同模板', usedCount: 1 },
     { templateName: '新增模板12312', usedCount: 1 },
     { templateName: '模板2', usedCount: 2 },
     { templateName: '模板3', usedCount: 2 },
     { templateName: '模板1', usedCount: 5 },
     { templateName: '模板121', usedCount: 11 }
    ]
    

    三. 详细代码

    class Util {
        //统计数组内每个数值出现的次数
        arrNumber(arr) {
            var arr_number = {};
            for (var i = 0; i < arr.length; i++) {
                if (arr_number[arr[i]]) {
                    arr_number[arr[i]]++
                }
                else {
                    arr_number[arr[i]] = 1;
                }
            }
            return arr_number;
        }
        
        //根据数组内对象的某个属性排序
        compare(property){
            return function(a,b){
                var value1 = a[property];
                var value2 = b[property];
                return value1 - value2;
            }
        }
    }
    module.exports = exports = new Util();
    
      async getTemplatesUsedInfo(ctx) {
            let conn;
            const res = { ...ctx.errCode.SUCCESS };
            try {
                conn = await ctx.db.getConnection();
                 //1.sql语句查询出templatedUsed这列全部的数据
                const result = await ctx.db.query(conn, `SELECT templatesUsed FROM bill_segmentation_ocr.user_api_info`);
                var arr = [];
                var templatesIds = [];
                var templatesUsedInfo = [];
                //2.将每一个数组字符串转为数组,再将这些小数组拼接为一个大的数组。
                for (let item of result) {
                    arr = arr.concat(JSON.parse(item.templatesUsed))
                }
                //3.统计数组内每个数值出现的次数
                arr = util.arrNumber(arr);
                //4.取出这个对象的所有key,拼接为数组
                for (let key in arr) {
                    templatesIds.push(key);
                }
                //5.sql语句查出这个数组对应的模板名字
                const result1 = await ctx.db.query(conn, `select id,name from templates where id in (?)`, [templatesIds]);
                //6.将上面模板名称和次数重新组合
                for (let i = 0; i < templatesIds.length; i++) {
                    let obj = {};
                    obj.templateName = result1[i].name
                    obj.usedCount = arr[result1[i].id]
                    templatesUsedInfo.push(obj)
                }
                //7.根据usedCount排序,返回一个有序数组
                templatesUsedInfo.sort(util.compare('usedCount'))
                console.log(templatesUsedInfo)
                res.data = { "templatesUsedInfo": templatesUsedInfo }
            } catch (error) {
                ctx.logger.error(error);
                res = { ...ctx.errCode.INTERNAL_SERVER_ERROR };
                if (ctx.app.env === 'dev') {
                    res.data = error.toString();
                }
            } finally {
                ctx.db.releaseConnection(conn);
                ctx.body = res;
            }
        }
    
    展开全文
  • 在看过上图的数据返回格式应该清楚,在总计中有个对象,对象有两个属性,total,incomeTypeCode,而且有多个值,为此应该设计为一个List,明细也如此 设计如下 @Data public class UserIncomeChartData { private ...

    概述

    在这里插入图片描述

    在做多个类型数据统计的时候,可能需要返回总计,还需要返回每个类型每天的详细数据,如上图

    设计

    在看过上图的数据返回格式应该清楚,在总计中有个对象,对象有两个属性,total,incomeTypeCode,而且有多个值,为此应该设计为一个List,明细也如此

    设计如下

    @Data
    public class UserIncomeChartData {
    
        private List<UserIncomeTotal> total = new ArrayList<>();
        private List<List<UserIncomeChart>> chartList = new ArrayList<>();
    
    }
    

    这样的话,给前端返回一个值,前端就可以得到相应的数据了

    展开全文
  • Sarskov以JSON格式返回统计信息。 :microbe: 科维德 Kovid是一个小型CLI应用程序,用于获取有关2019年冠状病毒大流行的数据。我发现自己不断地在查找信息,因此我认为我应该构建它以直接在终端中提供信息。 这是...
  • 在做项目过程中需要根据时间绘制折线,但由于数据不连续,所以后端返回的数据会有一些时间片段有缺失,在画图时候需要把这些缺失时间补充完成,并给他们赋空值 解决方法 // 输入格式 // inputData: [{Time: ...
  • 其实看了官方文档之后觉得并不难,文档说很清楚,这里不再啰嗦,直接说我在使用过程中遇到问题:在我将后台请求回来的数据和图表结合时候(我这里使用是饼图)发现统计图并没有被渲染出来,非常疑惑感觉要...
  • 在Excel当中文本(数字)...如上所示,如何将汉字格式的金额,转换成数据呢?(左列文字转换成右列数字)这里我们运用VBA技术来实现。自定义一个函数叫fuc,输入以下代码,在Excel单元格中输入函数=fuc(a2),即可返回...
  • Java后台返回json格式的数据方便作为图表参数以进行交互 纯前端demo: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Echars</title> <sc...
  • 选取el-date-picker中的自定义时间、点击本周、本月、本年时,将数据显示在饼图中这里的需求是:选取el-date-picker中的自定义时间、点击本周、本月时,折线图的X轴(时间轴)返回的日期格式是每天的统计量 ...
  • 一个在微信小程序中创建表格demo效果最后做出来大概就是这个样子,先看下设计:(画真好看)设计然后再看下数据返回的格式数据返回格式数据...o.0...分析数据得知,后台返回的数据远比设计上描绘...
  • echarts绑定数据

    千次阅读 2019-02-26 12:01:07
    当统计维度复杂,并且后台无法返回前端需要的数据格式时,需要前端进行数据格式的转换,展示相应的统计图 实现思路: 1、循环提取year作为横坐标 2、循环提取图例数据,构建二维数组 3、解析二维数组,转换为...
  • DataVec/数据分析

    2018-10-07 11:21:56
    数据分析   有时候数据集太大或格式太抽象...如果你已经把你数据加载到Apache Spark,数据向量有一个特殊AnalyzeSpark类可以生成直方,收集统计数据,并返回数据质量信息。假设你你已经把数据加载到一个...
  • 数据为连续不断的,但现实的情况中数据库里的数据不可能是连续的,情况如下数据中4号 ~ 7号的时间段没有返回,我们理想中的返回格式是补全没有的日期,然后在这个日期对应的数量字段填0。在网上google了一下,解决...
  • 28.Index函数返回单元格值 29.按颜色进行“筛选” 30.利用COUNTIF统计重复次数 31.提示输入信息(ISBLANK函数) 32.提示输入信息(函数综合应用) 33.动态引用数据求和 34.利用通配符统计件数 35.关闭数据透视表明...
  • 作者:国服帅座 经济学在读硕士微信公众号:统计之家有了高德地图导航,我们...所用方法千篇一律,无非是用requests模块请求高德地图API,返回JSON字符串,然后使用json模块将其转化为Python字典格式,最后根据...
  • 因为列表算作是另一个元素,而中只统计3出现个数,所以次数只是1 拓展:代码格式化 Code——Reformat Code:将代码格式化(快捷键为Ctrl+Alt+L) li.index():返回最小索引值 注意是最小,也就是说
  • 技巧177 复杂格式数据合并计算 技巧178 包含多个非数字分类项合并计算 技巧179 多表筛选不重复值 技巧180 利用合并计算进行数值型数据核对 技巧181 文本型数据核对 第17章 数据透视表 技巧182 用...
  • 图片里的数据是我手动设置固定值,现在我需要从数据库中查询数据分别填在该控件代码中,我们规定返回到页面是json格式,现在不知道怎么查了 因为首先有四条折线,分别对应了不同门,而横轴时间段应该是...
  • 然后这个是浏览器控制台输出从后台获取到json格式数据 ![图片说明](https://img-ask.csdn.net/upload/202002/29/1582957097_336679.png) TieziMapper.xml ``` select biaoti,dianji from ...
  • 数据结构(C++)有关练习题

    热门讨论 2008-01-02 11:27:18
    内容及步骤: 1、 设计一个图的类,采用临接表法进行存储,该图每个结点的数据类型类模板的模板参数进行定义(注:需先设计一个结点类Node); 2、 为该类分别设计一个实现深度优先搜索和广度优先搜索的成员...
  • App Key轮换功能:当一个App Key超频则自动切换到下一个App Key有效解决因API调用频率不够而无法调取到商品数据的情况! 其他高级功能:更多功能不再细致描述! 【V5.21更新内容】 增加了图片延迟加载功能 支持整合...
  • 8.1.1 返回子例程值 90 8.1.2 参数 91 8.1.3 传递数组和哈希结构 91 8.2 作用域 92 8.3 练习:统计数字 94 8.4 函数脚注 96 8.4.1 声明local变量 96 8.4.2 使Perl变得更加严格 97 8.4.3 递归函数 98 8.5 课时小...
  • dataType: "json", //返回数据形式为json success: function (result) { myChart.hideLoading(); //隐藏加载动画 myChart.setOption({ //渲染数据 series: [{ // 根据名字对应到相应系列 name: '...
  • excel使用

    2012-11-25 17:06:01
    4、自定义格式Excel中预设了很多有用的数据格式,基本能够满足使用要求,但对一些特殊要求,如强调显示某些重要数据或信息、设置显示条件等,就要使用自定义格式功能来完成。 Excel自定义格式使用下面通用...
  • 5.3 终止作业中所有线程查询作业统计信息 5.4 作业通知 5.6 Job Lab示例程序 第6章 线程基础 6.1 何时创建线程 6.2 何时不应该创建线程 6.3 编写第一个线程函数 6.4 CreateThread函数 6.4.1 psa参数 6.4.2 ...
  • 查看Redis内存使用 info 命令用于监控Redis运行情况,其中 info memory 可以查看...以可读的格式返回 used_memory used_memory_rss 从操作系统角度显示 Redis 进程占用物理内存总量 used_memory_rss_human use
  • 要使用某些特殊枚举、记录、常量或过程必须包含GdipTypes.pas文件,测量用指定 Font 对象绘制并用指定 StringFormat 对象格式指定字符串。返回绘制文本所占用矩形空间。在指定位置并且按指定大小绘制...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 317
精华内容 126
关键字:

统计图的返回数据格式