Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Som utvecklare kan du skapa egna visuella Power BI-objekt. Dessa visuella objekt kan användas av dig, din organisation eller av tredje part.
I den här självstudien utvecklar du ett visuellt Power BI-objekt med React. Det visuella objektet visar ett formaterat måttvärde i en cirkel. Det visuella objektet har anpassningsbar storlek och gör att du kan anpassa dess inställningar.
I den här självstudien lär du dig att:
- Skapa ett utvecklingsprojekt för ditt visuella objekt.
- Utveckla ditt visuella objekt med React.
- Konfigurera ditt visuella objekt för att bearbeta data.
- Konfigurera ditt visuella objekt så att det anpassas efter storleksändringar.
- Konfigurera anpassningsbara färg- och kantlinjeinställningar för ditt visuella objekt.
Kommentar
Den fullständiga källkoden för det här visuella objektet finns i React-cirkelkortets visuella Power BI-objekt.
Förutsättningar
Innan du börjar utveckla ditt visuella Power BI-objekt kontrollerar du att allt visas i det här avsnittet.
Ett Power BI Pro- eller Premium per användare-konto (PPU). Om du inte har någon kan du registrera dig för en kostnadsfri utvärderingsversion.
Visual Studio Code (VS Code). VS Code är en idealisk IDE (Integrated Development Environment) för utveckling av JavaScript- och TypeScript-program.
Windows PowerShell version 4 eller senare (för Windows). Eller Terminal (för Mac).
En miljö som är redo att utveckla ett visuellt Power BI-objekt. Konfigurera din miljö för att utveckla ett visuellt Power BI-objekt.
I den här självstudien används rapporten försäljningsanalys i USA. Du kan ladda ned den här rapporten och ladda upp den till Power BI-tjänst eller använda din egen rapport. Om du behöver mer information om Power BI-tjänst och uppladdning av filer kan du läsa Kom igång som skapas i självstudien Power BI-tjänst.
Skapa ett utvecklingsprojekt
I det här avsnittet skapar du ett projekt för det visuella react-cirkelkortet.
Öppna PowerShell och navigera till mappen som du vill skapa projektet i.
Ange följande kommando:
pbiviz new ReactCircleCardGå till projektets mapp.
cd ReactCircleCardStarta det visuella objektet React-cirkelkortet. Det visuella objektet körs nu när det finns på datorn.
pbiviz startViktigt!
Om du vill hindra det visuella objektet från att köras anger du Ctrl+C i PowerShell och om du uppmanas att avsluta batchjobbet anger du Y och trycker på Retur.
Visa React-cirkelkortet i Power BI-tjänst
För att testa det visuella objektet i Power BI-tjänst använder vi rapporten för försäljningsanalys i USA. Du kan ladda ned den här rapporten och ladda upp den till Power BI-tjänst.
Du kan också använda din egen rapport för att testa det visuella objektet.
Kommentar
Innan du fortsätter kontrollerar du att du har aktiverat utvecklarläget för visuella objekt.
Logga in på PowerBI.com och öppna rapporten för försäljningsanalys i USA.
Välj Redigera.
Skapa en ny sida för testning genom att klicka på knappen Ny sida längst ned i Power BI-tjänst-gränssnittet.
I fönstret Visualiseringar väljer du Det visuella objektet Utvecklare.
Det här visuella objektet representerar det anpassade visuella objekt som du kör på datorn. Den är bara tillgänglig när inställningen för felsökning av anpassade visuella objekt är aktiverad.
Kontrollera att ett visuellt objekt har lagts till på rapportarbetsytan.
Det här är ett enkelt visuellt objekt som visar hur många gånger uppdateringsmetoden har anropats. I det här skedet hämtar det visuella objektet inga data.
Kommentar
Om det visuella objektet visar ett felmeddelande om anslutning öppnar du en ny flik i webbläsaren, navigerar till
https://localhost:8080/assetsoch ger webbläsaren behörighet att använda den här adressen.
Medan det nya visuella objektet är markerat går du till fönstret Data , expanderar Försäljning och väljer Kvantitet.
Om du vill testa hur det visuella objektet svarar ändrar du storlek på det och märker att värdet för antal uppdateringar ökar varje gång du ändrar storlek på det visuella objektet.
Konfigurera React i projektet
I det här avsnittet får du lära dig hur du konfigurerar React för ditt visuella Power BI-projekt.
Öppna PowerShell och stoppa det visuella objektet från att köras genom att ange Ctrl+C. Om du uppmanas att avsluta batchjobbet anger du Y och trycker på Retur.
Installera React
Om du vill installera nödvändiga React-beroenden öppnar du PowerShell i mappen ReactCircleCard och kör följande kommando:
npm i react react-dom
Installera React-typdefinitioner
Om du vill installera typdefinitioner för React öppnar du PowerShell i mappen reactCircleCard och kör följande kommando:
npm i @types/react @types/react-dom
Skapa en React-komponentklass
Följ de här stegen för att skapa en React-komponentklass.
Öppna VS Code och gå till mappen reactCircleCard .
Skapa en ny fil genom att välja Ny fil>.
Kopiera följande kod till den nya filen.
import * as React from "react"; export class ReactCircleCard extends React.Component<{}>{ render(){ return ( <div className="circleCard"> Hello, React! </div> ) } } export default ReactCircleCard;Välj Spara som och gå till mappen src .
Spara filen på följande sätt:
- I fältet Filnamn anger du komponenten.
- I den nedrullningsbara menyn Spara som-typ väljer du TypeScript React.
Lägg till React i den visuella filen
Ersätt koden i filen visual.ts med kod som möjliggör användning av React.
I mappen src öppnar du visual.ts och ersätter koden i filen med följande kod:
"use strict"; import powerbi from "powerbi-visuals-api"; import DataView = powerbi.DataView; import VisualConstructorOptions = powerbi.extensibility.visual.VisualConstructorOptions; import VisualUpdateOptions = powerbi.extensibility.visual.VisualUpdateOptions; import IVisual = powerbi.extensibility.visual.IVisual; // Import React dependencies and the added component import * as React from "react"; import * as ReactDOM from "react-dom"; import ReactCircleCard from "./component"; import "./../style/visual.less"; export class Visual implements IVisual { constructor(options: VisualConstructorOptions) { } public update(options: VisualUpdateOptions) { } }Kommentar
Eftersom standardinställningarna för Power BI TypeScript inte känner igen React tsx-filer markeras
componentVS Code som ett fel.Om du vill återge komponenten lägger du till HTML-målelementet i visual.ts. Det här elementet finns
HTMLElementiVisualConstructorOptions, som skickas till konstruktorn.Öppna visual.ts i mappen src.
Lägg till följande kod i
Visualklassen:
private target: HTMLElement; private reactRoot: React.ComponentElement<any, any>;- Lägg till följande rader i
VisualConstructorOptionskonstruktorn:
this.reactRoot = React.createElement(ReactCircleCard, {}); this.target = options.element; ReactDOM.render(this.reactRoot, this.target);Din visual.ts fil bör nu se ut så här:
"use strict"; import powerbi from "powerbi-visuals-api"; import DataView = powerbi.DataView; import VisualConstructorOptions = powerbi.extensibility.visual.VisualConstructorOptions; import VisualUpdateOptions = powerbi.extensibility.visual.VisualUpdateOptions; import IVisual = powerbi.extensibility.visual.IVisual; import * as React from "react"; import * as ReactDOM from "react-dom"; import ReactCircleCard from "./component"; import "./../style/visual.less"; export class Visual implements IVisual { private target: HTMLElement; private reactRoot: React.ComponentElement<any, any>; constructor(options: VisualConstructorOptions) { this.reactRoot = React.createElement(ReactCircleCard, {}); this.target = options.element; ReactDOM.render(this.reactRoot, this.target); } public update(options: VisualUpdateOptions) { } }Spara visual.ts.
Redigera tsconfig-filen
Redigera tsconfig.json för att arbeta med React.
I mappen reactCircleCard öppnar du tsconfig.json och lägger till två rader i
compilerOptionsbörjan av objektet."jsx": "react", "types": ["react", "react-dom"],Din tsconfig.json fil bör nu se ut så här, och
componentfelet i visual.ts bör vara borta.{ "compilerOptions": { "jsx": "react", "types": ["react", "react-dom"], "allowJs": false, "emitDecoratorMetadata": true, "experimentalDecorators": true, "target": "es6", "sourceMap": true, "outDir": "./.tmp/build/", "moduleResolution": "node", "declaration": true, "lib": [ "es2015", "dom" ] }, "files": [ "./src/visual.ts" ] }Spara tsconfig.json.
Testa ditt visuella objekt
Öppna PowerShell i mappen CircleCardVisual och kör projektet:
pbiviz start
När du lägger till ett nytt visuellt utvecklarobjekt i rapporten i Power BI-tjänst ser det ut så här:
Konfigurera det visuella objektets datafält
Konfigurera det visuella objektets funktionsfil så att endast ett datafält kan skickas till det visuella objektets måttdatafält .
Öppna capabilities.json från mappen reactCircleCard i VS Code.
ReactCircleCardVisar ett enda värde,Measure Data. Ta bort objektetCategory DatafråndataRoles.När du
Category Datahar tagit bort objektetdataRolesser nyckeln ut så här:"dataRoles": [ { "displayName": "Measure Data", "name": "measure", "kind": "Measure" } ],Ta bort allt innehåll i
objectsnyckeln (du fyller i den senare).När du tar bort innehållet
objectsser nyckeln ut så här:"objects": {},Ersätt egenskapen
dataViewMappingsmed följande kod.max: 1imeasureanger att endast ett datafält kan skickas till det visuella objektets måttdatafält ."dataViewMappings": [ { "conditions": [ { "measure": { "max": 1 } } ], "single": { "role": "measure" } } ]Spara de ändringar som du har gjort i capabilities.json.
Kontrollera att
pbiviz startkörs och uppdatera det visuella objektet React Circle Card i Power BI-tjänst. Fältet Måttdata kan bara acceptera ett datafält, enligt vad som anges avmax: 1.
Uppdatera det visuella objektets formatmall
I det här avsnittet omvandlar du det visuella objektets form till en cirkel. Använd filen visual.less för att styra stilen för ditt visuella objekt.
Öppna visual.less från formatmappen.
Ersätt innehållet i visual.less med följande kod.
.circleCard { position: relative; box-sizing: border-box; border: 1px solid #000; border-radius: 50%; width: 200px; height: 200px; } p { text-align: center; line-height: 30px; font-size: 20px; font-weight: bold; position: relative; top: -30px; margin: 50% 0 0 0; }Spara visual.less.
Ange att det visuella objektet ska ta emot egenskaper från Power BI
I det här avsnittet konfigurerar du det visuella objektet så att det tar emot data från Power BI och skickar uppdateringar till instanserna i filen component.tsx .
Rendera data med React
Du kan återge data med React. Komponenten kan visa data från sitt eget tillstånd.
Öppna component.tsx från mappen reactCircleCard i VS Code.
Ersätt innehållet i component.tsx med följande kod.
import * as React from "react"; export interface State { textLabel: string, textValue: string } export const initialState: State = { textLabel: "", textValue: "" } export class ReactCircleCard extends React.Component<{}, State>{ constructor(props: any){ super(props); this.state = initialState; } render(){ const { textLabel, textValue } = this.state; return ( <div className="circleCard"> <p> {textLabel} <br/> <em>{textValue}</em> </p> </div> ) } }Spara component.tsx.
Ange att ditt visuella objekt ska ta emot data
Visuella objekt tar emot data som ett argument för update metoden. I det här avsnittet uppdaterar du den här metoden för att ta emot data.
Följande kod väljer textLabel och textValue från DataView, och om data finns uppdaterar du komponenttillståndet.
Öppna visual.ts från mappen src i VS Code.
Ersätt raden
import ReactCircleCard from "./component";med följande kod:import { ReactCircleCard, initialState } from "./component";Lägg till följande kod i metoden
update.if(options.dataViews && options.dataViews[0]){ const dataView: DataView = options.dataViews[0]; ReactCircleCard.update({ textLabel: dataView.metadata.columns[0].displayName, textValue: dataView.single.value.toString() }); } else { this.clear(); }Skapa en
clearmetod genom att lägga till följande kod underupdatemetoden.private clear() { ReactCircleCard.update(initialState); }Spara visual.ts
Ange att ditt visuella objekt ska skicka data
I det här avsnittet uppdaterar du det visuella objektet för att skicka uppdateringar till instanser i komponentfilen .
Öppna component.tsx från mappen src i VS Code.
Lägg till följande kod i
ReactCircleCardklassen:private static updateCallback: (data: object) => void = null; public static update(newState: State) { if(typeof ReactCircleCard.updateCallback === 'function'){ ReactCircleCard.updateCallback(newState); } } public state: State = initialState; public componentWillMount() { ReactCircleCard.updateCallback = (newState: State): void => { this.setState(newState); }; } public componentWillUnmount() { ReactCircleCard.updateCallback = null; }Spara component.tsx.
Visa ändringarna i det visuella objektet
Testa ditt visuella React Circle Card-objekt för att visa de ändringar du har gjort.
Kontrollera att
pbiviz startkörs och uppdatera det visuella objektet React Circle Card i Power BI-tjänst.Lägg till Försäljning i det visuella objektets måttdatafält .
Gör ditt visuella objekt storleksbart
Det visuella objektet har för närvarande fast bredd och höjd. För att göra det visuella objektet storleksbart måste du definiera variabeln size i både visual.ts - och component.tsx-filerna . I det här avsnittet gör du det visuella objektet storleksbart.
När du har slutfört stegen som beskrivs i det här avsnittet motsvarar cirkeldiametern i det visuella objektet den minsta bredden eller höjdstorleken, och du kommer att kunna ändra storlek på den i Power BI-tjänst.
Konfigurera visual.ts-filen
Hämta den aktuella storleken på det visuella visningsområdet från objektet options .
Öppna visual.ts från mappen src i VS Code.
Infoga den här koden för att importera
IViewportgränssnittet.import IViewport = powerbi.IViewport;Lägg till egenskapen
viewportivisualklassen.private viewport: IViewport;updateLägg till följande kod i metoden föreReactCircleCard.update.this.viewport = options.viewport; const { width, height } = this.viewport; const size = Math.min(width, height);updateI -metoden iReactCircleCard.updatelägger du tillsize.size,Spara visual.ts.
Konfigurera filen component.tsx
Öppna component.tsx från mappen src i VS Code.
Lägg till följande kod i
export interface State.size: numberLägg till följande kod i
export const initialState: State.size: 200renderI -metoden gör du följande ändringar i koden:Lägg till
sizeiconst { textLabel, textValue, size } = this.state;. Den här deklarationen bör nu se ut så här:const { textLabel, textValue, size } = this.state;Lägg till följande kod ovan
return.const style: React.CSSProperties = { width: size, height: size };Ersätt den första returraden
<div className="circleCard">med:<div className="circleCard" style={style}>
Spara component.tsx.
Konfigurera den visuella filen
Öppna visual.less från formatmappen i VS Code.
I
.circleCardersätterwidthochheightmedmin-widthochmin-height.min-width: 200px; min-height: 200px;Spara visual.less.
Gör ditt visuella Power BI-objekt anpassningsbart
I det här avsnittet lägger du till möjligheten att anpassa ditt visuella objekt så att användarna kan göra ändringar i dess färg och kanttjocklek.
Lägga till färg och tjocklek i funktionsfilen
Lägg till färg och kanttjocklek i object egenskapen i capabilities.json.
Öppna capabilities.json från mappen reactCircleCard i VS Code.
Lägg till följande inställningar i egenskapen
objects."circle": { "properties": { "circleColor": { "type": { "fill": { "solid": { "color": true } } } }, "circleThickness": { "type": { "numeric": true } } } }Spara capabilities.json.
Lägga till en cirkelformateringsinställningsklass i inställningsfilen
Lägg till formateringsinställningarna Circle i settings.ts. Mer information om hur du skapar formateringsmodellinställningar finns i formateringsverktyg.
Öppna settings.ts från mappen src i VS Code.
Ersätt koden i settings.ts med följande kod:
"use strict"; import { formattingSettings } from "powerbi-visuals-utils-formattingmodel"; import FormattingSettingsCard = formattingSettings.SimpleCard; import FormattingSettingsSlice = formattingSettings.Slice; import FormattingSettingsModel = formattingSettings.Model; /** * Circle Formatting Card */ class CircleCardSettings extends FormattingSettingsCard { circleColor = new formattingSettings.ColorPicker({ name: "circleColor", // circle color name should match circle color property name in capabilities.json displayName: "Color", description: "The fill color of the circle.", show: true, value: { value: "white" } }); circleThickness = new formattingSettings.NumUpDown({ name: "circleThickness", // circle thickness name should match circle color property name in capabilities.json displayName: "Thickness", description: "The circle thickness.", show: true, value: 2 }); name: string = "circle"; // circle card name should match circle object name in capabilities.json displayName: string = "Circle"; show: boolean = true; slices: Array<FormattingSettingsSlice> = [this.circleColor, this.circleThickness]; } /** * visual settings model class * */ export class VisualFormattingSettingsModel extends FormattingSettingsModel { // Create formatting settings model circle formatting card circleCard = new CircleCardSettings(); cards = [this.circleCard]; }Spara settings.ts.
Lägga till en metod för att tillämpa visuella inställningar
Lägg till den getFormattingModel metod som används för att tillämpa visuella inställningar och nödvändiga importer till filen visual.ts .
Öppna visual.ts från mappen src i VS Code.
Lägg till dessa
importinstruktioner överst i visual.ts.import { FormattingSettingsService } from "powerbi-visuals-utils-formattingmodel"; import { VisualFormattingSettingsModel } from "./settings";Lägg till följande deklaration i Visual.
private formattingSettings: VisualFormattingSettingsModel; private formattingSettingsService: FormattingSettingsService;Lägg till metoden i
getFormattingModelVisual.public getFormattingModel(): powerbi.visuals.FormattingModel { return this.formattingSettingsService.buildFormattingModel(this.formattingSettings); }VisualI klassen lägger du till följande kodrad iconstructorför att initieraformattingSettingsServicethis.formattingSettingsService = new FormattingSettingsService();VisualI klassen lägger du till följande kodupdateför att uppdatera inställningarna för visuell formatering till de senaste formateringsegenskaperna.Lägg till den här koden i if-instruktionen efter
const size = Math.min(width, height);.this.formattingSettings = this.formattingSettingsService.populateFormattingSettingsModel(VisualFormattingSettingsModel, options.dataViews[0]); const circleSettings = this.formattingSettings.circleCard;Lägg till den här koden i
ReactCircleCard.updateeftersize:borderWidth: circleSettings.circleThickness.value, background: circleSettings.circleColor.value.value, }
Spara visual.ts.
Redigera komponentfilen
Redigera komponentfilen så att den kan återge ändringarna i det visuella objektets färg och kanttjocklek.
Öppna component.tsx från mappen src i VS Code.
Lägg till dessa värden i
State:background?: string, borderWidth?: numberrenderI -metoden ersätter du följande kodrader:const { textLabel, textValue, size } = this.state;med:const { textLabel, textValue, size, background, borderWidth } = this.state;const style: React.CSSProperties = { width: size, height: size };med:const style: React.CSSProperties = { width: size, height: size, background, borderWidth };
Spara component.tsx.
Granska dina ändringar
Experimentera med det visuella objektets färg och kanttjocklek, som du nu kan styra.
Kontrollera att
pbiviz startkörs och uppdatera det visuella objektet React Circle Card i Power BI-tjänst.Välj fliken Format och expandera Cirkel.
Justera det visuella objektets inställningar för färg och tjocklek och granska deras effekt på det visuella objektet.