惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

A
Arctic Wolf
IT之家
IT之家
Blog — PlanetScale
Blog — PlanetScale
GbyAI
GbyAI
博客园 - 【当耐特】
F
Fortinet All Blogs
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
博客园 - 三生石上(FineUI控件)
The Register - Security
The Register - Security
Google DeepMind News
Google DeepMind News
Schneier on Security
Schneier on Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
罗磊的独立博客
B
Blog RSS Feed
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Heimdal Security Blog
O
OpenAI News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Vercel News
Vercel News
Help Net Security
Help Net Security
I
InfoQ
P
Privacy International News Feed
W
WeLiveSecurity
T
The Exploit Database - CXSecurity.com
S
Secure Thoughts
G
GRAHAM CLULEY
NISL@THU
NISL@THU
SecWiki News
SecWiki News
S
Schneier on Security
D
Docker
T
Threatpost
Cloudbric
Cloudbric
C
CERT Recently Published Vulnerability Notes
Forbes - Security
Forbes - Security
H
Hacker News: Front Page
T
Tailwind CSS Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Hacker News - Newest:
Hacker News - Newest: "LLM"
Security Latest
Security Latest
Recorded Future
Recorded Future
I
Intezer
MyScale Blog
MyScale Blog
阮一峰的网络日志
阮一峰的网络日志
Google DeepMind News
Google DeepMind News
Jina AI
Jina AI
M
MIT News - Artificial intelligence
N
Netflix TechBlog - Medium
Y
Y Combinator Blog
美团技术团队

小蘿蔔丁

About 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。 小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。
小蘿蔔丁的自留地: 喜欢码字,数码控,美剧迷,热爱开源技术,前端搬砖,专注科技互联网。
2019-07-27 · via 小蘿蔔丁

201907_cube-with-vue

Cube.js

Cube.js - 一个完整的开源数据分析解决方案:提供高性能的大规模数据集分析技术基础架构,同时提供前端友好的 API,用于构建仪表盘报表以及其他数据分析应用,它扮演了前端与后端之间的数据层角色。

201907_cubejs-way

Cube.js 客户端执行查询,Cube.js 后端将业务逻辑(dimensions 和 measures 以及 filters)通过 Cube.js Schema 转换为 SQL 语句并交由数据库执行,业务逻辑的设计这一点很契合我的开源图表库 ve-charts数据设计理念。

ve-charts 的数据设计采用数据分析的基础概念,用维度和度量的组合提供可视化和数据。ve-charts 接收的数据格式为 JSON 对象,分为 dimensions 维度与 measures 度量。

什么是维度与度量?

  • 维度

维度确定如何对可视化内容数据分组,通常呈现在条形图的 X 轴上或饼图的切片上,例如时间、区域、产品类型等。

  • 度量

度量是在可视化中使用的计算,结果为具体的参考数值,通常呈现在条形图的 Y 轴上或表格的列中。度量通过由聚合函数(例如 Sum 或 Max)组成的与一个或多个字段组合的表达式创建,例如蒸发量、降水量、销售额等。

Vue Dashboard

接下来我们用 Vue, Cube.jsve-charts 来构建一个 Dashboard 应用,这里查看 Demo,或者查看下方示例

201907_dashboard-demo

构建 Dashboard 需要使用 Cube.js 的两个客户端库:

  • @cubejs-client/core 根据后端服务 URL 以及 API Token 创建 Cube.js 实例
  • @cubejs-client/vue 基于 Vue 组件的客户端 API
// Dashboard.vueimport cubejs from '@cubejs-client/core'import { QueryBuilder } from '@cubejs-client/vue'const cubejsApi = cubejs(  'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.e30.K9PiJkjegbhnw4Ca5pPlkTmZihoOm42w8bja9Qs2qJg',  { apiUrl: 'https://react-query-builder.herokuapp.com/cubejs-api/v1' })

QueryBuilder API 用于构建交互式分析查询构建器。 它抽象了 Cube.js Backend 的状态管理和 API 调用。借助于 Vue 中的作用域插槽(Scoped Slot Props )特性,将数据处理结果作为 props 传输到**图表适配器(ChartAdapter)**组件内部。

// Dashboard.vue
<!-- New Users Over Time Query -->
<query-builder :cubejs-api="cubejsApi" :query="lineQuery">
  <template v-slot="{ loading, resultSet }">
        <!-- 图表适配器组件 -->
    <chart-adapter v-if="!loading" type="line" :result-set="resultSet"/>
  </template>
</query-builder>

图表适配器组件

渲染不同类型图表

// ChartAdapter.vue
<template>
  <div class="cube-chart-adpater">
    <!-- 渲染统计数值 -->
    <statistic v-if="type === 'stat'" :title="title" :value="statValue" />
    <!-- 渲染折线图 -->
    <ve-line-chart
      v-if="type === 'line'"
      :data="chartData"
      :settings="lineSettings"
    />
    <!-- 渲染柱状图 -->
    <ve-bar-chart
      v-if="type === 'bar'"
      :data="chartData"
      :settings="barSettings"
    />
  </div>
</template>

数据映射

根据客户端 ResultSet API,处理数据,映射为图表库数据格式。

// ChartAdapter.vueexport default {    ...  computed: {    // 系列名称    seriesNames () {      return this.resultSet.seriesNames()    },    // 度量    metrics () {      if (this.loading) return [''];      return this.seriesNames.map(x => x.key);    },    // 规范化的查询结果    chartPivot () {      if (this.loading) return [];      return this.resultSet.chartPivot();    },    // 统计指标数值    statValue () {      return parseFloat(this.chartPivot[0][this.metrics[0]])    }  },  mounted () {    let dimensionsData = []    const measuresData = []    this.seriesNames.forEach((e) => {      const data = this.chartPivot.map(v => v[e.key]);      measuresData.push({ name: e.key, data });      dimensionsData = this.chartPivot.map(v => dayjs(v.x).format('YYYY-MM'))    });    // 构建 ve-charts 需要的数据    const chartData = {      dimensions: {        name: 'DateTime',        data: dimensionsData      },      measures: measuresData    }    this.chartData = chartData  }    ...}

使用 ve-charts 渲染图表

ve-charts 是基于 Vue2.x 与 ECharts 4.x 构建的图表组件库,用以解决繁杂的 ECharts 配置项以及数据转化带来的烦恼。提供高可配置化、简捷、高效地构建图表组件化方案。

201907_ve-charts

引入 ve-charts

// main.jsimport VeCharts from 've-charts' // 全量引入import 've-charts/lib/ve-charts.min.css'Vue.use(VeCharts)

在 Vue 工程里可以这样引入组件,比如柱状图:

<ve-bar-chart :data="chartData" // 数据 :settings="chartSettings" // 图表配置
:title="title" // 通用配置 />

数据接口设计

ve-charts 早期在创建时,ECharts 还处于 3.x 版本,没有 4.x 版本的 dataset API,我们为了统一前后端数据接口,抽离组件数据传参,同时服务于可视化展示需求,于是重新设计了可视化图表的数据传输格式。前文已经提到不再展开。

ve-charts 完整文档点击这里

总结一下

用一张图来说明 Vue Dashboard 是如何渲染可视化图表的

201907_cube-dashboard

参考