Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Como desarrollador, puede crear sus propios objetos visuales de Power BI. Estos objetos visuales los puede utilizar usted, su organización o terceros.
En este tutorial, desarrollará un objeto visual de Power BI con React. El objeto visual muestra el valor de una medida con formato dentro de un círculo. El objeto visual tiene un tamaño adaptable y permite personalizar su configuración.
En este tutorial, obtendrá información sobre cómo:
- Crear un proyecto de desarrollo para el objeto visual.
- Desarrollar el objeto visual usando React.
- Configurar el objeto visual para procesar los datos.
- Configurar el objeto visual para que se adapte a los cambios de tamaño.
- Configurar valores de color y borde adaptables para el objeto visual.
Nota
Para obtener el código fuente completo de este objeto visual, vea la página sobre el objeto visual Circle Card de Power BI basado en React.
Requisitos previos
Antes de empezar a desarrollar el objeto visual de Power BI, compruebe que tiene todo lo que se indica en esta sección.
Una cuenta de Power BI Pro o Premium por usuario (PPU) . Si no la tiene, regístrese para obtener una versión de prueba gratuita.
Visual Studio Code (VS Code). VS Code es un entorno de desarrollo integrado (IDE) ideal para desarrollar aplicaciones JavaScript y TypeScript.
Windows PowerShell, versión 4 o posterior (para Windows). O Terminal (para Mac).
Un entorno listo para el desarrollo de un objeto visual de Power BI. Configure el entorno para el desarrollo de un objeto visual de Power BI.
En este tutorial se usa el informe US Sales Analysis. Puede descargar este informe y cargarlo en el servicio Power BI, o bien usar su propio informe. Si necesita más información sobre el servicio Power BI y la carga de archivos, consulte el tutorial Introducción a la creación en el servicio Power BI.
Creación de un proyecto de desarrollo
En esta sección, creará un proyecto para el objeto visual Circle Card de React.
Abra PowerShell y navegue hasta la carpeta en la que desea crear el proyecto.
Escriba el comando siguiente:
pbiviz new ReactCircleCard
Vaya a la carpeta del proyecto.
cd ReactCircleCard
Inicie el objeto visual Circle Card basado en React. Su objeto visual ahora se ejecuta mientras está hospedado en el equipo.
pbiviz start
Importante
Para detener la ejecución del objeto visual, en PowerShell, escriba Ctrl+C y, si el sistema le pregunta si desea terminar el trabajo por lotes, escriba Y y presione Entrar.
Visualización del objeto visual Circle Card de React en el servicio Power BI
Para probar el objeto visual en el servicio Power BI, usaremos el informe US Sales Analysis. Puede descargar este informe y cargarlo en servicio Power BI.
También puede usar su propio informe para probar el objeto visual.
Nota:
Antes de continuar, compruebe que ha habilitado el modo de desarrollador de objetos visuales.
Inicie sesión en PowerBI.com y abra el informe US Sales Analysis.
Seleccione Editar.
Cree una nueva página para realizar pruebas; para ello, haga clic en el botón Nueva página situado en la parte inferior de la interfaz del servicio Power BI.
Seleccione el Objeto visual de desarrollador en el panel Visualizaciones.
Este objeto visual representa el objeto visual personalizado que se está ejecutando en el equipo. Solo está disponible cuando está habilitada la opción de depuración de objetos visuales personalizados.
Compruebe que se ha agregado un objeto visual al lienzo del informe.
Este es un objeto visual simple que muestra el número de veces que se ha llamado al método update. En esta fase, el objeto visual todavía no recupera los datos.
Nota
Si el objeto visual muestra un mensaje de error de conexión, abra una nueva pestaña en el explorador, vaya a
https://localhost:8080/assets
y autorice al explorador para que use esta dirección.Mientras se selecciona el nuevo objeto visual, vaya al panel Datos , expanda Ventas y seleccione Cantidad.
Para probar cómo responde el objeto visual, cambie su tamaño y observe que el valor Recuento de actualizaciones: se incrementa cada vez que lo hace.
Configuración de React en el proyecto
En esta sección, verá cómo configurar React para el proyecto del objeto visual de Power BI.
Abra PowerShell y escriba Ctrl+C para detener la ejecución del objeto visual. Cuando el sistema le pregunte si desea terminar el trabajo por lotes, escriba S y presione Entrar.
Instalación de React
Para instalar las dependencias necesarias de React, abra PowerShell en la carpeta ReactCircleCard y ejecute el siguiente comando:
npm i react react-dom
Instalación de las definiciones de tipos de React
Para instalar las definiciones de tipos de React, abra PowerShell en la carpeta reactCircleCard y ejecute el siguiente comando:
npm i @types/react @types/react-dom
Creación de una clase de componente de React
Siga estos pasos para crear una clase de componente de React.
Abra VS Code y vaya a la carpeta reactCircleCard.
Seleccione Archivo>Nuevo archivo para crear un archivo nuevo.
Copie el siguiente código en el nuevo archivo.
import * as React from "react"; export class ReactCircleCard extends React.Component<{}>{ render(){ return ( <div className="circleCard"> Hello, React! </div> ) } } export default ReactCircleCard;
Seleccione Guardar como y vaya a la carpeta src.
Guarde el archivo como se indica a continuación:
- En el campo Nombre de archivo, escriba component.
- En el menú desplegable Guardar como tipo, seleccione TypeScript React.
Agregación de React al archivo del objeto visual
Reemplace el código del archivo visual.ts por código que permita el uso de React.
En la carpeta src, abra el archivo visual.ts y reemplace el código del archivo por el siguiente código:
"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) { } }
Nota
Puesto que la configuración predeterminada de TypeScript en Power BI no reconoce los archivos tsx de React, VS Code resalta
component
como un error.Para representar el componente, agregue el elemento HTML de destino al archivo visual.ts. Este elemento es
HTMLElement
enVisualConstructorOptions
, que se pasa al constructor.En la carpeta src, abra el archivo visual.ts.
Agregue el siguiente código a la clase
Visual
:
private target: HTMLElement; private reactRoot: React.ComponentElement<any, any>;
- Agregue las siguientes líneas al constructor
VisualConstructorOptions
:
this.reactRoot = React.createElement(ReactCircleCard, {}); this.target = options.element; ReactDOM.render(this.reactRoot, this.target);
Ahora el archivo visual.ts debería tener el siguiente aspecto:
"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) { } }
Guarde el archivo visual.ts.
Edición del archivo tsconfig
Edite el archivo tsconfig.json para que funcione con React.
En la carpeta reactCircleCard, abra el archivo tsconfig.json y agregue dos líneas al principio del elemento
compilerOptions
."jsx": "react", "types": ["react", "react-dom"],
Ahora el archivo tsconfig.json debería tener el siguiente aspecto y el error
component
de visual.ts debería haber desaparecido.{ "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" ] }
Guarde el archivo tsconfig.json.
Prueba del objeto visual
Abra PowerShell en la carpeta CircleCardVisual y ejecute el proyecto:
pbiviz start
Cuando agregue un nuevo objeto visual de desarrollador al informe en el servicio Power BI, tendrá el siguiente aspecto:
Configuración del campo de datos del objeto visual
Configure el archivo de características del objeto visual para que solo se pueda enviar un campo de datos al campo Measure Data del objeto visual.
En VS Code, en la carpeta reactCircleCard, abra el archivo capabilities.json.
ReactCircleCard
muestra un único valor,Measure Data
. Quite el objetoCategory Data
dedataRoles
.Después de quitar el objeto
Category Data
, la clavedataRoles
tiene el siguiente aspecto:"dataRoles": [ { "displayName": "Measure Data", "name": "measure", "kind": "Measure" } ],
Quite todo el contenido de la clave
objects
(lo rellenará más adelante).Después de quitarle el contenido, la clave
objects
tendrá el siguiente aspecto:"objects": {},
Reemplace la propiedad
dataViewMappings
por el código siguiente.max: 1
enmeasure
especifica que solo se puede enviar un campo de datos al campo Measure Data del objeto visual."dataViewMappings": [ { "conditions": [ { "measure": { "max": 1 } } ], "single": { "role": "measure" } } ]
Guarde los cambios que ha realizado en el archivo capabilities.json.
Compruebe que
pbiviz start
se esté ejecutando y, en el servicio Power BI, actualice el objeto visual React Circle Card. El campo Measure Data solo puede aceptar un campo de datos, como se especifica enmax: 1
.
Actualización del estilo del objeto visual
En esta sección, convertirá la forma del objeto visual en un círculo. Use el archivo visual.less para controlar el estilo del objeto visual.
Desde la carpeta style, abra el archivo visual.less.
Reemplace el contenido de visual.less por el siguiente código.
.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; }
Guarde el archivo visual.less.
Configuración del objeto visual para que reciba las propiedades de Power BI
En esta sección, configurará el elemento visual para que reciba datos de Power BI y envíe actualizaciones a las instancias del archivo component.tsx.
Representación de los datos mediante React
Puede representar datos mediante React. El componente puede mostrar los datos de su propio estado.
En VS Code, en la carpeta reactCircleCard, abra el archivo component.tsx.
Reemplace el contenido de component.tsx por el siguiente código.
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> ) } }
Guarde el archivo component.tsx.
Configuración del objeto visual para recibir datos
Los objetos visuales reciben los datos como un argumento del método update
. En esta sección, actualizará este método para recibir datos.
El código siguiente selecciona textLabel
y textValue
de DataView
y, si los datos existen, actualizará el estado del componente.
En VS Code, en la carpeta src, abra el archivo visual.ts.
Reemplace la línea
import ReactCircleCard from "./component";
con el código siguiente:import { ReactCircleCard, initialState } from "./component";
Agregue el siguiente código al método
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(); }
Cree un método
clear
agregando el siguiente código delante del métodoupdate
.private clear() { ReactCircleCard.update(initialState); }
Guarde el archivo visual.ts.
Configuración del objeto visual para enviar datos
En esta sección, actualizará el objeto visual para enviar actualizaciones a las instancias del archivo component.
En VS Code, en la carpeta src, abra el archivo component.tsx.
Agregue el siguiente código a la clase
ReactCircleCard
: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; }
Guarde el archivo component.tsx.
Visualización de los cambios realizados en el objeto visual
Pruebe el objeto visual Circle Card basado en React para ver los cambios que ha realizado.
Compruebe que
pbiviz start
se esté ejecutando y, en el servicio Power BI, actualice el objeto visual React Circle Card.Agregue Sales al campo Measure Data del objeto visual.
Configuración del objeto visual para que se le pueda cambiar el tamaño
Actualmente, el objeto visual tiene un ancho y un alto fijos. Para cambiar el tamaño del objeto visual, debe definir la variable size
en los archivos visual.ts y component.tsx. En esta sección, configurará el objeto visual para que se le pueda cambiar el tamaño.
Después de realizar los pasos descritos en esta sección, el diámetro del círculo del objeto visual será el tamaño mínimo de ancho o alto, y podrá cambiarle el tamaño en el servicio Power BI.
Configuración del archivo visual.ts
Obtenga el tamaño actual de la ventanilla del objeto visual a partir del objeto options
.
En VS Code, en la carpeta src, abra el archivo visual.ts.
Inserte este código para importar la interfaz
IViewport
.import IViewport = powerbi.IViewport;
Agregue la propiedad
viewport
a la clasevisual
.private viewport: IViewport;
En el método
update
, antes deReactCircleCard.update
, agregue el siguiente código.this.viewport = options.viewport; const { width, height } = this.viewport; const size = Math.min(width, height);
En el método
update
, enReactCircleCard.update
, agreguesize
.size,
Guarde el archivo visual.ts.
Configuración del archivo component.tsx
En VS Code, en la carpeta src, abra el archivo component.tsx.
Agregue el siguiente código a
export interface State
.size: number
Agregue el siguiente código a
export const initialState: State
.size: 200
En el método
render
, realice los siguientes cambios en el código:Agregue
size
aconst { textLabel, textValue, size } = this.state;
. Ahora esta declaración debería tener el siguiente aspecto:const { textLabel, textValue, size } = this.state;
Agregue el siguiente código encima de
return
.const style: React.CSSProperties = { width: size, height: size };
Reemplace la primera línea return
<div className="circleCard">
por:<div className="circleCard" style={style}>
Guarde el archivo component.tsx.
Configuración del archivo del objeto visual
En VS Code, en la carpeta style, abra el archivo visual.less.
En
.circleCard
, reemplacewidth
yheight
pormin-width
ymin-height
.min-width: 200px; min-height: 200px;
Guarde el archivo visual.less.
Hacer que el objeto visual de Power BI sea personalizable
En esta sección, agregará la capacidad para personalizar el objeto visual, de modo que los usuarios puedan cambiarle el color y el grosor del borde.
Agregación del color y el grosor al archivo de características
Agregue el color y el grosor del borde a la propiedad object
en el archivo capabilities.json.
En VS Code, en la carpeta reactCircleCard, abra el archivo capabilities.json.
Agregue las siguientes configuraciones a la propiedad
objects
."circle": { "properties": { "circleColor": { "type": { "fill": { "solid": { "color": true } } } }, "circleThickness": { "type": { "numeric": true } } } }
Abra el archivo capabilities.json.
Incorporación de una clase de configuración de formato Circle al archivo de configuración
Agregue la configuración de formato Circle
a settings.ts. Para obtener más información sobre cómo crear la configuración del modelo de formato, consulte las utilidades de formato.
En VS Code, en la carpeta src, abra el archivo settings.ts.
Reemplace el código de settings.ts por el siguiente:
"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]; }
Guarde el archivo settings.ts.
Agregación de un método para aplicar la configuración del objeto visual
Agregue el método getFormattingModel
, que se usa para aplicar la configuración del objeto visual, y las importaciones necesarias en el archivo visual.ts.
En VS Code, en la carpeta src, abra el archivo visual.ts.
Agregue estas instrucciones
import
al principio del archivo visual.ts.import { FormattingSettingsService } from "powerbi-visuals-utils-formattingmodel"; import { VisualFormattingSettingsModel } from "./settings";
Agregue la siguiente declaración a Visual.
private formattingSettings: VisualFormattingSettingsModel; private formattingSettingsService: FormattingSettingsService;
Agregue el método
getFormattingModel
a Visual.public getFormattingModel(): powerbi.visuals.FormattingModel { return this.formattingSettingsService.buildFormattingModel(this.formattingSettings); }
En la clase
Visual
, agregue la siguiente línea de código aconstructor
para inicializarformattingSettingsService
.this.formattingSettingsService = new FormattingSettingsService();
En la clase
Visual
, agregue el código siguiente aupdate
para actualizar la configuración de formato del objeto visual a los valores de propiedad de formato más recientes.Agregue este código a la instrucción if después de
const size = Math.min(width, height);
.this.formattingSettings = this.formattingSettingsService.populateFormattingSettingsModel(VisualFormattingSettingsModel, options.dataViews[0]); const circleSettings = this.formattingSettings.circleCard;
Agregue este código a
ReactCircleCard.update
después desize
:borderWidth: circleSettings.circleThickness.value, background: circleSettings.circleColor.value.value, }
Guarde el archivo visual.ts.
Edición del archivo component
Edite el archivo component para que pueda representar los cambios de color y grosor del borde del objeto visual.
En VS Code, en la carpeta src, abra el archivo component.tsx.
Agregue estos valores a
State
:background?: string, borderWidth?: number
En el método
render
, reemplace las siguientes líneas de código:const { textLabel, textValue, size } = this.state;
por:const { textLabel, textValue, size, background, borderWidth } = this.state;
const style: React.CSSProperties = { width: size, height: size };
por:const style: React.CSSProperties = { width: size, height: size, background, borderWidth };
Guarde el archivo component.tsx.
Revisar los cambios
Experimente con el color y el grosor del borde del objeto visual, que ahora puede controlar.
Compruebe que
pbiviz start
se esté ejecutando y, en el servicio Power BI, actualice el objeto visual React Circle Card.Seleccione la pestaña Formato y expanda Circle.
Ajuste los valores de Color y Thickness del objeto visual, y revise el efecto en el objeto.