Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Разработчик может создавать собственные визуальные элементы Power BI. Эти визуальные элементы могут использоваться вами, вашей организацией или сторонними лицами.
В этом руководстве описано, как разработать визуальный элемент Power BI с помощью React. Визуальный элемент отображает форматируемое значение меры внутри круга. Визуальный элемент имеет адаптивный размер и позволяет настраивать его параметры.
В этом руководстве описано следующее:
- Создайте проект разработки для визуального элемента.
- Разработка визуального элемента с помощью React.
- Настройте визуальный элемент для обработки данных.
- Настройте визуальный элемент для адаптации к изменениям размера.
- Настройте адаптивные параметры цвета и границы для визуального элемента.
Примечание.
Полный исходный код этого визуального элемента см . в визуальном элементе React Circle Card Power BI.
Необходимые компоненты
Прежде чем приступить к разработке визуального элемента Power BI, убедитесь, что у вас есть все, что указано в этом разделе.
Учетная запись Power BI Pro или Premium на пользователя (PPU). Если у вас ее нет, зарегистрируйтесь, чтобы воспользоваться бесплатной пробной версией.
Visual Studio Code (VS Code); VS Code — это идеальная интегрированная среда разработки (IDE) для разработки приложений JavaScript и TypeScript.
Windows PowerShell версии 4 или более поздней версии (для Windows). Или терминал (для Mac).
Среда, готовая к разработке визуального элемента Power BI. Настройте среду для разработки визуального элемента Power BI.
В этом руководстве используется отчет по анализу продаж США. Вы можете скачать этот отчет и отправить его в служба Power BI или использовать собственный отчет. Если вам нужна дополнительная информация о служба Power BI и отправке файлов, ознакомьтесь с руководством по созданию служба Power BI.
Создание проекта разработки
В этом разделе описано, как создать проект для визуального элемента карточки "Круг React".
Откройте PowerShell и перейдите в папку, в которой вы хотите создать проект.
Введите следующую команду:
pbiviz new ReactCircleCardПерейдите в папку проекта.
cd ReactCircleCardЗапустите визуальный элемент карточки круга React. Теперь визуальный элемент запущен во время размещения на компьютере.
pbiviz startВнимание
Чтобы остановить запуск визуального элемента, в PowerShell введите CTRL+ и при появлении запроса на завершение пакетного задания, введите Y и нажмите клавишу ВВОД.
Просмотр карточки круга React в служба Power BI
Чтобы протестировать визуальный элемент в служба Power BI, мы будем использовать отчет по анализу продаж в США. Вы можете скачать этот отчет и отправить его в служба Power BI.
Вы также можете использовать собственный отчет для тестирования визуального элемента.
Примечание.
Прежде чем продолжить, убедитесь, что вы включили режим разработчика визуальных элементов.
Войдите в PowerBI.com и откройте отчет по анализу продаж США.
Выберите Изменить.
Создайте новую страницу для тестирования, нажав кнопку "Создать страницу" в нижней части интерфейса служба Power BI.
В области "Визуализации" выберите визуальный элемент разработчика.
Этот визуальный элемент представляет пользовательский визуальный элемент, запущенный на компьютере. Он доступен только в том случае, если включен пользовательский параметр визуальной отладки .
Убедитесь, что визуальный элемент добавлен на холст отчета.
Это простой визуальный элемент, отображающий количество вызовов метода обновления. На этом этапе визуальный элемент не получает никаких данных.
Примечание.
Если визуальный элемент отображает сообщение об ошибке подключения, откройте новую вкладку в браузере, перейдите
https://localhost:8080/assetsк браузеру и авторизации браузера для использования этого адреса.
Пока выбран новый визуальный элемент, перейдите в область данных , разверните узел "Продажи" и выберите "Количество".
Чтобы проверить, как визуальный элемент отвечает, измените его размер и обратите внимание, что значение счетчика обновлений увеличивается при каждом изменении размера визуального элемента.
Настройка React в проекте
В этом разделе описано, как настроить React для визуального проекта Power BI.
Откройте PowerShell и остановите работу визуального элемента, введя ctrl+C. Если появится запрос на завершение пакетного задания, введите Y и нажмите клавишу ВВОД.
Установка React
Чтобы установить необходимые зависимости React, откройте PowerShell в папке ReactCircleCard и выполните следующую команду:
npm i react react-dom
Установка определений типов React
Чтобы установить определения типов для React, откройте PowerShell в папке ReactCircleCard и выполните следующую команду:
npm i @types/react @types/react-dom
Создание класса компонента React
Выполните следующие действия, чтобы создать класс компонента React.
Откройте VS Code и перейдите в папку ReactCircleCard .
Создайте файл, выбрав >"Создать файл".
Скопируйте следующий код в новый файл.
import * as React from "react"; export class ReactCircleCard extends React.Component<{}>{ render(){ return ( <div className="circleCard"> Hello, React! </div> ) } } export default ReactCircleCard;Выберите "Сохранить как" и перейдите в папку src .
Сохраните файл следующим образом:
- В поле имени файла введите компонент.
- В раскрывающемся меню "Сохранить как тип" выберите TypeScript React.
Добавление React в визуальный файл
Замените код в файле visual.ts кодом, который позволяет использовать React.
В папке src откройте visual.ts и замените код в файле следующим кодом:
"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) { } }Примечание.
Так как параметры Power BI TypeScript по умолчанию не распознают файлы React tsx , VS Code выделяется
componentкак ошибка.Чтобы отобразить компонент, добавьте целевой ЭЛЕМЕНТ HTML в visual.ts. Этот элемент находится в
HTMLElementконструкторе, который передаетсяVisualConstructorOptionsв конструктор.В папке src откройте visual.ts.
Добавьте в класс
Visualследующий код.
private target: HTMLElement; private reactRoot: React.ComponentElement<any, any>;- Добавьте в конструктор следующие строки
VisualConstructorOptions:
this.reactRoot = React.createElement(ReactCircleCard, {}); this.target = options.element; ReactDOM.render(this.reactRoot, this.target);Теперь файл visual.ts должен выглядеть следующим образом:
"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) { } }Сохраните visual.ts.
Изменение файла tsconfig
Измените tsconfig.json для работы с React.
В папке ReactCircleCard откройте tsconfig.json и добавьте две строки в начало
compilerOptionsэлемента."jsx": "react", "types": ["react", "react-dom"],Теперь файл tsconfig.json должен выглядеть следующим образом, и
componentошибка в visual.ts должна быть удалена.{ "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" ] }Сохраните tsconfig.json.
Тестирование визуального элемента
Откройте PowerShell в папке CircleCardVisual и запустите проект:
pbiviz start
При добавлении нового визуального элемента разработчика в отчет в служба Power BI выглядит следующим образом:
Настройка поля данных визуального элемента
Настройте файл возможностей визуального элемента, чтобы отправить только одно поле данных в поле данных измерения визуального элемента.
В VS Code в папке ReactCircleCard откройте capabilities.json.
Отображается
ReactCircleCardодно значение.Measure DataCategory DataУдалите объект изdataRoles.После удаления
Category DataобъектаdataRolesключ выглядит следующим образом:"dataRoles": [ { "displayName": "Measure Data", "name": "measure", "kind": "Measure" } ],Удалите все содержимое
objectsключа (вы заполните его позже).После удаления содержимого
objectsключ выглядит следующим образом:"objects": {},Замените
dataViewMappingsсвойство следующим кодом.max: 1вmeasureполе данных меры визуального элемента можно отправить только одно поле данных."dataViewMappings": [ { "conditions": [ { "measure": { "max": 1 } } ], "single": { "role": "measure" } } ]Сохраните внесенные изменения в capabilities.json.
Убедитесь, что
pbiviz startвыполняется и в служба Power BI, обновите визуальный элемент React Circle Card. Поле данных Measure может принимать только одно поле данных , как указано вmax: 1разделе .
Обновление стиля визуального элемента
В этом разделе фигура визуального элемента превращается в круг. Используйте файл visual.less для управления стилем визуального элемента.
В папке стилей откройте visual.less.
Замените содержимое visual.less следующим кодом.
.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; }Сохраните visual.less.
Настройка визуального элемента для получения свойств из Power BI
В этом разделе описана настройка визуального элемента для получения данных из Power BI и отправки обновлений экземплярам в файле component.tsx .
Отрисовка данных с помощью React
Данные можно отобразить с помощью React. Компонент может отображать данные из собственного состояния.
В VS Code из папки ReactCircleCard откройте component.tsx.
Замените содержимое component.tsx следующим кодом.
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> ) } }Сохраните component.tsx.
Настройка визуального элемента для получения данных
Визуальные элементы получают данные в качестве аргумента update метода. В этом разделе описано, как обновить этот метод для получения данных.
Следующий код выбирает и textLabel из textValueDataViewнее, а если данные существуют, обновляет состояние компонента.
В VS Code в папке src откройте visual.ts.
Замените строку
import ReactCircleCard from "./component";следующим кодом:import { ReactCircleCard, initialState } from "./component";Добавьте следующий код в метод
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(); }clearСоздайте метод, добавив следующий код под методомupdate.private clear() { ReactCircleCard.update(initialState); }Сохранение visual.ts
Настройка визуального элемента для отправки данных
В этом разделе вы обновите визуальный элемент для отправки обновлений экземплярам в файле компонента .
В VS Code в папке src откройте component.tsx.
Добавьте в класс
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; }Сохраните component.tsx.
Просмотр изменений визуального элемента
Проверьте визуальный элемент "Карточка круга React", чтобы просмотреть внесенные изменения.
Убедитесь, что
pbiviz startвыполняется и в служба Power BI обновите визуальный элемент React Circle Card.Добавьте продажи в поле данных измерения визуального элемента.
Сделать визуальный элемент изменяемым
В настоящее время визуальный элемент имеет фиксированную ширину и высоту. Чтобы сделать визуальный элемент измененным, необходимо определить size переменную как в visual.ts, так и в файлах component.tsx. В этом разделе описано, как изменить размер визуального элемента.
После выполнения действий, описанных в этом разделе, диаметр круга в визуальном элементе будет соответствовать минимальной ширине или высоте, и вы сможете изменить его размер в служба Power BI.
Настройка файла visual.ts
Получение текущего размера визуального окна представления из options объекта.
В VS Code в папке src откройте visual.ts.
Вставьте этот код для импорта
IViewportинтерфейса.import IViewport = powerbi.IViewport;viewportДобавьте свойство вvisualкласс.private viewport: IViewport;В методе
updateдобавьтеReactCircleCard.updateследующий код.this.viewport = options.viewport; const { width, height } = this.viewport; const size = Math.min(width, height);В методе
updateReactCircleCard.updateдобавьтеsize.size,Сохраните visual.ts.
Настройка файла component.tsx
В VS Code в папке src откройте component.tsx.
Добавьте в раздел
export interface Stateследующий код.size: numberДобавьте в раздел
export const initialState: Stateследующий код.size: 200В методе
renderвнесите следующие изменения в код:Добавлен
sizeвconst { textLabel, textValue, size } = this.state;. Теперь это объявление должно выглядеть следующим образом:const { textLabel, textValue, size } = this.state;Добавьте приведенный выше
returnкод.const style: React.CSSProperties = { width: size, height: size };Замените первую возвращаемую строку
<div className="circleCard">следующим:<div className="circleCard" style={style}>
Сохраните component.tsx.
Настройка визуального файла
В VS Code в папке стилей откройте visual.less.
В
.circleCard, заменяйтеwidthиheightmin-widthmin-heightна .min-width: 200px; min-height: 200px;Сохраните visual.less.
Настройка визуального элемента Power BI
В этом разделе вы добавите возможность настраивать визуальный элемент, позволяя пользователям вносить изменения в его цвет и толщину границы.
Добавление цвета и толщины в файл возможностей
Добавьте толщину цвета и границы object в свойство в capabilities.json.
В VS Code в папке ReactCircleCard откройте capabilities.json.
Добавьте следующие параметры в
objectsсвойство."circle": { "properties": { "circleColor": { "type": { "fill": { "solid": { "color": true } } } }, "circleThickness": { "type": { "numeric": true } } } }Сохраните capabilities.json.
Добавление класса параметров форматирования круга в файл параметров
Circle Добавьте параметры форматирования в settings.ts. Дополнительные сведения о создании параметров модели форматирования см. в разделе "Использование форматирования".
В VS Code в папке src откройте settings.ts.
Замените код в settings.ts следующим кодом:
"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]; }Сохраните settings.ts.
Добавление метода для применения визуальных параметров
Добавьте метод, используемый getFormattingModel для применения визуальных параметров и необходимых импортов в файл visual.ts .
В VS Code в папке src откройте visual.ts.
Добавьте эти
importинструкции в верхней части visual.ts.import { FormattingSettingsService } from "powerbi-visuals-utils-formattingmodel"; import { VisualFormattingSettingsModel } from "./settings";Добавьте следующее объявление в Visual.
private formattingSettings: VisualFormattingSettingsModel; private formattingSettingsService: FormattingSettingsService;Добавьте метод в
getFormattingModelVisual.public getFormattingModel(): powerbi.visuals.FormattingModel { return this.formattingSettingsService.buildFormattingModel(this.formattingSettings); }VisualВ классе добавьте следующую строку кода дляconstructorинициализацииformattingSettingsServicethis.formattingSettingsService = new FormattingSettingsService();VisualВ классе добавьте следующий код, чтобыupdateобновить параметры визуального форматирования до последних значений свойств форматирования.Добавьте этот код в инструкцию if после
const size = Math.min(width, height);.this.formattingSettings = this.formattingSettingsService.populateFormattingSettingsModel(VisualFormattingSettingsModel, options.dataViews[0]); const circleSettings = this.formattingSettings.circleCard;Добавьте этот код в следующее
ReactCircleCard.updatesize:borderWidth: circleSettings.circleThickness.value, background: circleSettings.circleColor.value.value, }
Сохраните visual.ts.
Изменение файла компонента
Измените файл компонента, чтобы он смог отобразить изменения цвета и границы визуального элемента.
В VS Code в папке src откройте component.tsx.
Добавьте следующие значения
Stateв :background?: string, borderWidth?: numberВ методе замените
renderследующие строки кода:const { textLabel, textValue, size } = this.state;с:const { textLabel, textValue, size, background, borderWidth } = this.state;const style: React.CSSProperties = { width: size, height: size };с:const style: React.CSSProperties = { width: size, height: size, background, borderWidth };
Сохраните component.tsx.
Просмотр изменений
Экспериментируйте с цветом и толщиной границы визуального элемента, который теперь можно контролировать.
Убедитесь, что
pbiviz startвыполняется и в служба Power BI обновите визуальный элемент React Circle Card.Выберите вкладку "Формат" и разверните "Круг".
Настройте параметры цвета и толщины визуального элемента и просмотрите их влияние на визуальный элемент.