Das Datenbüro

R in Power BI

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:

Vorteile custom visuals

Nachteile

Drei Möglichkeiten

  • R in Power BI Visual
  • R in Custom Visual
  • R in Custom script mit html Unterstützung (plotly)

Alternative

  • d3.js

Entwickeln eigener Power BI-Visuals anhand des Beispiels des kreisförmigen Kartenvisuals in Power BI Embedded Analytics für bessere eingebettete BI-Erkenntnisse – Power BI | Microsoft Docs

  • Phyton

Links

Generelle Beschreibung

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

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

https://docs.microsoft.com/de-de/power-bi/developer/visuals/environment-setup?tabs=windows#install-pbiviz

Einrichten Visual Studio

• Lokalen Ordner öffnen

• Solution Explorer

• R files Rstudio zuordnen

• Power shell oder cmd öffnen, wird automatisch in dem Orden geöffnet