Power BI Echart Tree開發自定義可視化對象

開發環境:

Power BI Desktop 2017

API版本v1.9.0

使用插件內置js的辦法。

{
  "visual": {
    "name": "d3tree",
    "displayName": "d3tree",
    "guid": "circleCard6331EDD59B344F31992BF545DD427473",
    "visualClassName": "Visual",
    "version": "1.0.0",
    "description": "",
    "supportUrl": "",
    "gitHubUrl": ""
  },
  "apiVersion": "1.9.0",
  "author": {
    "name": "",
    "email": ""
  },
  "assets": {
    "icon": "assets/icon.png"
  },
  "externalJS": [
    "node_modules/powerbi-visuals-utils-dataviewutils/lib/index.js",
    "node_modules/d3/index.js"//調用外部js,這裏存放着d3.js
  ],
  "style": "style/visual.less",
  "capabilities": "capabilities.json",
  "dependencies": "dependencies.json",
  "stringResources": []
}

使用了JS動態在線導入的辦法。在初始化視圖對象的時候導入在線echart.js.

1.在構造函數內引入JS

      constructor(options: VisualConstructorOptions) {
          this.target = options.element;
          this.echartLoad=false;
          this.onloadEchart();
          if (typeof document !== "undefined") {
          this.tips = document.createElement("p");
          this.tips.appendChild(document.createTextNode("正在加載資源..."));
          this.target.appendChild(this.tips);
        }
      }
      private onloadEchart(){
        var script=document.createElement('script');
        script.type="text/javascript";
        script.src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js";
        document.body.appendChild(script);
        let that=this;
        script.onload=function(){
         that.echarts=echarts;
         that.echartLoad=true;
         that.checkJsLoad();
        }
      }

2.由於腳手架是typescript的,而我們在線導入的echart.js的全局對象是echarts,這個變量名字直接在這裏使用時會報錯的,需要先聲明這個變量。首先創建文件test.d.ts用於聲明這個變量。然後在tsconfig.json文件中包含加載新的文件。

declare var echarts: any;
{
  "compilerOptions": {
    "allowJs": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "ES5",
    "sourceMap": true,
    "out": "./.tmp/build/visual.js"
  },
  "files": [
    ".api/v1.9.0/PowerBI-visuals.d.ts",
    "node_modules/powerbi-visuals-utils-dataviewutils/lib/index.d.ts",
    "src/settings.ts",
    "src/visual.ts",
    "src/test.d.ts"
  ]
}

3.在參數獲取方面由於API版本的差異,在3.0的版本是可以在options.dataViews對象中的屬性獲得所有的參數。但是在1.9.0的版本中,官方提供的typescript類裏面是沒有的。最終我是通過將對象轉成any類型之後再對象的原型鏈中獲取到了數據。

4.capabilities.json文件

{
	"dataRoles": [{
			"name": "Category",
			"displayName": "Category",
			"displayNameKey": "Visual_Category",
			"kind": "Grouping"
		},
		{
			"name": "Measure",
			"displayName": "Measure",
			"displayNameKey": "Visual_Values",
			"kind": "Measure"
		}
	],
	"objects": {
		"dataPoint": {
			"displayName": "Data colors",
			"properties": {
				"defaultColor": {
					"displayName": "Default color",
					"type": {
						"fill": {
							"solid": {
								"color": true
							}
						}
					}
				},
				"showAllDataPoints": {
					"displayName": "Show all",
					"type": {
						"bool": true
					}
				},
				"fill": {
					"displayName": "Fill",
					"type": {
						"fill": {
							"solid": {
								"color": true
							}
						}
					}
				},
				"fillRule": {
					"displayName": "Color saturation",
					"type": {
						"fill": {}
					}
				},
				"fontSize": {
					"displayName": "Text Size",
					"type": {
						"formatting": {
							"fontSize": true
						}
					}
				}
			}
		}
	},
	"dataViewMappings": [{
		"matrix": {
			"rows": {
				"for": {
					"in": "Category"
				}
			},
			"values": {
				"select": [{
					"for": {
						"in": "Measure"
					}
				}]
			}
		}
	}]
}

5.visual.ts文件

/*
 *  Power BI Visual CLI
 *
 *  Copyright (c) Microsoft Corporation
 *  All rights reserved.
 *  MIT License
 *
 *  Permission is hereby granted, free of charge, to any person obtaining a copy
 *  of this software and associated documentation files (the ""Software""), to deal
 *  in the Software without restriction, including without limitation the rights
 *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 *  copies of the Software, and to permit persons to whom the Software is
 *  furnished to do so, subject to the following conditions:
 *
 *  The above copyright notice and this permission notice shall be included in
 *  all copies or substantial portions of the Software.
 *
 *  THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 *  THE SOFTWARE.
 */

module powerbi.extensibility.visual {
  "use strict";
  export class Visual implements IVisual {
      private target: HTMLElement;
      private tips:HTMLElement;
      private settings: VisualSettings;
      private echarts:any;
      private myChart:any;
      private echartLoad:any;
      private rootList:Array<any>;
      private timer:any;

      constructor(options: VisualConstructorOptions) {
          this.target = options.element;
          this.echartLoad=false;
          this.onloadEchart();
          if (typeof document !== "undefined") {
          this.tips = document.createElement("p");
          this.tips.appendChild(document.createTextNode("正在加載資源..."));
          this.target.appendChild(this.tips);
        }
      }
      private onloadEchart(){
        var script=document.createElement('script');
        script.type="text/javascript";
        script.src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js";
        document.body.appendChild(script);
        let that=this;
        script.onload=function(){
         that.echarts=echarts;
         that.echartLoad=true;
         that.checkJsLoad();
        }
      }

      public update(options: VisualUpdateOptions) {
        try{
          let dataView: DataView = options.dataViews[0];
          this.settings = VisualSettings.parse<VisualSettings>(dataView);

          this.settings = Visual.parseSettings(options && options.dataViews && options.dataViews[0]);
          console.log(options.dataViews[0]);
          let dataTree:any=options.dataViews[0].matrix;
          let list:Array<any>=dataTree.rows.root.children;
          clearTimeout(this.timer);
          this.timer=setTimeout(()=>{
            // debugger;
            this.rootList=[{
              value:"根目錄",
              children:list,
              level:-2
            }];
            this.readTree(this.rootList);
            this.mapTree(this.rootList);
            console.log(list);
            this.checkJsLoad();
          },300);
        }catch(e){
          this.dataError();
          console.log("錯誤",e);    
        }
      }
      private readTree(list:Array<any>){
        let that=this;
        list.forEach((item)=>{
          item.name=item.level;
          // item.value=item.level;
          if(typeof item.children !="undefined"){
            item.count=0;;
            that.readTree(item.children);
          }else{
            item.count=item.values[0].value;
          }
        });
      }
      
      private mapTree(list:Array<any>){
        let that=this;
        list.forEach((item)=>{
          if(typeof item.children !="undefined"){
            item.count=that.countNum(item);
            that.mapTree(item.children);
          }
        });
      }
      

      private countNum(node:any){
        let that=this;
        let result:Array<any>=new Array();
        getList(node.children,result);
        let count=0;
        result.forEach((item)=>{
          count+=item.count;
        });
        return count;
        function getList(list:Array<any>,result:Array<any>){
          list.forEach((item)=>{
            if(typeof item.children =="undefined"){
              result.push(item);
            }else{
              getList(item.children,result);
            }
          });
          return result;
        }
      }
      
      private e_tree(treeData:Array<any>){
        let that=this;
        that.myChart = that.echarts.init(this.target);
        var data:any = treeData;
        let width=150,height=80;
        var option = {
            series: [{
                name: '樹圖',
                type: 'tree',
                orient: 'vertical', // vertical horizontal
                symbol: 'rectangle',
                symbolSize: [width, height],
                edgeShape: 'polyline',
                initialTreeDepth: 2,
                itemStyle: {
                    normal: {
                        color: function(obj){
                          // console.log(obj)
                          if(obj.name==-2){
                            return '#67a244';
                          }
                          if(obj.name%2==0){
                            return '#b1b1b1';
                          }else{
                            return '#67a244';
                          }
                        }, //節點背景色
                        borderColor:"transparent",
                        borderWidth: 0,
                        label: {
                            show: true,
                            position: 'inside',
                            textStyle: {
                                color: '#ffffff',
                                fontSize: 15,
                                //fontWeight:  'bolder'
                            },
                          padding:0,
                        formatter:function(obj){
                          let str=[];
                            if(obj.data.name==-2){
                              str.push(`{r1|${obj.data.value}}   {r2|${(obj.data.count/1).toFixed(2)}}\n\n\n`);
                              if(obj.data.children&&obj.data.children.length>0){
                                if(obj.data.selected){
                                  str.push(`{m_open|}`);
                                }else{
                                  str.push(`{m_close|}`);
                                }
                              }
                            }else if(obj.data.name==0){
                              str.push(`{r0_1|${obj.data.value}}\n`);
                              str.push(`{r0_2|${(obj.data.count/1).toFixed(2)}}\n`);
                              if(obj.data.children&&obj.data.children.length>0){
                                if(obj.data.selected){
                                  str.push(`{m_close|}`);
                                }else{
                                  str.push(`{m_open|}`);
                                }
                              }
                            }else if(obj.data.name==1){
                              str.push(`{r0_1|${obj.data.value}}\n`);
                              str.push(`{r0_2|${(obj.data.count/1).toFixed(2)}}  {r0_3|}\n`);
                              if(obj.data.children&&obj.data.children.length>0){
                                if(obj.data.selected){
                                  str.push(`{m_close|}`);
                                }else{
                                  str.push(`{m_open|}`);
                                }
                              }
                            }else{
                              str.push(`{r0_1|${obj.data.value}}\n`);
                              if(obj.data.children&&obj.data.children.length>0){
                                str.push(`{r0_2|${(obj.data.count/1).toFixed(2)}}\n`);
                                if(obj.data.selected){
                                  str.push(`{m_close|}`);
                                }else{
                                  str.push(`{m_open|}`);
                                }
                              }else{
                                str.push(`{r0_2|${(obj.data.count/1).toFixed(2)}}\n\n`);
                              }
                            }
                            return str.join('\n');
                          },
                          rich: {
                            m_open:{
                              backgroundColor: {
                                image: 'data:image/png;base64,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',
                              },
                              width:20,
                              height:20,
                            },
                            m_close:{
                              backgroundColor: {
                                image: 'data:image/png;base64,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'
                              },
                              width:20,
                              height:20,
                            },
                              r1:{
                                fontSize: 18,
                                fontFamily: 'Microsoft YaHei',
                                color: '#fff',
                              },
                              r2:{
                                fontSize: 18,
                                fontFamily: 'Microsoft YaHei',
                                color: '#fff'
                              },
                              r0_1: {
                                  fontSize: 18,
                                  fontFamily: 'Microsoft YaHei',
                                  color: '#000',
                              },
                              r0_2: {
                                  fontSize: 18,
                                  fontFamily: 'Microsoft YaHei',
                                  color: '#000',
                              },
                              r0_3:{
                                backgroundColor:{
                                  image:"data:image/png;base64,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",
                                }
                              }
                          }
                        },
                        lineStyle: {
                            color: "#67a244",
                            curveness: 0.5,
                            width: 1,
                            type: 'solid' // 'curve'|'broken'|'solid'|'dotted'|'dashed'
                        }
                    },
                    emphasis: {
                        label: {
                            show: true
                        }
                    }
                },
                label:{
                  normal: {
                    distance :-15,
                    position: ['50%',55],
                    verticalAlign: 'middle',
                    align: 'center',
                    backgroundColor:"transparent",
                  }
                },
                data: data
            }]
        };
        that.myChart.setOption(option);
        that.myChart.resize();
        that.myChart.on("click", function(param){
          param.data.selected = !param.data.selected;
          that.myChart.resize();
        });
      }
      //錯誤檢查
      private dataError(){
        this.checkJsLoad();
      }
      //檢查第三方js加載
      private checkJsLoad(){
        let that=this;
        if(that.echartLoad){
          that.tips.innerHTML="加載完成";
          if(that.myChart)
          that.myChart.dispose();
          that.e_tree(this.rootList);
        }
      }
      private static parseSettings(dataView: DataView): VisualSettings {
          return VisualSettings.parse(dataView) as VisualSettings;
      }

      /** 
       * This function gets called for each of the objects defined in the capabilities files and allows you to select which of the 
       * objects and properties you want to expose to the users in the property pane.
       * 
       */
      public enumerateObjectInstances(options: EnumerateVisualObjectInstancesOptions): VisualObjectInstance[] | VisualObjectInstanceEnumerationObject {
          return VisualSettings.enumerateObjectInstances(this.settings || VisualSettings.getDefault(), options);
      }
  }
}

6.最終效果

參考文獻:https://docs.microsoft.com/zh-cn/power-bi/developer/visuals/custom-visual-develop-tutorial

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章