Aracılığıyla paylaş


Öğretici: React kullanarak Power BI görseli oluşturma

Geliştirici olarak kendi Power BI görsellerinizi oluşturabilirsiniz. Bu görseller siz, kuruluşunuz veya üçüncü taraflar tarafından kullanılabilir.

Bu öğreticide React kullanarak bir Power BI görseli geliştirebilirsiniz. Görsel, daire içinde biçimlendirilmiş bir ölçü değeri görüntüler. Görselin uyarlamalı boyutu vardır ve ayarlarını özelleştirmenize olanak tanır.

Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

  • Görseliniz için bir geliştirme projesi oluşturun.
  • React kullanarak görselinizi geliştirin.
  • Görselinizi verileri işecek şekilde yapılandırın.
  • Görselinizi boyut değişikliklerine uyum sağlayacak şekilde yapılandırın.
  • Görseliniz için uyarlamalı renk ve kenarlık ayarlarını yapılandırın.

Not

Bu görselin tam kaynak kodu için bkz . React daire kartı Power BI görseli.

Önkoşullar

Power BI görselinizi geliştirmeye başlamadan önce bu bölümde her şeyin listelendiğini doğrulayın.

Geliştirme projesi oluşturma

Bu bölümde React daire kartı görseli için bir proje oluşturacaksınız.

  1. PowerShell'i açın ve projenizi oluşturmak istediğiniz klasöre gidin.

  2. Aşağıdaki komutu girin:

    pbiviz new ReactCircleCard
    
  3. Projenin klasörüne gidin.

    cd ReactCircleCard
    
  4. React daire kartı görselini başlatın. Görseliniz artık bilgisayarınızda barındırılırken çalışıyor.

    pbiviz start
    

    Önemli

    Görselin çalışmasını durdurmak için PowerShell'de Ctrl+ girin ve toplu işi sonlandırmanız istenirse Y girin ve Enter tuşuna basın.

Power BI hizmeti React daire kartını görüntüleme

Görseli Power BI hizmeti test etmek için ABD Satış Analizi raporunu kullanacağız. Bu raporu indirebilir ve Power BI hizmeti yükleyebilirsiniz.

Görseli test etmek için kendi raporunuzu da kullanabilirsiniz.

Not

Devam etmeden önce görsel geliştirici modunu etkinleştirdiğinizden emin olun.

  1. PowerBI.com oturum açın ve ABD Satış Analizi raporunu açın.

  2. Düzenle'yi seçin.

    Power BI hizmeti düzenleme seçeneğinin ekran görüntüsü.

  3. Power BI hizmeti arabiriminin en altındaki Yeni sayfa düğmesine tıklayarak test için yeni bir sayfa oluşturun.

    Power BI hizmeti'daki yeni sayfa düğmesinin ekran görüntüsü.

  4. Görselleştirmeler bölmesinde Geliştirici Görseli'ni seçin.

    Görselleştirmeler bölmesindeki geliştirici görselinin ekran görüntüsü.

    Bu görsel, bilgisayarınızda çalıştırdığınız özel görseli temsil eder. Yalnızca özel görsel hata ayıklama ayarı etkinleştirildiğinde kullanılabilir.

  5. Rapor tuvaline bir görsel eklendiğini doğrulayın.

    Rapora eklenen yeni görselin ekran görüntüsü.

    Bu, güncelleştirme yönteminin çağrılma sayısını gösteren basit bir görseldir. Bu aşamada görsel herhangi bir veri almaz.

    Not

    Görsel bağlantı hata iletisi görüntülerse, tarayıcınızda yeni bir sekme açın, adresine https://localhost:8080/assetsgidin ve tarayıcınızı bu adresi kullanması için yetki verin.

    Bağlantı hatası görüntüleyen yeni görselin ekran görüntüsü.

  6. Yeni görsel seçiliyken Veri bölmesine gidin, Satış'ı genişletin ve Miktar'ı seçin.

    ABD satış analizi raporundaki satış tablosundaki Power BI hizmeti miktar alanının ekran görüntüsü.

  7. Görselin nasıl yanıt verdiğini test etmek için görseli yeniden boyutlandırın ve görseli her yeniden boyutlandırdığınızda Güncelleştirme sayısı değerinin arttığını fark edin.

    Yeniden boyutlandırıldıktan sonra farklı bir güncelleştirme sayısı numarası görüntüleyen yeni görselin ekran görüntüsü.

Projenizde React'i ayarlama

Bu bölümde Power BI görsel projeniz için React'i ayarlamayı öğreneceksiniz.

PowerShell'i açın ve Ctrl+C tuşlarına basarak görselin çalışmasını durdurun. Toplu işi sonlandırmanız istenirse Y girin ve Enter tuşuna basın.

React'i yükleme

Gerekli React bağımlılıklarını yüklemek için ReactCircleCard klasörünüzde PowerShell'i açın ve aşağıdaki komutu çalıştırın:

npm i react react-dom

React türü tanımlarını yükleme

React için tür tanımlarını yüklemek için reactCircleCard klasörünüzde PowerShell'i açın ve aşağıdaki komutu çalıştırın:

npm i @types/react @types/react-dom

React bileşen sınıfı oluşturma

React bileşen sınıfı oluşturmak için bu adımları izleyin.

  1. VS Code'ı açın ve reactCircleCard klasörüne gidin.

  2. Yeni Dosya Oluştur'u seçerek yeni bir dosya oluşturun.>

  3. Aşağıdaki kodu yeni dosyaya kopyalayın.

    import * as React from "react";
    
    export class ReactCircleCard extends React.Component<{}>{
        render(){
            return (
                <div className="circleCard">
                    Hello, React!
                </div>
            )
        }
    }
    
    export default ReactCircleCard;
    
  4. Farklı Kaydet'i seçin ve src klasörüne gidin.

  5. Dosyayı aşağıdaki gibi kaydedin:

    • Dosya adı alanına bileşen girin.
    • Kayıt türü açılan menüsünde TypeScript React'i seçin.

Görsel dosyaya React ekleme

visual.ts dosyasındaki kodu React'in kullanılmasını sağlayan kodla değiştirin.

  1. src klasöründe visual.ts açın ve dosyadaki kodu aşağıdaki kodla değiştirin:

    "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) {
    
        }
    }
    

    Not

    Varsayılan Power BI TypeScript ayarları React tsx dosyalarını tanımadığı için VS Code hata olarak vurgulanır component .

  2. Bileşeni işlemek için hedef HTML öğesini visual.ts ekleyin. Bu HTMLElement öğe, oluşturucuya geçirilen içindedir VisualConstructorOptions.

    1. src klasöründe visual.ts açın.

    2. Sınıfına Visual aşağıdaki kodu ekleyin:

    private target: HTMLElement;
    private reactRoot: React.ComponentElement<any, any>;
    
    1. Oluşturucuya VisualConstructorOptions aşağıdaki satırları ekleyin:
    this.reactRoot = React.createElement(ReactCircleCard, {});
    this.target = options.element;
    
    ReactDOM.render(this.reactRoot, this.target);
    

    visual.ts dosyanız şu şekilde görünmelidir:

    "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) {
    
        }
    }
    
  3. visual.ts kaydedin.

tsconfig dosyasını düzenleme

React ile çalışmak için tsconfig.json düzenleyin.

  1. reactCircleCard klasöründe tsconfig.json açın ve öğenin başına compilerOptions iki satır ekleyin.

    "jsx": "react",
    "types": ["react", "react-dom"],
    

    tsconfig.json dosyanız şimdi şöyle görünmelidir ve visual.tscomponentgiderilmelidir.

    {
        "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"
        ]
    }
    
  2. tsconfig.json kaydedin.

Görselinizi test edin

CircleCardVisual klasöründe PowerShell'i açın ve projenizi çalıştırın:

pbiviz start

Power BI hizmeti raporunuza yeni bir Geliştirici Görseli eklediğinizde şöyle görünür:

Power BI hizmetinde yeni oluşturulan geliştirici görselindeki hello React iletisini gösteren ekran görüntüsü.

Görselinizin veri alanını yapılandırma

Görselinizin yetenek dosyasını, görselin Veri ölçme alanına yalnızca bir veri alanı gönderilecek şekilde yapılandırın.

  1. VS Code'da reactCircleCard klasöründen capabilities.json açın.

  2. , ReactCircleCard tek bir değer görüntüler: Measure Data. Category Data nesnesini öğesinden dataRoleskaldırın.

    Nesne Category Data kaldırıldıktan dataRoles sonra anahtar şöyle görünür:

    "dataRoles": [
        {
            "displayName": "Measure Data",
            "name": "measure",
            "kind": "Measure"
        }
    ],
    
  3. Anahtarın tüm içeriğini objects kaldırın (daha sonra doldurursunuz).

    İçeriğini objects kaldırdıktan sonra anahtar şöyle görünür:

    "objects": {},
    
  4. dataViewMappings özelliğini aşağıdaki kodla değiştirin. max: 1 içinde measure , görselin Ölçü veri alanına yalnızca bir veri alanının gönderilebileceğini belirtir.

    "dataViewMappings": [
        {
            "conditions": [
                {
                    "measure": {
                        "max": 1
                    }
                }
            ],
            "single": {
                "role": "measure"
            }
        }
    ]
    
  5. capabilities.json yaptığınız değişiklikleri kaydedin.

  6. pbiviz start Power BI hizmeti çalıştığını doğrulayın ve React Circle Card görselinizi yenileyin. Ölçü verileri alanı, tarafından max: 1belirtildiği gibi yalnızca bir veri alanını kabul edebilir.

    Power BI hizmetindeki react daire kartındaki ölçü Veri alanını gösteren ekran görüntüsü.

Görselin stilini güncelleştirme

Bu bölümde görselin şeklini daireye dönüştürebilirsiniz. Görselinizin stilini denetlemek için visual.less dosyasını kullanın.

  1. Stil klasöründe visual.less dosyasını açın.

  2. visual.less dosyasının içeriğini aşağıdaki kodla değiştirin.

    .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;
    }
    
  3. Görseli kaydedin.daha az.

Görselinizi Power BI'dan özellik alacak şekilde ayarlama

Bu bölümde görseli Power BI'dan veri alacak ve component.tsx dosyasındaki örneklere güncelleştirme gönderecek şekilde yapılandıracaksınız.

React kullanarak verileri işleme

React kullanarak verileri işleyebilirsiniz. Bileşen verileri kendi durumundan görüntüleyebilir.

  1. VS Code'da reactCircleCard klasöründen component.tsx dosyasını açın.

  2. component.tsx dosyasının içeriğini aşağıdaki kodla değiştirin.

    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>
            )
        }
    }
    
  3. component.tsx dosyasını kaydedin.

Görselinizi veri alacak şekilde ayarlama

Görseller, yöntemin update bağımsız değişkeni olarak veri alır. Bu bölümde, veri almak için bu yöntemi güncelleştirin.

Aşağıdaki kod ve öğesini textLabelseçer textValueDataView ve veriler varsa bileşen durumunu güncelleştirir.

  1. VS Code'da, src klasöründen visual.ts açın.

  2. satırını import ReactCircleCard from "./component"; aşağıdaki kodla değiştirin:

    import { ReactCircleCard, initialState } from "./component";
    
  3. Aşağıdaki kodu update yöntemine ekleyin.

    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();
    }
    
  4. yönteminin altına clear aşağıdaki kodu ekleyerek bir update yöntem oluşturun.

    private clear() {
        ReactCircleCard.update(initialState);
    }
    
  5. visual.ts Kaydet

Görselinizi veri gönderecek şekilde ayarlama

Bu bölümde, bileşen dosyasındaki örneklere güncelleştirme göndermek için görseli güncelleştirin.

  1. VS Code'da, src klasöründen component.tsx dosyasını açın.

  2. Sınıfına ReactCircleCard aşağıdaki kodu ekleyin:

    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;
    }
    
  3. component.tsx dosyasını kaydedin.

Görseldeki değişiklikleri görüntüleme

Yaptığınız değişiklikleri görüntülemek için React Circle Card görselinizi test edin.

  1. pbiviz start Çalıştığını doğrulayın ve Power BI hizmeti React Circle Card görselinizi yenileyin.

  2. Görselin Ölçü verileri alanına Sales ekleyin.

Power BI hizmeti react daire kartı görselinde görüntülenen satış değerinin ekran görüntüsü.

Görselinizi yeniden boyutlandırılabilir hale getirme

Şu anda görselinizin genişliği ve yüksekliği sabit. Görseli yeniden boyutlandırılabilir hale getirmek için değişkeni hem visual.ts sizecomponent.tsx dosyalarında tanımlamanız gerekir. Bu bölümde görseli yeniden boyutlandırılabilir hale getireceksiniz.

Bu bölümde açıklanan adımları tamamladıktan sonra, görselinizin daire çapı minimum genişlik veya yükseklik boyutuna karşılık gelir ve Power BI hizmeti yeniden boyutlandırabilirsiniz.

visual.ts dosyasını yapılandırma

Nesneden options görsel görünüm penceresi geçerli boyutunu alın.

  1. VS Code'da, src klasöründen visual.ts açın.

  2. Arabirimi içeri aktarmak IViewport için bu kodu ekleyin.

    import IViewport = powerbi.IViewport;
    
  3. viewport özelliğini sınıfına visual ekleyin.

    private viewport: IViewport;
    
  4. yönteminde update , öncesinde ReactCircleCard.updateaşağıdaki kodu ekleyin.

    this.viewport = options.viewport;
    const { width, height } = this.viewport;
    const size = Math.min(width, height);
    
  5. yönteminde update , içine ReactCircleCard.updateekleyin size.

    size,
    
  6. visual.ts kaydedin.

component.tsx dosyasını yapılandırma

  1. VS Code'da, src klasöründen component.tsx dosyasını açın.

  2. Aşağıdaki kodu export interface State içine ekleyin.

    size: number
    
  3. Aşağıdaki kodu export const initialState: State içine ekleyin.

    size: 200
    
  4. yönteminde render kodda aşağıdaki değişiklikleri yapın:

    1. size'yi const { textLabel, textValue, size } = this.state;'ye ekle. Bu bildirim şimdi şöyle görünmelidir:

      const { textLabel, textValue, size } = this.state;
      
    2. Yukarıdaki returnaşağıdaki kodu ekleyin.

      const style: React.CSSProperties = { width: size, height: size };
      
    3. İlk dönüş satırını <div className="circleCard"> şununla değiştirin:

      <div className="circleCard" style={style}>
      
  5. component.tsx dosyasını kaydedin.

Görsel dosyayı yapılandırma

  1. VS Code'da, stil klasöründe visual.less dosyasını açın.

  2. içinde .circleCardve değerini ve widthile height değiştirin min-widthmin-height.

    min-width: 200px;
    min-height: 200px;
    
  3. Görseli kaydedin.daha az.

Power BI görselinizi özelleştirilebilir hale getirme

Bu bölümde, kullanıcıların renk ve kenarlık kalınlığında değişiklik yapmalarına olanak tanıyarak görselinizi özelleştirme özelliğini ekleyebilirsiniz.

Yetenek dosyasına renk ve kalınlık ekleme

capabilities.json özelliğine objectrenk ve kenarlık kalınlığını ekleyin.

  1. VS Code'da reactCircleCard klasöründen capabilities.json açın.

  2. Özelliğine aşağıdaki ayarları objects ekleyin.

    "circle": {
        "properties": {
           "circleColor": {
                "type": {
                    "fill": {
                        "solid": {
                            "color": true
                        }
                    }
                }
            },
            "circleThickness": {
                "type": {
                    "numeric": true
                }
            }
        }
    }
    
  3. capabilities.json kaydedin.

Ayarlar dosyasına daire biçimlendirme ayarları sınıfı ekleme

Circle biçimlendirme ayarlarını settings.ts ekleyin. Biçimlendirme modeli ayarlarını oluşturma hakkında daha fazla bilgi için bkz . biçimlendirme yardımcı programları.

  1. VS Code'da, src klasöründen settings.ts açın.

  2. settings.ts içindeki kodu aşağıdaki kodla değiştirin:

    "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];
    }
    
  3. settings.ts kaydedin.

Görsel ayarları uygulamak için yöntem ekleme

getFormattingModel Görsel ayarları ve gerekli içeri aktarmaları uygulamak için kullanılan yöntemi visual.ts dosyasına ekleyin.

  1. VS Code'da, src klasöründen visual.ts açın.

  2. Bu import deyimleri visual.ts en üstüne ekleyin.

    import { FormattingSettingsService } from "powerbi-visuals-utils-formattingmodel";
    import { VisualFormattingSettingsModel } from "./settings";
    
  3. Visual'a aşağıdaki bildirimi ekleyin.

    private formattingSettings: VisualFormattingSettingsModel;
    private formattingSettingsService: FormattingSettingsService;
    
  4. Yöntemini Visual'e getFormattingModelekleyin.

    public getFormattingModel(): powerbi.visuals.FormattingModel {
        return this.formattingSettingsService.buildFormattingModel(this.formattingSettings);
    }
    
  5. Visual sınıfında, başlatmak için constructor aşağıdaki kod satırını ekleyinformattingSettingsService

        this.formattingSettingsService = new FormattingSettingsService();
    
    
  6. sınıfına Visual aşağıdaki kodu update ekleyerek görsel biçimlendirme ayarlarını en son biçimlendirme özellikleri değerlerine güncelleştirin.

    1. Bu kodu sonrasına ifconst size = Math.min(width, height);ekleyin.

      this.formattingSettings = this.formattingSettingsService.populateFormattingSettingsModel(VisualFormattingSettingsModel, options.dataViews[0]);
      const circleSettings = this.formattingSettings.circleCard;
      
    2. Bu kodu sonrasına ReactCircleCard.updatesizeekleyin:

      borderWidth: circleSettings.circleThickness.value,
      background: circleSettings.circleColor.value.value,
      }
      
  7. visual.ts kaydedin.

Bileşen dosyasını düzenleme

Bileşen dosyasını görselin renginde ve kenarlık kalınlığında yapılan değişiklikleri işleyebilecek şekilde düzenleyin.

  1. VS Code'da, src klasöründen component.tsx dosyasını açın.

  2. bu değerleri içine Stateekleyin:

    background?: string,
    borderWidth?: number
    
  3. yönteminde render aşağıdaki kod satırlarını değiştirin:

    1. const { textLabel, textValue, size } = this.state; ile:

      const { textLabel, textValue, size, background, borderWidth } = this.state;
      
    2. const style: React.CSSProperties = { width: size, height: size }; ile:

      const style: React.CSSProperties = { width: size, height: size, background, borderWidth };
      
  4. component.tsx dosyasını kaydedin.

Değişikliklerinizi inceleme

Artık denetleyebileceğiniz görselin rengi ve kenarlık kalınlığıyla denemeler yapın.

  1. pbiviz start Çalıştığını doğrulayın ve Power BI hizmeti React Circle Card görselinizi yenileyin.

  2. Biçim sekmesini seçin ve Daire'yi genişletin.

  3. Görselin Renk ve Kalınlık ayarlarını yapın ve görsel üzerindeki etkisini gözden geçirin.

Power BI hizmetinde renk ve kenarlık kalınlığı biçim seçeneklerini gösteren react daire kartı görselinin ekran görüntüsü.