PowerBI中使用SVG图标简单介绍

1. 什么是SVG?

SVG 意为可缩放矢量图形(Scalable Vector Graphics)。
SVG 是使用 XML 来描述二维图形和绘图程序的语言。
SVG 图像在放大或改变尺寸的情况下其图形质量不会有所损失。
SVG 是万维网联盟(W3C)的标准。

2. SVG的优势

与其他图像格式相比(比如 JPEG 和 GIF),使用 SVG 的优势在于:

SVG 图像可通过文本编辑器来创建和修改
SVG 图像可被搜索、索引、脚本化或压缩;
SVG 是可伸缩的;
SVG图像可在任何的分辨率下被高质量地打印
SVG 可在图像质量不下降的情况下被放大;
由于以上的特性,我们在Power BI中使用SVG图标就很有优势!

3. 什么时候使用?

正常情况下,我们在PBI中插入图片是采用 “直接插入图像” 的方式。
但是这种方式存在部分的局限性,即:当一些小的图标需要在表格中进行显示时,“直接插入图像” 的方式会显得很笨拙
这时候,我们就可以考虑采用 “SVG图标” 的方式。

4. 一个简单的SVG示例

SVG 文件推荐使用 .svg(全部小写)作为此类文件的扩展名。
test.svg 文件:

<svg version="1.1"baseProfile="full"width="300" height="200"xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" stroke="red" stroke-width="4" fill="yellow" /><circle cx="150" cy="100" r="80" fill="green" /><text x="150" y="115" font-size="16" text-anchor="middle" fill="white">RUNOOB SVG TEST</text>
</svg>

得到以下的图形:

可以在 SVG运行测试 中进行验证。

SVG 代码解析:
SVG 代码和html代码类似,都是由标签组成的,标签可以嵌套
SVG 代码以 <svg> 元素开始,包括开启标签 <svg> 和关闭标签 </svg> 。这是根元素
width 和 height 属性可设置此 SVG 文档的宽度和高度;
version 属性可定义所使用的 SVG 版本;
xmlns 属性可定义 SVG 命名空间。
SVG 的 <rect> 用来创建一个矩形,通过 fill 把背景颜色设为黄色。
SVG 的 <circle> 用来创建一个圆。

cx 和 cy 属性定义圆中心的 x 和 y 坐标。如果忽略这两个属性,那么圆点会被设置为 (0, 0),r 属性定义圆的半径。 一个半径80px 的绿色圆圈 <circle> 绘制在红色矩形的正中央 (向右偏移 150px,向下偏移115px)。

stroke 和 stroke-width 属性控制如何显示形状的轮廓。我们把圆的轮廓设置为 4px 宽,红色边框。
fill 属性设置形状内的颜色。我们把填充颜色设置为红色。
关闭标签 </svg> 的作用是关闭 SVG 元素和文档本身。
注释:所有的开启标签必须有关闭标签!

参考:菜鸟教程:SVG 实例

5. 在PBI中自定义SVG

在Power BI中使用SVG,都是用度量值来存放的。
自定义SVG:即没有现成的SVG图片,根据需要,自定义一些图表(可以简单地理解成“一笔一划”的画,过程较复杂,但功能更灵活)。
新建度量值,输入:

circle_icon = "data:image/svg+xml;utf8,
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'>
<circle cx='30' cy='30' r='30' fill='green'/>  //画圆圈
</svg>"

字段说明:

  1. data:image/svg+xml;utf8
    含义:说明数据类型和编码格式(必须)。
  2. xmlns=‘http://www.w3.org/2000/svg’
    含义:xmlns用于说明这段代码所遵从的标准(必须)。
  3. viewBox=‘0 0 100 100’
    含义:说明可视窗口的大小(一般当成默认值即可,深究较复杂)。
    感兴趣的可以参考:svg中viewbox图解分析
  4. <circle cx=‘30’ cy=‘30’ r=‘30’ fill=‘green’/>
    含义:使用<circle…/> 标签可用来创建一个圆(根据需要,使用不同的标签);cx、cy 属性定义圆心的x、y坐标r 属性定义圆的半径fill 属性设置形状的填充颜色。

然后将 [circle_icon] 度量值用表或矩阵来呈现,就可以得到以下的结果。

6. 在PBI中插入SVG图片

在一般的工作中,我们往往不是自己去设计SVG图片样式,而是直接插入别人设计好的SVG图片。所以,我们需要知道如何插入SVG图片到Power BI中。

1. 查看SVG图片的源代码

  1. 在浏览器中打开SVG图片;
  2. 鼠标右键单击 “查看源代码” ,就可以看到SVG图片的源代码。

2. PBI中插入SVG图片

  1. 复制源代码中<svg…>… </svg>标签中的所有内容;
  2. 将<svg…>… </svg> 标签内容中所有的双引号替换成单引号
  3. 在PBI中新建度量值,粘贴上一步的<svg…>…</svg>标签内容,然后在前面加上 data:image/svg+xml;utf8并用双引号引起来。(参照自定义SVG中的格式)
  4. 将度量值的数据类型改成“图像 URL”(很重要,否则无法显示);
  5. 用表或矩阵来呈现度量值中存放的SVG图片。

7. 简单案例

sales表记录了不同日期和城市的销售数据。
数据的基本格式如下:

需求如下:
根据每个城市的销售总额,将排名前3的城市前面分别显示金、银、铜牌,排名后面的城市显示普通奖牌。

效果图如下:

具体步骤如下:

1.将金、银、铜牌和普通奖牌图标的SVG代码粘贴到到度量值中保存。
分别为:[icon_gold_medal]、[icon_silver_gold]、[icon_bronze_medal]和[icon_general_medal];
这里只列出 [icon_gold_medal] 的具体写法:

icon_gold_medal = "data:image/svg+xml;utf8,
<svg t='1657694803903' class='icon' viewBox='0 0 1024 1024'
version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='8707'
xmlns:xlink='http://www.w3.org/1999/xlink'
width='200' height='200'><defs>
<style type='text/css'>@font-face
{ font-family: feedback-iconfont;}
</style></defs>
<path d='M337.175 0H162.375l249.8 449.6h174.8L337.175 0z'
fill='#E64A19' p-id='8708'></path>
<path d='M686.875 0L437.075 449.6H611.875L861.675 0H686.875z'
fill='#FF754C' p-id='8709'></path>
<path d='M586.975 449.6l-1.7-3.3-1.7 3.3h3.4zM482.775 260.7l-86 160.4 27.9 54.4 87-160.6-28.9-54.2z'
fill='#C93D18' p-id='8710'></path>
<path d='M511.975 724.3m-299.7 0a299.7 299.7 0 1 0 599.4 0 299.7 299.7 0 1 0-599.4 0Z'
fill='#FFBA57' p-id='8711'></path>
<path d='M511.975 974c-137.9 0-249.8-111.8-249.8-249.8s111.8-249.8 249.8-249.8 249.8 111.8 249.8 249.8c-0.2 138-111.9 249.7-249.8 249.8z m-74.9-174.8v50h149.9v-50h-50V649.4h50v-50H437.075v50h50v149.9h-50z'
fill='#FFE082' p-id='8712'></path>
</svg>"

:开头记得加:data:image/svg+xml;utf8
2.新建度量值sales_sum,计算总销量 (具备“行上下文”功能。如果直接在后面的度量值icon_presentation里面定义成变量,则不具备“行上下文”功能,rankx()函数无法实现排名);

sales_sum = sumx('sales','sales'[sales])

3.新建逻辑控制度量值,根据不同排名,展示不同的图标;

icon_presentation =
// 根据城市的销量进行排名
var sales_rank = rankx(all('sales'[city]),[sales_sum])
return
if(HASONEVALUE(sales[city]),  // 让总计处不显示图标
switch(sales_rank,
1,[icon_gold_medal],
2,[icon_silver_gold],
3,[icon_bronze_medal],
[icon_general_medal]))

3.将度量值icon_presentation的数据类型改成“图像 URL”

4.在表格中分别放入度量值icon_presentationcitysales,对sales进行降序排列,就可以得到上面的效果图。

PowerBI中使用SVG图标简单介绍相关推荐

  1. 使用 iconfont 中的 svg 图标

    最近在使用 Element-UI开发的时候发现其图标并不是够用,于是想着如何将 https://www.iconfont.cn/home/index 上面的图标导入进自己的项目中去. 网上的搜索结果基 ...

  2. php有lambda表达式吗,Python中lambda表达式的简单介绍(附示例)

    本篇文章给大家带来的内容是关于Python中lambda表达式的简单介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 一:匿名函数的定义 lambda parameter ...

  3. mpvue微信小程序中使用svg图标,并通过代码动态改变图标颜色

    微信小程序,mpvue中使用svg图标,并通过代码改变图标颜色 本文主要是mpvue开发小程序的代码,不过微信小程序原生开发应该也是一样的,思路都是通用的,按照这个思路微信小程序原生开发一样可以实现同 ...

  4. 浏览器中 F12 功能的简单介绍

    chrome浏览器中 F12 功能的简单介绍 由于F12是前端开发人员的利器,所以我自己也在不断摸索中,查看一些博客和资料后,自己总结了一下来帮助自己理解和记忆,也希望能帮到有需要的小伙伴,嘿嘿! 首 ...

  5. Vue中使用SVG图标的步骤【钢镚核恒】

    Vue中使用SVG图标的步骤 简介 svg 可缩放矢量图形(Scalable Vector Graphics) svg 优势:任意缩放,超强显示效果,较小文件,可压缩 svgo 用来压缩svg中无用信 ...

  6. python shelve模块_Python中shelve模块的简单介绍(附示例)

    本篇文章给大家带来的内容是关于Python中shelve模块的简单介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. shelve:对象持久化的保存的模块,将对象保存到文件 ...

  7. react前端显示图片_在 React 中使用 SVG 图标组件

    SVG 很酷,它们能放大放小. 那么 SVG 的优点是什么? SVG 或可缩放矢量图形是基于 XML 的格式图像格式,可以在保持图像质量的同时缩放到任何大小.因此,当你需要根据需要调整大小的图像时,S ...

  8. Android中PackageManager类的简单介绍

    1.PackageManager这个类,表层意思是包管理者,既然可以管理包,那么包下的一些东西便可以获取,其中可以获取应用图标和应用名称以及包名. 通过下面一行代码实例化PackageManager类 ...

  9. 如何在VUE项目中使用svg图标

    一文带你搞定svg图标的使用! 文章目录 前言 一.SVG相较于字体图标的优点 二.使用步骤 1.新建一个vue2项目 2.安装项目依赖 3 .在src目录下新建文件夹 4.创建svg-icon组件 ...

最新文章

  1. JavaScript在离开页面是提示用户
  2. 关于python中requests模块导入问题-Python中requests模块的核心使用(1)
  3. 左神算法:两个单链表相交的一系列问题(链表是否有环 / 两无环链表是否相交 / 两有环链表是否相交)
  4. SQL:REGEXP
  5. 电源纹波分析及测试方法
  6. [CTSC2017]吉夫特(思维+巧妙)
  7. java 压缩文件夹_java 实现压缩文件(单文件 或 文件夹)
  8. 【树莓派】【网摘】树莓派与XBMC及Kodi、LibreELEC插件(三)
  9. jq判断html加载完成,jquery – 检测页面是否已完成加载
  10. join为什么每个字符都分割了 js_为什么 webpack4 默认支持 ES6 语法的压缩?
  11. 利用高阶函数map和reduce将字符串转化成浮点数
  12. torch.ones,normal,max
  13. python版本安装
  14. 常见的HTTP状态码说明
  15. 30个精品Python练手项目
  16. 蓝桥杯python试题集VIP版
  17. linux ssh pem 登陆,Linux 生成pem文件 用于免密登录
  18. R语言将字符串中的数字提取出来作为值
  19. Conflict with dependency com.android.support-annotations' in project':app'.Resolved ...解决方法
  20. Linux基础——makefile编写

热门文章

  1. PNG怎么转换成PDF?这篇文章教会你
  2. 转载 :make报错:/usr/bin/ld: cannot find -lXXX
  3. could not create folder “sftp://xxx.xxx.xxx.xxx/.../venv“. (Permission denied)
  4. Linux账户设置能su不能ssh,ssh无法登录可以su切换的问题
  5. MongoDB 数据文件损坏修复救命repair与致命危险
  6. Django笔记 CMS框架Mezzanine 2
  7. 2020年国考申论备考:评价类(观点)题和理解类题目的辨析
  8. 自媒体这样运营想不成功都难!
  9. 2020年10月份电脑选购计划
  10. mapbox 聚合图