Dav*_* D. 8 r highcharts plotly powerbi
有没有人试过在 Power BI 的 R Script Visual 中使用Plotly或Highchart
当我在 R 脚本编辑器中尝试此操作并运行时:
library(ggplot2)
library(plotly)
x <- 1:5
y <- c(1, 3, 2, 3, 1)
plot_ly(x = dataset$period, y = dataset$mean, name = "spline", line = list(shape = "spline"))
Run Code Online (Sandbox Code Playgroud)
错误信息:
没有创建图像。R 代码不会导致创建任何视觉效果。确保您的 R 脚本生成 R 默认设备的绘图。
但在我的 R 桌面上运行完美。任何想法?
对于PowerBI的新版本,它也可以生产Plotly使用图表R和 ggplot作为custom PowerBI visualizations。使用下面描述的方法,您可以从 PowerBI 表中生成密度图,如下所示:
资源:
我建议的解决方案用途nodejs可以在这里找到。那,以及我的建议的主要部分建立在这篇优秀的博客文章上,当涉及到使用和更新的细节时,它只有一些缺点custom PowerBI Visualizations。我可以参考那个链接并指出我做的不同的事情,但为了清晰和完整起见,我从头开始做整个事情。
第 1 部分 - 下载并安装 node.js
1.1:链接:https : //nodejs.org/en/
1.2:重新启动计算机,启动命令提示符,然后运行:
npm install -g powerbi-visuals-tools
Run Code Online (Sandbox Code Playgroud)
1.3:通过在命令提示符中运行以下命令来检查您的安装是否成功:
输入:
pbiviz
Run Code Online (Sandbox Code Playgroud)
输出:
第 2 部分:制作 PowerBI 自定义视觉对象
2.1:创建一个文件夹来包含您的自定义可视化。
我正在使用命令提示符来执行此操作
# from the C:\ directory:
md pbiCustomR
cd pbiCustomR
Run Code Online (Sandbox Code Playgroud)
在该文件夹中,运行以下命令:
pbiviz new pbiDensity -t html
Run Code Online (Sandbox Code Playgroud)
这将创建一个新的视觉对象并安装一些必需的包。您可以更改pbiDensity为任何您想要的。
2.2:导航到文件夹C:\pbiCustomR\pbiDensity并仔细查看内容。
那里有很多东西,但我们只会关注文件script.R和文件pbiDensity.pbiviz(位于子文件夹中dist)。script.R是设置 R 脚本的模板。稍后我们将对其进行编辑。pbiDensity.pbiviz是一个 PowerBI 自定义可视化,稍后您也将在 Power BI 中导入它。
2.3:打开文件C:pbiqp\script.R看到这个(我强烈推荐RStudio):
source('./r_files/flatten_HTML.r')
############### Library Declarations ###############
libraryRequireInstall("ggplot2");
libraryRequireInstall("plotly")
####################################################
################### Actual code ####################
g = qplot(`Petal.Length`, data = iris,fill = `Species`, main = Sys.time());
####################################################
############# Create and save widget ###############
p = ggplotly(g);
internalSaveWidget(p, 'out.html');
####################################################
Run Code Online (Sandbox Code Playgroud)
上面的代码片段使用数据集中的一个数据Iris集,但我们将通过添加以下行来利用 PowerBI 文件中的可用数据:
df <- data.frame(X = Values$Data)
Run Code Online (Sandbox Code Playgroud)
该行从我们要命名的现有列 i PowerBI 文件构建一个数据框Data。但首先,继续将上面的完整代码段更改为:
source('./r_files/flatten_HTML.r')
############### Library Declarations ###############
libraryRequireInstall("ggplot2");
libraryRequireInstall("plotly")
####################################################
################### Actual code ####################
df <- data.frame(X = Values$Data)
# Build basic ggplot
g <- ggplot(df, aes(x = X))
# Add density plot
g = g + geom_density(colour = 'blue')
############# Create and save widget ###############
p = ggplotly(g);
internalSaveWidget(p, 'out.html');
####################################################
Run Code Online (Sandbox Code Playgroud)
2.4:完成您的自定义可视化。
在文件夹中C:\pbiCustomR\pbiDensity,使用命令提示符运行以下命令:
pbiviz package
Run Code Online (Sandbox Code Playgroud)
这将触发此输出:
当涉及到更高级的东西时,就是这样。剩下的就简单了!
第 3 部分 - 使用 R 在 PowerBI 中生成一些随机数据
3.1在Home选项卡下,单击Edit Queries打开Power Query Editor.
3.2单击Enter Data,并且只单击OK。
3.3选择Transform > Run R Script并插入以下代码片段:
set.seed(123)
output <- data.frame(rnorm(100, mean=100, sd=10))
Run Code Online (Sandbox Code Playgroud)
这将在Query Settingscalled下产生一个新的步骤"output",以及一个带有随机数的表,而不是世界上最好的列名。
3.4将下面的步骤名称更改Applied Steps为tblRandom,并将列名称更改为,SampleData这样您最终会得到这样的结果:
3.5选择Home > Close&Apply返回 PowerBI Desktop。
**第 4 部分 - 导入和使用您的自定义可视化
4.1在 下Visualizations,单击带有三个点的图标并选择Import from file:
4.1导航到C:\pbiCustomR\pbiDensity\dist,选择pbiDensity.pbiviz,单击OK,下面会出现一个新图标Visualizations:
And this is important:为了让您的可视化的工作,你列的名称具有以匹配您的[R脚本参考。而在我们的案例中,他们没有(只是为了说明这一点)。因此将名称列更改SampleData为Data.
4.2单击您的新图标以插入一个可视化占位符,并将您的Data列拖到该图标上:
然后你去:
现在,您可以plotly随意使用工具栏的全部灵活性:
第 5 部分 - 编辑 R 脚本、更新和重新导入自定义可视化
5.1在 RStudio 中编辑您的脚本并在不更改文件名的情况下保存它
5.2导航到您的自定义文件夹并运行pbiviz package
5.3在 PowerBI 中删除您现有的自定义视觉对象并再次导入
原因是,目前 Power BI 仅支持将 R 可视化组件创建的图表渲染为 PNG。
请尝试以下操作:
p <- plot_ly(x = dataset$period, y = dataset$mean, name = "spline", line = list(shape = "spline"))
plotly_IMAGE(p, format = "png", out_file = "out.png")
Run Code Online (Sandbox Code Playgroud)