使用 dscc-gen 创建数据洞察社区可视化图表

1. 简介

借助 Google 数据洞察,您可以免费构建具有精美数据可视化效果的动态互动式信息中心。社区可视化图表是数据洞察的一项功能,可让您使用与数据洞察报告集成的 JavaScript 构建自定义可视化图表。

学习内容

在此 Codelab 中,您将学习:

  • Google 数据洞察社区可视化图表的工作原理
  • 如何使用我们的命令行工具模板工具构建社区可视化图表
  • 如何使用 JavaScript 可视化库构建社区可视化图表
  • 如何将社区可视化图表集成到数据洞察信息中心

所需条件

要完成本 Codelab,您需要:

  • 访问互联网、网络浏览器和终端,以及您喜爱的文本编辑器
  • Google 账号
  • 对 Google Cloud Storage 存储分区的访问权限
  • 熟悉 JavaScript、Node.js 和命令行

此 Codelab 假定:

  • 您已经构建了一个社区可视化图表(Codelab 的 TODO 链接优先)
  • 熟悉 Google Cloud Storage

首先,点击右上角的14575f934e800122创建此报告 的副本。在学习此 Codelab 的过程中,请让它在另一个标签页中保持打开状态。

2. 快速调查问卷

您为何选择此 Codelab?

<ph type="x-smartling-placeholder"></ph> 我总体上对数据可视化感兴趣。 我想详细了解数据洞察 我想构建自己的社区可视化图表。 我正在尝试将数据洞察与其他平台集成。 我对 Google Cloud 解决方案感兴趣。

您计划如何使用此 Codelab/教程?

<ph type="x-smartling-placeholder"></ph> 阅读并完成练习 仅快速浏览

您如何评价自己使用数据洞察的体验?

<ph type="x-smartling-placeholder"></ph> 从未听说过 我知道这是什么,但并没有使用。 我经常使用。 我是专家用户。

以下哪一项最能准确描述您的背景?

<ph type="x-smartling-placeholder"></ph> 开发者 企业 / 数据分析师 数据科学家 / 数据工程师 财务分析师 营销 / 社交媒体 / 数字分析专家 业务分析师 设计人员 其他

请转到下一页以提交调查问卷信息。

3. 使用 dscc-gen 开发社区可视化图表

dscc-gen

dscc-gen 是一款命令行工具,可为社区可视化图表和社区连接器提供专业模板和工作流。社区可视化图表模板提供有效的可视化图表和工作流程,可让您立即查看可视化图表代码更改以及用于验证、构建和部署可视化图表的脚本。

设置

dscc-gen 在部署脚本中使用 gsutil,并使用 npm 和 webpack 构建社区可视化图表 JavaScript 代码。

  1. 在本地计算机上安装 npm
  2. 浏览 gsutil 快速入门并设置 Google Cloud Storage 存储分区
  3. 导航到您要查找项目的本地目录

4. 启动新的 dscc-gen 社区可视化图表项目

打开终端并运行以下命令:

npx @google/dscc-gen viz

dscc-gen 将提示您输入项目名称“dev”GCS storage 位置和“prod”存储位置。以 URI 的形式输入位置,采用 gs 协议,例如gs://my-gs-project/example-dev。“位置信息”可以是 Cloud Storage 存储分区或该存储分区中的文件夹。这两个存储位置不能相同。该工具将验证您是否有权访问所输入的值。如果营业地点不存在,系统会为您创建。

dscc-gen 创建新的社区可视化图表后,它会输出有关如何开始使用的说明。您的终端将如下所示(以加粗斜体输入的内容):

$ npx @google/dscc-gen viz
npx: installed 345 in 14.957s
? Project name barchart
? What is your GCS dev directory? gs://community-visualizations-codelab/barchart-dev
? What is your GCS prod directory? gs://community-visualizations-codelab/barchart-prod
Installing dependencies...

Created new community viz: barchart

cd barchart and npm run start to begin working on your viz!

您需要修改 src/ 中的文件(具体来说就是 index.jsindex.jsonindex.css)来编写可视化图表。

dist/ 中的文件允许您在浏览器中在本地预览可视化图表。webpack.config.js 用于在本地运行可视化。README.md 提供了模板文件和命令的概览。

5. 在本地预览可视化图表

按照建议的说明操作,并在终端中运行以下命令:

cd <folder name>

npm run start

系统随即会打开一个网页,显示如下网页:

2f219993dfb676d4

请在下一步中了解详情。

6. [信息] dscc-gen 工作流的预期运行方式

dscc-gen 可视化图表模板提供了有效的可视化图表,以及有关如何使用该模板的说明。主要功能如下:

更新本地消息:示例消息包含在模板中,但可能无法反映您想要支持的用例。您应该下载反映您要构建的可视化图表的示例数据。

本地开发工作流:使用更新本地数据中的数据,在本地编写和测试代码。

构建和部署可视化图表:构建代码并进行将其上传到您的 Google Cloud Storage 存储分区

在数据洞察中加载可视化图表:将可视化图表添加到数据洞察报告中。

7. 定义配置

配置文件是您(可视化开发者)与使用可视化图表的报告编辑者之间的合约。它定义了将可视化图表加载到数据洞察后可用的选项。

对于此条形图可视化效果,配置将包含一个维度和一个指标,以及一个样式元素(可让报告编辑器更改条形图样式)。

src/index.json 的内容替换为以下代码。请确保包含所有括号。如果您要重新输入,请务必注意方括号和花括号以及嵌套结构之间的区别。

index.json

{
  "data": [
    {
      "id": "concepts",
      "label": "Concepts",
      "elements": [
        {
          "id": "dimension",
          "label": "Dimensions",
          "type": "DIMENSION",
          "options": {
            "min": 1,
            "max": 1
          }
        },
        {
          "id": "metric",
          "label": "Metric",
          "type": "METRIC",
          "options": {
            "min": 1,
            "max": 1
          }
        }        
      ]
    }
  ],
  "style": [
    {
      "id": "barStyling",
      "label": "Bar Styles",
      "elements": [
        {
          "id": "barColor",
          "label": "Bar Color",
          "type": "FILL_COLOR",
          "defaultValue": {
            "color": "#1E555C"
          }
        }
      ]
    }
  ]  
}

8. 下载更新的消息

如需更新本地存储的数据,请运行以下命令:

npm run update_message

您的终端应如下所示:

barchart $ npm run update_message
> @ update message /Users/Code/barchart
> dscc-scripts viz update_message -f object

Copying file://build/index.js [Content-Type=application/javascript]...
Copying file://build/index.css [Content-Type=text/css]...
Copying file://build/manifest.json [Content-Type=application/json]...
Copying file://build/index.json [Content-Type=application/json]...
\ [4 files][ 48.5 KiB/ 48.5 KiB]
Operation completed over 4 objects/48.5 KiB.
Viz deployed to gs://community-visualizations-codelabs/barchart-dev

此命令会将一个可视化图表部署到数据洞察,该可视化图表会将接收到的数据输出到本地可视化图表。脚本会输出可视化图表的部署位置(上面突出显示的部分)。您将使用此位置在数据洞察中加载可视化图表。

要加载可视化图表,请打开您之前复制的报告。

  1. 转到“修改报告”
  2. 点击“社区可视化图表和组件”(在工具栏中)

e927f8fbd49979a5.png

  1. 点击“探索更多内容”

c236b0cfcc68ce2c.png

  1. 点击“构建您自己的可视化图表”
  2. 输入您的清单路径(终端中显示的 gs://... 位置),然后点击“提交”

26588c6c8382a3b

  1. 点击呈现的卡片即可将其添加到您的报告中

可视化图表应呈现如下所示的 JSON:

a08a61345fe12837.png

右键点击并选择全部内容,以复制整封邮件,然后将 src/localMessage.js 的内容替换为您刚复制的内容。保存文件。

浏览器中本地运行的可视化图表应该不会再显示,而且您在控制台中查看时会看到错误。

9. 为条形图编写 JavaScript

首先,运行以下命令将 d3.js 添加为依赖项。

npm install d3

然后,将 src/index.js 替换为以下代码。上一步中的更改以粗体显示。

src/index.js

const d3 = require('d3');
const dscc = require('@google/dscc');
const local = require('./localMessage.js');

// change this to 'true' for local development
// change this to 'false' before deploying
export const LOCAL = true;

const drawViz = (message) => {
  const margin = { left: 20, right: 20, top: 20, bottom: 20 };
  const height = dscc.getHeight() - 10;
  const width = dscc.getWidth();

  const chartHeight = height - margin.top - margin.bottom;
  const chartWidth = width - margin.left - margin.right;

  // remove existing svg
  d3.select("body")
    .selectAll("svg")
    .remove();

  // make a canvas
  const svg = d3
    .select("body")
    .append("svg")
    .attr("width", width)
    .attr("height", height);

  // make an svg for the bar chart
  const chartSvg = svg
    .append("svg")
    .attr("x", margin.left)
    .attr("y", margin.top)
    .attr("width", chartWidth)
    .attr("height", chartHeight);

  // xScale to distribute bars
  const xScale = d3
    .scaleBand()
    .domain(message.tables.DEFAULT.map(d => d.dimension[0]))
    .range([0, chartWidth])
    .paddingInner(0.3);

  // yScale to size bars
  const yScale = d3
    .scaleLinear()
    .domain([0, d3.max(message.tables.DEFAULT.map(d => d.metric[0]))])
    .range([0, chartHeight]);

  // add bars
  const bars = chartSvg
    .append("g")
    .attr("class", "bars")
    .selectAll("rect.bars")
    .data(message.tables.DEFAULT)
    .enter()
    .append("rect")
    .attr("x", d => xScale(d.dimension[0]))
    .attr("y", d => chartHeight - yScale(d.metric[0]))
    .attr("width", xScale.bandwidth())
    .attr("height", d => yScale(d.metric[0]));

  // add text
  const text = svg
    .append("g")
    .selectAll("text")
    .data(message.tables.DEFAULT)
    .enter()
    .append("text")
    .attr(
      "x",
      d => xScale(d.dimension[0]) + xScale.bandwidth() / 2 + margin.left
    )
    .attr("y", height - margin.bottom / 4)
    .attr("text-anchor", "middle")
    .text(d => d.dimension[0]);
};

// renders locally
if (LOCAL) {
  drawViz(local.message);
} else {
  dscc.subscribeToData(drawViz, {transform: dscc.objectTransform});
}

如果本地服务器仍在运行,请检查您的浏览器。现在,本地开发网页应该会显示一个条形图,如下所示。

2cb9f9d8d1bd2063

10. 更新清单(可选)

您的可视化图表清单包含有关可视化图表的元数据,以及可视化图表 JavaScript、配置和 CSS 的位置。更新清单中的值 - 这些值将用于向最终用户提供有关可视化图表的信息。

修改 src/manifest.json 以描述您的可视化图表。示例清单如下所示。

src/manifest.json

{
  "name": "Bar Chart",
  "organization": "[My name]",
  "description": "Bar chart",
  "logoUrl": "https://storage.googleapis.com/community-visualizations-codelabs/barchart/bar_chart.png",
  "organizationUrl": "https://github.com/googledatastudio/",
  "supportUrl": "http://github.com/googledatastudio/community-visualizations",
  "privacyPolicyUrl": "http://github.com/googledatastudio/community-visualizations",
  "termsOfServiceUrl": "http://github.com/googledatastudio/community-visualizations",
  "packageUrl": "",
  "devMode": "DEVMODE_BOOL",
  "components": [
    {
      "id": "Bar chart",
      "name": "Bar chart",
      "description": "My first Community Visualization",
      "iconUrl": "https://storage.googleapis.com/community-visualizations-codelabs/table/table_icon.png",
      "resource": {
        "js": "YOUR_GCS_BUCKET/index.js",
        "config": "YOUR_GCS_BUCKET/index.json",
        "css": "YOUR_GCS_BUCKET/index.css"
      }
    }
  ]
}

11. 部署可视化图表

src/index.js 中,将常量 LOCAL 更改为“false”。您浏览器中的可视化图表应该停止运行。更改后的代码行以粗体显示。此布尔值配置代码是否应使用“local”数据文件或从数据洞察接收的数据。

src/index.js (abridged)

const d3 = require('d3');
const dscc = require('@google/dscc');
const local = require('./localMessage.js');

// change this to 'true' for local development
// change this to 'false' before deployment
export const LOCAL = false;

const drawViz = (message) => {...}

然后,在终端中运行以下命令:

npm run build:dev
npm run push:dev

build:dev 命令会将 JavaScript 依赖项捆绑到未缩减的输出,并替换清单中的值以停用缓存并指向“dev”存储分区。

push:dev 命令会将您的可视化图表资源上传到“dev”文件夹您在第 1 步中配置的存储分区,并将存储分区位置输出到控制台。

刷新数据洞察报告。您应该会看到一个条形图。请尝试在属性面板中更改数据和样式选项。更改数据会改变条形。但是,条形颜色样式选择器目前还无法工作。

12. 在条形图中使用报告编辑器所选的颜色

如需在本地修改代码,请先将 src/index.js 中的常量 LOCAL 变量更新为 true。然后,添加一个名为 styleVal() 的新函数,并更新 drawViz() 中的代码。您的 src/index.js 应如下所示:

src/index.js

const d3 = require('d3');
const dscc = require('@google/dscc');
const local = require('./localMessage.js');

// change this to 'true' for local development
// change this to 'false' before deploying
export const LOCAL = false;

// parse the style value
const styleVal = (message, styleId) => {
  if (typeof message.style[styleId].defaultValue === "object") {
    return message.style[styleId].value.color !== undefined
      ? message.style[styleId].value.color
      : message.style[styleId].defaultValue.color;
  }
  return message.style[styleId].value !== undefined
    ? message.style[styleId].value
    : message.style[styleId].defaultValue;
};

const drawViz = message => {
  const margin = { left: 20, right: 20, top: 20, bottom: 20 };
  const height = dscc.getHeight() - 10;
  const width = dscc.getWidth();

  const chartHeight = height - margin.top - margin.bottom;
  const chartWidth = width - margin.left - margin.right;

  // remove existing svg
  d3.select("body")
    .selectAll("svg")
    .remove();

  // make a canvas
  const svg = d3
    .select("body")
    .append("svg")
    .attr("width", width)
    .attr("height", height);

  // make an svg for the bar chart
  const chartSvg = svg
    .append("svg")
    .attr("x", margin.left)
    .attr("y", margin.top)
    .attr("width", chartWidth)
    .attr("height", chartHeight);

  // xScale to distribute bars
  const xScale = d3
    .scaleBand()
    .domain(message.tables.DEFAULT.map(d => d.dimension[0]))
    .range([0, chartWidth])
    .paddingInner(0.3);

  // yScale to size bars
  const yScale = d3
    .scaleLinear()
    .domain([0, d3.max(message.tables.DEFAULT.map(d => d.metric[0]))])
    .range([0, chartHeight]);

  // get the user-selected bar color
  let barColor = styleVal(message, "barColor");

  // add bars
  const bars = chartSvg
    .append("g")
    .attr("class", "bars")
    .selectAll("rect.bars")
    .data(message.tables.DEFAULT)
    .enter()
    .append("rect")
    .attr("x", d => xScale(d.dimension[0]))
    .attr("y", d => chartHeight - yScale(d.metric[0]))
    .attr("width", xScale.bandwidth())
    .attr("height", d => yScale(d.metric[0]))
    .attr("fill", barColor);

  // add text
  const text = svg
    .append("g")
    .selectAll("text")
    .data(message.tables.DEFAULT)
    .enter()
    .append("text")
    .attr(
      "x",
      d => xScale(d.dimension[0]) + xScale.bandwidth() / 2 + margin.left
    )
    .attr("y", height - margin.bottom / 4)
    .attr("text-anchor", "middle")
    .attr("fill", barColor)
    .text(d => d.dimension[0]);
};

// renders locally
if (LOCAL) {
  drawViz(local.message);
} else {
  dscc.subscribeToData(drawViz, {transform: dscc.objectTransform});
}

保存 src/index.js,然后返回到本地浏览器会话。看其在本地运行,然后再次将常量 LOCAL 更改为 false

运行以下命令,将更新后的文件上传到 Google Cloud Storage:

npm run build:dev
npm run push:dev

刷新数据洞察报告。您现在应该可以更改条形的颜色。

fd4e436a6e8dd58b.gif

13. Prod 部署

Prod 部署

对可视化结果感到满意后,请确保 src/index.js 中的 const LOCAL 为 false,然后运行。

npm run build:prod
npm run push:prod

此操作会将您的文件部署到“生产环境”GCS 存储分区位置。此外,将会启用缓存,并适当地缩减捆绑的 JavaScript。

和之前一样,控制台中会输出部署的位置。使用此“清单路径”从 Cloud Shell 中数据洞察报告中的图表

恭喜!您刚刚使用 dscc-gen 工具构建了您的第一个社区可视化图表。

14. 后续步骤

扩展可视化图表

利用社区可视化图表执行更多操作

其他资源

下面列出了各种资源,可帮助您更深入地了解此 Codelab 中介绍的内容。

资源类型

用户功能

开发者功能

文档

帮助中心

开发者文档

新闻和最新动态

数据洞察中注册 >用户设置

开发者邮寄名单

提问

用户论坛

Stack Overflow [google-data-studio]数据洞察开发者论坛

视频

YouTube 上的数据洞察

即将推出!

示例

报告库

开源代码库