教程:根据 R 脚本对 R 视觉对象创建漏斗图

  • 版本 :2023.1(当前版本)

教程:根据 R 脚本对 R 视觉对象创建漏斗图

本文介绍如何使用 R 脚本对 R 视觉对象逐步创建漏斗图。

本文介绍如何执行以下操作:

  • 为 RStudio 创建 R 脚本

  • 在 Power BI 中创建 R 视觉对象

  • 在 Power BI 中创建基于 PNG 的 R 驱动视觉对象

  • 在 Power BI 中创建基于 HTML 的 R 驱动视觉对象

漏斗图提供了一种简单方法,用于使用、解释和显示预期的变化量。 漏斗使用置信度限制而形成,离群值显示为漏斗外的点。

在此示例中,漏斗图用于比较和分析各种数据集。

备注

在每组步骤下均可下载源文件。

使用数据集生成 R 脚本

  1. 下载最小 R 脚本及其数据表 dataset.csv。

  2. 接下来,编辑脚本以反映此脚本。 这将添加输入错误处理和用户参数以控制绘图的外观。

生成报表

接下来,编辑脚本以反映此脚本。 这会将 dataset.csv(而不是 read.csv)加载到 Power BI Desktop 工作区,并创建一个“癌症死亡率”表 。 请查看以下 PBIX 文件中的结果。

备注

dataset 是任何 R 视觉对象的输入 data.frame 的硬编码名称。

在 R 代码中创建 R 驱动的视觉对象和包

  1. 开始之前,请务必安装 PBIVIZ 工具。

  2. 运行以下命令来创建新的 R 驱动视觉对象:

    Bash

    pbiviz new funnel-visual -t rvisualcd funnel-visual
    npm install
    pbiviz package

    此命令通过初始模板视觉对象(模板的 -t)创建文件夹 funnel-visual。 PBIVIZ 位于 dist 文件夹中,R 代码位于 script.r 文件中 。 尝试将其导入 Power BI 并查看会发生什么。

  3. 编辑 script.r 文件,并将内容替换为你之前的脚本。

  4. 编辑 capabilities.json,并将字符串 Values 替换为 dataset。 这会将模板中的“角色”名称替换为类似于 R 代码中的名称。

    Screenshot shows a diff comparison of the change in the json file.

  5. (可选)编辑 dependencies.json,并为 R 脚本所需的每个 R 包添加部分 。 这会告诉 Power BI 在首次加载视觉对象时自动导入这些包。

    Screenshot shows a diff comparison where content has been added to the cranPackages items.

  6. 使用 pbiviz package 命令重新打包视觉对象,并尝试将其导入 Power BI。

备注

请参阅 PBIX 和源代码进行下载。

进行基于 R 的视觉对象改进

视觉对象使用起来并不方便,因为用户必须要知道输入表中的列顺序。

  1. 将输入字段 dataset 分为三个字段(角色):PopulationNumberTooltips

    CV01to02

  2. 编辑 capabilities.json,并将 dataset 角色替换为这三个新角色,或下载 capabilities.json。

    需要更新 dataRolesdataViewMappings 两个部分,它们定义每个输入字段的名称、类型、工具提示和最大列数。

    before and after

    有关详细信息,请参阅功能。

  3. 编辑 script.r 以支持将 PopulationNumberTooltips 作为输入数据帧而不是 dataset,或下载 script.r。

    script

    提示

    要跟踪 R 脚本的更改,请搜索注释块:

    R复制

    #RVIZ_IN_PBI_GUIDE:BEGIN: Added to enable visual fields...#RVIZ_IN_PBI_GUIDE:END: Added to enable visual fields#RVIZ_IN_PBI_GUIDE:BEGIN: Removed to enable visual fields ...#RVIZ_IN_PBI_GUIDE:BEGIN: Removed to enable visual fields
  4. 使用 pbiviz package 命令重新打包视觉对象,并尝试将其导入 Power BI。

备注

请参阅 PBIX 和源代码进行下载。

添加用户参数

  1. 为用户添加功能,以控制视觉对象元素的颜色和大小,包括 UI 中的内部参数。

    Screenshot shows two version of the tools pane with options added to the version on the right.

  2. 编辑 capabilities.json 并更新 objects 部分。 在这里,我们定义每个参数的名称、工具提示和类型,并决定将参数划分为组(在本例中为三个组)。

    下载 capabilities.json;有关详细信息,请参阅对象属性

    capabilities

  3. 编辑 src/settings.ts 以反映此 settings.ts。 此文件采用 TypeScript 编写。

    在这里,你将找到针对以下目的添加的两个代码块:

    settings

    • 声明新接口以保存属性值

    • 定义成员属性和默认值

  4. 编辑 script.r 以反映此 script.r。 这会通过为每个用户参数添加 if.exists 调用来添加对 UI 中参数的支持。

    提示

    要跟踪 R 脚本的更改,请搜索注释:

    R

    #RVIZ_IN_PBI_GUIDE:BEGIN:Added to enable user parameters
    ...#RVIZ_IN_PBI_GUIDE:END:Added to enable user parameters#RVIZ_IN_PBI_GUIDE:BEGIN:Removed to enable user parameters
    ...#RVIZ_IN_PBI_GUIDE:END:Removed to enable user parameters

    script before and after

    可以决定不向 UI 公开参数,就像我们一样。

  5. 使用 pbiviz package 命令重新打包视觉对象,并尝试将其导入 Power BI。

备注

请参阅 PBIX 和源代码进行下载。

提示

在这里,我们同时添加了几种类型(布尔、数字、字符串和颜色)的参数。 对于简单情况,请参阅本示例了解如何添加单个参数。

将视觉对象转换为基于 RHTML 的视觉对象

生成的视觉对象基于 PNG,这种视觉对象无法对鼠标悬停进行响应并且无法执行放大等操作,因此我们需要将其转换为基于 HTML 的视觉对象。 我们将创建一个 R 驱动的基于 HTML 的空视觉对象模板,然后从基于 PNG 的项目中复制一些脚本。

  1. 运行以下命令:

    Bash

    pbiviz new funnel-visual-HTML -t rhtmlcd funnel-visual-HTML
    npm install
    pbiviz package
  2. 打开 capabilities.json 并记下 "scriptOutputType":"html" 行。

  3. 打开 dependencies.json 并记下列出的 R 包的名称。

  4. 打开 script.r 并记下结构。 由于它不使用外部输入,因此可以在 RStudio 中打开并运行它。

    这将创建并保存 out.html。 此文件是自包含文件(没有外部依赖项),并且定义 HTML 小组件中的图形。

    重要

    对于 htmlWidgets 用户,r_files 文件夹中提供了 R 实用工具,以帮助将 plotlywidget 对象转换为自容式 HTML。

    与以前的视觉对象类型不同,此版本的 R 驱动视觉对象还支持 source 命令,以提高代码的可读性。

  5. 将 capabilities.json 替换为上一步中的 capabilities.json,或下载 capabilities.json 。

    请务必:

    "scriptOutputType": "html"

  6. 将最新版 script.r 与模板中的 script.r 进行合并,或下载 script.r 。

    新脚本使用 plotly 包将 ggplot 对象转换为 plotly 对象,然后使用 htmlWidgets 包将其保存到 HTML 文件 。

    大多数实用工具函数会移动到 r_files/utils.r,并且添加了 generateNiceTooltips 函数以显示 plotly 对象。

    1

    2

    提示

    要跟踪 R 脚本的更改,请搜索注释:

    R

    #RVIZ_IN_PBI_GUIDE:BEGIN:Added to create HTML-based 
    ...#RVIZ_IN_PBI_GUIDE:BEGIN:Added to create HTML-based#RVIZ_IN_PBI_GUIDE:BEGIN:Removed to create HTML-based ...#RVIZ_IN_PBI_GUIDE:BEGIN:Removed to create HTML-based
  7. 将最新版 dependencies.json 与模板中的 dependencies.json 进行合并以包含新的 R 包依赖项,或下载 dependencies.json 。

  8. 按照之前步骤中的相同方式编辑 src/settings.ts。

  9. 使用 pbiviz package 命令重新打包视觉对象,并尝试将其导入 Power BI。

备注

请参阅 PBIX 和源代码进行下载。

生成其他示例

  1. 请运行以下命令,创建一个空项目:

    Bash

    pbiviz new example -t rhtmlcd example
    npm install
    pbiviz package
  2. 采用此展示中的代码,并进行突出显示的更改:

    Highlighted changes

  3. 替换模板的 script.r 并再次运行 pbiviz package。 现在,视觉对象已包含在 Power BI 报表中!

提示和技巧

  • 建议开发者编辑 pbiviz.json 以存储正确的元数据,例如版本、电子邮件、名称、许可证类型等等 。

    重要

    guid 字段是视觉对象的唯一标识符。 如果为每个视觉对象创建一个新项目,则 GUID 也将不同。 仅当使用复制到新视觉对象的旧项目(禁止这样做)时,它才会相同。

  • 编辑 assets/icon.png 以便为视觉对象创建唯一图标。

  • 要使用与 Power BI 报表中相同的数据在 RStudio 调试 R 代码,请将以下内容添加到 R 脚本的开头(编辑 fileRda 变量):

    R

    #DEBUG in RStudiofileRda = "C:/Users/yourUserName/Temp/tempData.Rda"if(file.exists(dirname(fileRda)))
    { if(Sys.getenv("RSTUDIO")!="")
    load(file= fileRda) else
    save(list = ls(all.names = TRUE), file=fileRda)
    }

    这会保存 Power BI 报表中的环境,并将其加载到 RStudio 中。

  • 无需使用 GitHub 上提供的代码从头开始开发 R 驱动的视觉对象。 可以选择要用作模板的视觉对象,并将代码复制到新项目中。

    例如,尝试使用样条自定义视觉对象。

  • 每个 R 视觉对象都会将 unique 运算符应用到其输入表。 要避免删除相同的行,请考虑添加具有唯一 ID 的额外输入字段,并在 R 代码中将其忽略。

  • 如果已有 Power BI 帐户,请使用 Power BI 服务即时开发视觉对象,而不是使用 pbiviz package 命令重新打包它们。

HTML 小组件库

浏览 HTML 小组件库中的视觉对象,以便在下一个视觉对象中使用。 为方便起见,我们创建了一个视觉对象项目存储库,其中有 20 多个交互式 HTML 视觉对象可供选择!

提示

要在 HTML 小组件之间进行切换,请使用“格式”>“设置”>“类型” 。 通过此 PBIX 文件进行试用。

将示例用于你的视觉对象

  1. 下载整个文件夹。

  2. 编辑 script.r 和 dependencies.json 以仅保留一个小组件 。

  3. 编辑 capabilities.json 和 settings.ts 以删除 Type 选择器 。

  4. 将 visual.ts 中的 const updateHTMLHead: boolean = true; 更改为 false。 (以提高性能)

  5. 更改 pbiviz.json 中的元数据,最重要的是 guid 字段。

  6. 重新打包并继续根据需要自定义视觉对象。

Screenshot shows six widgets discussed earlier in this article.

Screenshot shows six more widgets discussed earlier in this article.

备注

服务并不支持此项目中的所有小部件。