小程序中的统计分析功能

简介: 小程序中的统计分析功能

我们在开发小程序时,通常管理端需要提供各类统计功能,比如统计商品类别下商品的平均销量。在小程序中提供了统计组件,我们本篇就介绍一下如何实现一个销量求平均的功能。

1 创建数据源


一般需要统计的数据存放在数据源中,我们可以新建一个商品数据源,字段如下:

其中商品类别我们可以创建一个通用选项集来存储

2 添加数据


为了实现功能,我们需要先录入一些数据,点击数据源的更多,点击管理数据

在数据管理后台里录入数据

APIs开发


微搭中的后台方法是在APIs中编制,登录控制台,点击新建APIs

选择自定义

输入名称和标识

点击立即新建

输入名称和标识,方法意图选择查询列表,类型选择自定义代码

输入如下代码

module.exports = async function (params, context) {
  const db = context.database
const $ = db.command.aggregate
const result = await db.collection('lcap-data-2roskcyPE-sptj_buh3s33-preview').aggregate()
  .group({
    // 按 category 字段分组
    _id: '$splb',
    // 每组有一个 avgSales 字段,其值是组内所有记录的 sales 字段的平均值
    avgSales: $.avg('$xl')
  })
  .end()
  return result;
};

这里使用聚合语法,来进行分类统计,统计的结果是

{
  "requestId": "183ca10cb23_1",
  "data": [
    {
      "_id": "2",
      "avgSales": 45
    },
    {
      "_id": "3",
      "avgSales": 30
    },
    {
      "_id": "1",
      "avgSales": 30
    }
  ]
}

因为枚举类型在数据源中存储的是选项的标识,我们需要处理一下数据将标识处理成值

module.exports = async function (params, context) {
  const db = context.database
const $ = db.command.aggregate
const result = await db.collection('lcap-data-2roskcyPE-sptj_buh3s33-preview').aggregate()
  .group({
    // 按 category 字段分组
    _id: '$splb',
    // 每组有一个 avgSales 字段,其值是组内所有记录的 sales 字段的平均值
    avgSales: $.avg('$xl')
  })
  .end()
  return result.data.map((item, index) => {
    let splb="";
    if(item._id==1){
      splb="鱼类"
    }else if(item._id==2){
      splb="贝类"
    }else if(item._id==3){
      splb="面点类"
    }else{
      splb="未选择分类"
    }
    return {
      splb: splb,
      avgSales: item.avgSales,
    }
    })
};

最终处理好的结果是

[
  {
    "splb": "贝类",
    "avgSales": 45
  },
  {
    "splb": "面点类",
    "avgSales": 30
  },
  {
    "splb": "鱼类",
    "avgSales": 30
  }
]

柱状图要求


翻看了API,柱状图要求的返回参数是

[
    {
        XLabel: {Value: "张三"},
        YLabels: [
            {Name: "娃的数量", Value: 3},
            {Name: "销售金额", Value: 123123}
        ]
    },
    {
        XLabel: {Value: "李四"}, YLabels: [
            {Name: "娃的数量", Value: 3},
            {Name: "销售金额", Value: 123123}
        ]
    },
    {
        XLabel: {Value: "麻子"},
        YLabels: [
            {Name: "娃的数量", Value: 3},
            {Name: "销售金额", Value: 123123}
        ]
    },
]

看来我们上边的封装的返回结果还需要改造一下,按照柱状图的要求重新改造一下结果

module.exports = async function (params, context) {
  const db = context.database
const $ = db.command.aggregate
const result = await db.collection('lcap-data-2roskcyPE-sptj_buh3s33-preview').aggregate()
  .group({
    // 按 category 字段分组
    _id: '$splb',
    // 每组有一个 avgSales 字段,其值是组内所有记录的 sales 字段的平均值
    avgSales: $.avg('$xl')
  })
  .end()
  return result.data.map((item, index) => {
    let splb="";
    if(item._id==1){
      splb="鱼类"
    }else if(item._id==2){
      splb="贝类"
    }else if(item._id==3){
      splb="面点类"
    }else{
      splb="未选择分类"
    }
    return {
      XLabel: {Value: splb},
      YLabels: [
            {Name: "平均销量", Value: item.avgSales}
        ]
    }
    })
};

最终的结果

[
  {
    "XLabel": {
      "Value": "贝类"
    },
    "YLabels": [
      {
        "Name": "平均销量",
        "Value": 45
      }
    ]
  },
  {
    "XLabel": {
      "Value": "面点类"
    },
    "YLabels": [
      {
        "Name": "平均销量",
        "Value": 30
      }
    ]
  },
  {
    "XLabel": {
      "Value": "鱼类"
    },
    "YLabels": [
      {
        "Name": "平均销量",
        "Value": 30
      }
    ]
  }
]

小程序端调用


小程序端如果想调用,发现直接选择api是不行的,我们先需要创建一个数组变量

然后在生命周期函数里调用api并且赋值给变量

export default {
  async onPageLoad(query) {
    //console.log('---------> LifeCycle onPageLoad', query)
    const result = await app.cloud.callConnector({  
      name:'tj_iwz1ixo',
      methodName:'tj',
      params:{}
    })
    $page.dataset.state.tj = result
    console.log("result",result)
  },
  onPageShow() {
    //console.log('---------> LifeCycle onPageShow')
  },
  onPageReady() {
    //console.log('---------> LifeCycle onPageReady')
  },
  onPageHide() {
    //console.log('---------> LifeCycle onPageHide')
  },
  onPageUnload() {
    //console.log('---------> LifeCycle onPageUnload')
  },
}

构造好变量之后我们可以往页面中添加一个柱状图组件

在右侧的属性面板上绑定我们的变量即可

总结


如果我们想在小程序端显示图表组件的,首先需要定义数据源,接着要按要求编写后端方法,在组件中调用后端方法并且赋值给数组变量。经过这一系列的步骤就做好一个图表展示功能了,还不会的赶紧试试吧。

相关文章
|
7月前
|
小程序
微信小程序如何实现进入小程序自动连WiFi功能
微信小程序如何实现进入小程序自动连WiFi功能
233 0
|
7天前
|
移动开发 小程序 前端开发
几千怎么部署搭建校园服务平台,校园圈子论坛系统小程序搭建,校园系统源码,多种功能一体的综合性校园平台
校园圈子论坛是一款集交友、二手市场、聊天等多功能于一体的校园社交平台,支持App、小程序和H5三端交付。学生可处理闲置物品、结识新朋友,通过算法匹配兴趣相投的用户。平台提供分享邀请机制,支持自动绑定推荐关系,并设有奖励机制。开发过程中需注重数据安全与系统稳定性,确保功能兼容及性能优化。
43 5
|
7天前
|
移动开发 小程序 前端开发
使用php开发圈子系统特点,如何获取圈子系统源码,社交圈子运营以及圈子系统的功能特点,圈子系统,允许二开,免费源码,APP 小程序 H5
开发一个圈子系统(也称为社交网络或社群系统)可以是一个复杂但非常有趣的项目。以下是一些关键特点和步骤,帮助你理解如何开发、获取源码以及运营一个圈子系统。
59 3
|
10天前
|
小程序 安全 搜索推荐
陪玩小程序的搭建解析与功能需求
陪玩小程序是为玩家提供专业陪玩服务的应用,嵌入社交或游戏平台,具备智能匹配、实时聊天、预约服务等功能,支持便捷高效的游戏体验。源码交付时需提供详细文档、技术支持及定制开发服务,确保客户能顺利维护和升级。选择陪玩小程序时应关注功能需求、用户体验、安全性和成本效益,以确保最佳使用效果。
36 0
|
7天前
|
小程序 安全 网络安全
清晰易懂!陪玩系统源码搭建的核心功能,陪玩小程序、陪玩app的搭建步骤!
陪玩系统源码包含多种约单方式、实时语音互动、直播间与聊天室、大神申请与抢单、动态互动与社交及在线支付与评价等核心功能。搭建步骤包括环境准备、源码上传与解压、数据库配置、域名与SSL证书绑定、伪静态配置及后台管理。注意事项涵盖源码安全性、二次开发、合规性和技术支持。确保平台安全、合规并提供良好用户体验是关键。
|
1月前
|
小程序 数据挖掘 UED
开发1个上门家政小程序APP系统,都有哪些功能?
在快节奏的现代生活中,家政服务已成为许多家庭的必需品。针对传统家政服务存在的问题,如服务质量不稳定、价格不透明等,我们历时两年开发了一套全新的上门家政系统。该系统通过完善信用体系、提供奖励机制、优化复购体验、多渠道推广和多样化盈利模式,解决了私单、复购、推广和盈利四大痛点,全面提升了服务质量和用户体验,旨在成为家政行业的领导者。
|
2月前
|
存储 自然语言处理 小程序
微信小程序多语言切换神器:简繁体切换功能完全指南
随着全球化的发展,支持多种语言的应用程序愈发重要。本文介绍了如何在微信小程序中实现简体与繁体字体之间的切换功能,以满足不同地区用户的需求。通过创建utils文件夹并编写相应的转换函数,开发者可以方便地实现语言切换,从而提升用户体验。文章中还附带了示例代码和效果图,帮助读者更好地理解和应用这一功能。
114 0
微信小程序多语言切换神器:简繁体切换功能完全指南
|
2月前
|
小程序 Linux Python
查找首字母与Python相关的的英文词汇小程序的续篇---进一步功能完善
查找首字母与Python相关的的英文词汇小程序的续篇---进一步功能完善
28 1
|
4月前
|
Web App开发 缓存 小程序
【Azure API 管理】从微信小程序访问APIM出现200空响应的问题中发现CORS的属性[terminate-unmatched-request]功能
【Azure API 管理】从微信小程序访问APIM出现200空响应的问题中发现CORS的属性[terminate-unmatched-request]功能
|
4月前
|
小程序 前端开发 开发者

热门文章

最新文章