教程:根据 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. 运行以下命令来创建新的 R 驱动视觉对象:

    pbiviz new funnel-visual -t rvisual
    cd funnel-visual
    npm install 
    pbiviz package
    

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

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

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

    屏幕截图显示了 json 文件更改的差异比较。

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

    屏幕截图显示已向 cranPackages 项添加内容的差异比较。

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

注意

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

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

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

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

    CV01to02

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

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

    之前和之后

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

  3. 编辑 script.r 以支持将 PopulationNumberTooltips 作为输入数据帧而不是 dataset,或下载 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 中的内部参数。

    屏幕截图显示了工具窗格的两个版本,右侧的版本中添加了选项。

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

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

    capabilities

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

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

    • 声明新接口以保存属性值
    • 定义成员属性和默认值

    设置

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

    提示

    要跟踪 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
    

    脚本前后

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

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

注意

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

提示

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

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

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

  1. 运行以下命令:

    pbiviz new funnel-visual-HTML -t rhtml
    cd 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 脚本的更改,请搜索注释:

    #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. 请运行以下命令,创建一个空项目:

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

    突出显示的更改

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

提示和技巧

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

    重要

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

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

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

    #DEBUG in RStudio
    fileRda = "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 小组件库中的视觉对象,以便在下一个视觉对象中使用。 为方便起见,我们创建了一个视觉对象项目存储库,其中有 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. 重新打包并继续根据需要自定义视觉对象。

屏幕截图显示了本文前面讨论的六个小组件。

屏幕截图显示了本文前面讨论的另外六个小组件。

注意

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

要了解详细信息,请参阅其他 Power BI 教程,开发 Power BI 圆形卡片视觉对象R 视觉对象

了解如何开发视觉对象并将其提交Office 应用商店(库);有关进一步示例,请参阅 R 脚本展示