Beispieldatei:
Power BI R Demo1
Beispiel:
library (ggplot2)
ggplot(data = dataset, aes(x=year,y=Auftragsmenge)) + facet_wrap(vars(Warengruppe))+ geom_point(aes(color=Warengruppe))+ labs(title="Auftragsmenge pro Kategorie und Jahr", y="Auftragsmenge", x="Jahr")
R in M Query
Custom Visuals in Power BI
Einführung
Voraussetzungen
Dieser Artikel befasst sich mit Microsoft Power BI und R. Grundkenntnisse in beiden Bereichen sollten vorliegen.
Vorteile R:
- umfangreiche statistische Pakete
- Vordefinierte Grafikpakete
- The R Graph Gallery – Help and inspiration for R charts (r-graph-gallery.com)
Vorteile custom visuals
- Kontrolle über das Visual, siehe auch Artikel von Marco Russo:Updating Power BI custom visuals – OKVIZ
- Wenn die Pakete von Microsoft unterstützt werden, kann der Report auch hochgeladen werden.
Nachteile
- keine Interaktivität, ausser bei html Unterstützung
- Microsoft unterstützt nicht alle Pakete.
- Unterstützte R packages:https://docs.microsoft.com/en-us/power-bi/connect-data/service-r-packages-support
- Zeitlimit: 5min und 30min.
Drei Möglichkeiten
- R in Power BI Visual
- R in Custom Visual
- R in Custom script mit html Unterstützung (plotly)
Alternative
- d3.js
- Phyton
Links
Generelle Beschreibung
- Power BI visuals documentation – Power BI | Microsoft Docs
- <https://docs.microsoft.com/en-us/power-bi/create-reports/desktop-r-visuals>
- Build a funnel plot from R script to R visual in Power BI embedded analytics for better embedded BI insights – Power BI | Microsoft Docs
R
Microsoft R
RStudio
Umgebung einrichten
Download der Pakete über:
GitHub – microsoft/PowerBI-visuals-tools: Contains tools for building/packaging Power BI visuals
- Node.js
- Powershell
- Visual Studio Code (oder anderes)
Initialisierung
Powershell starten
In Power shell:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
- Aus https://caiomsouza.medium.com/fix-for-powershell-script-not-digitally-signed-69f0ed518715
- Directory wechseln
cd Documents\R\
- Visual data anlegen :
pbiviz new myvisual2 -t rvisual
- Ordner myvisual2 wurde angelegt
- add R visual, enable script
Work flow
- in Power BI R script erzeugen, in RStudio wechseln
- add data, work on report and code
- save as script.r
- Visual aktualisieren und anlegen:
pbiviz package
–> Visual wird in /dist abgelegt
- Wiederholen bei Änderungen an script.R
- In Power BI einlesen
Files am besten auf einem lokalen drive anlegen, oder onedrive pausieren.
Neues Visual generieren. (Bestehende Ordner könnten auch kopiert werden, dann ist aber die ID doppelt)
json code in Visual Studio Code editieren
• In neuem Directory:
Pbiviz.json
File ergänzen
Pbiviz.json
{
"visual": {
"name": "stacked2RVisualHtml",
"displayName": "Stacked2RVisualHtml",
"guid": "stacked2RVisualHtml0F59C81D2C794867AF4EBEA379AC4BA5",
"visualClassName": "Visual",
"version": "1.0.0",
--> "description": "Test",
--> "supportUrl": "www.injuma.ch",
"gitHubUrl": ""
},
"apiVersion": "2.6.0",
"author": {
--> "name": "Juergen Mayer",
--> "email": "[email protected]"
},
"assets": { "icon": "assets/icon.png" },
"externalJS": null,
"style": "style/visual.less",
"capabilities": "capabilities.json",
"dependencies": "dependencies.json",
"stringResources": []
}
Dependencies
Optional
• Dependencies ergänzen
{
"cranPackages": [
{
"name": "ggplot2",
"displayName": "GG Plot 2",
"url": "https://cran.r-project.org/web/packages/ggplot2/index.html"
},
{
"name": "plotly",
"displayName": "Plotly",
"url": "https://cran.r-project.org/web/packages/plotly/index.html"
},
{
"name": "htmlwidgets",
"displayName": "HTML Widgets",
"url": "https://cran.r-project.org/web/packages/htmlwidgets/index.html"
},
{
"name": "XML",
"displayName": "XML",
"url": "https://cran.r-project.org/web/packages/XML/index.html"
}
]
}
visual
/src/Visual.ts ergänzen um resizing zu ermöglichen:
public onResizing(finalViewport: IViewport): void {
this.imageDiv.style.height = finalViewport.height + "px";
this.imageDiv.style.width = finalViewport.width + "px";
this.imageElement.style.height = finalViewport.height + "px";
this.imageElement.style.width = finalViewport.width + "px";
}
Objects
Ts settings
Capabilities.json
Hier werden die Inputs definiert.
In der Microsoft Beschreibung wird empfohlen, Values in dataset zu ändern. Dies könnte aber ebenso in R geschehen.
vorher
"dataRoles": [
{
"displayName": "Values",
"kind": "GroupingOrMeasure",
"name": "Values"
}
],
nacher:
"dataRoles": [
{
"displayName": "Menge",
"kind": "GroupingOrMeasure",
"name": "Menge"
},
{
"displayName": "Kategorie",
"kind": "GroupingOrMeasure",
"name": "Kategorie"
},
{
"displayName": "year",
"kind": "GroupingOrMeasure",
"name": "year"
}
],
vorher:
"dataViewMappings": [
{
"scriptResult": {
"dataInput": {
"table": {
"rows": {
"select": [
{
"for": {
"in": "Values"
}
}
],
"dataReductionAlgorithm": {
"top": {}
}
}
}
},
nachher:
"dataViewMappings": [
{
"scriptResult": {
"dataInput": {
"table": {
"rows": {
"select": [
{
"for": { "in": "Menge" }
},
{
"for": { "in": "Kategorie" }
},
{
"for": { "in": "year" }
}
],
Manchmal ist es einfacher die Daten in R anzupassen.
l################### DEBUG in RStudio ####################
fileRda = "C:/Users/jm/Documents/R/myvisual2/tempData.Rda"
if(file.exists(dirname(fileRda)))
{
if(Sys.getenv("RSTUDIO")!="")
load(file= fileRda)
else
save(list = ls(all.names = TRUE), file=fileRda)
}
###################
library (ggplot2)
library (tidyverse)
###################
df <- data.frame(Menge,Kategorie,year) %>% rename(Menge = 1, Kategorie = 2, year = 3)
ggplot(data = df, aes(x=df$year,y=df$Menge)) +
facet_wrap(vars(df$Kategorie))+
geom_point(aes(color=df$Kategorie))+
labs(title="Menge pro Kategorie und Jahr", y="Menge", x="Jahr")
Eingabefelder
Properties ergänzen
Anpassungen für Inputs:
R & plotly
Interaktiv, aber es werden nicht alle features von ggplot übernommen.
Einbinden von plotly und anderer Pakete erfolgt eventuell erst nach Neuladen des Reports.
Neues Visual setup:
Cmd:
pbiviz new myvisual2html -t rhtml
Anpassen
- pbiviz, Achtung, beim reinen kopieren wird die guid überschrieben
- capabilities
script
„` {.{source(‚./r_files/flatten_html.r‘)}} ############### Library Declarations ############### libraryRequireInstall(„ggplot2“); library (tidyverse) libraryRequireInstall(„plotly“) ####################################################Actual code
df <- data.frame(Menge,Kategorie,year) %>% rename(Menge = 1, Kategorie = 2, year = 3)
g<-ggplot(data = df, aes(x=year,y=Menge)) + facet_wrap(vars(Kategorie))+ geom_point(aes(color=Kategorie))+ labs(title=“Menge pro Kategorie und Jahr“, y=“Menge“, x=“Jahr“) ####################################################Create and save widget
p = ggplotly(g); internalSaveWidget(p, ‚out.html‘); #################################################### „`
Sonstiges
Tipps
Resizing: PBI: im Visual: Format /General / Maintain layer order ein- und ausschalten
„No image was created. The code didn’t result in creation of any visuals. Make sure your R script results in a plot to the R default device.“
–\>
On the PowerBI website it says: ‚Only plots that are plotted to the R default display device are displayed correctly on the canvas‘. In simpler terms it means that if an object is printed to the console, it will not be displayed in PowerBI.
Die Ausgabe auf der Konsole muss umgeleitet werden. –\> plotly
—
Aus https://docs.microsoft.com/en-us/power-bi/developer/visuals/create-r-based-power-bi-desktop –\> rvisual wird angelegt
Aus https://docs.microsoft.com/de-de/power-bi/developer/visuals/develop-circle-card
Einrichten Visual Studio
• Lokalen Ordner öffnen
• Solution Explorer
• R files Rstudio zuordnen
• Power shell oder cmd öffnen, wird automatisch in dem Orden geöffnet