PowerBI是微软新一代的交互式报表工具,把相关的静态数据转换为酷炫的可视化的,能够根据filter条件,对数据执行动态筛选,从不同的角度和粒度上分析数据。PowerBI主要由两部分组成:PowerBI Desktop和 PowerBI Service,前者供报表开发者使用,用于创建数据模型和报表UI,后者是管理报表和用户权限,以及查看报表(Dashboard)的网页平台(Web Portal)。在开始PowerBI制作报表之前,请先下载 PowerBI Desktop桌面开发工具,并注册Power BI service账户,在注册Service账号之后,开发者可以一键发布(Publish)到云端,用户只需要在IE或Edge浏览器中打开相应的URL链接,在权限允许的范围内查看报表数据。

我的PowerBI开发系列的文章目录:PowerBI开发

一,认识PowerBI Desktop主界面

打开PowerBI Desktop开发工具,主界面非常简洁,分布着开发报表常用的多个面板,每个面板都扮演着重要的角色:

  • 顶部是主菜单,打开Home菜单,通过“Get Data”创建数据连接,创建数据源连接是通过Power Query M语言实现的;通过“Edit Queries”对数据源进行编辑;
  • 左边框分别是Report,Data和Relationships,在开发报表时,用于切换视图,在Relationships界面中,管理数据关系,数据建模是报表数据交互式呈现的关键;
  • 右边是可视化(Visualizations)和字段(Fields),用于设计报表的UI,系统内置多种可视化组件,能够创建复杂、美观的报表;
  • 底部边框是Report的Page,通过“+”号新建Page,PowerBI允许在一个Report中创建多个Page,多个Page共享Data和Relationships;

查看Page的格式(Format)属性,Page Size是16:9,那么是否可以放大Page的Size,使其可以容纳更多的图标,显示更多的数据呢?答案是可以的,这就需要自定义Page Size。

把Type设置为Custom,并设置Width和Height的大小,就可以增加Page的界面大小。如果发现Page 缩小,那么可以先把Type设置为Cortana,然后再设置为Custom,并调整Width和Height的大小,就可以放大Page的界面大小。当高度调整超过一个屏幕的宽度时,Page的右侧会出现滚动条,用于上下移动Page;当宽度调整超过屏幕的宽度时,Page的下方会出现一个滚动条,用于左右移动Page。

PowerBI Desktop另一个重要的编辑界面是查询编辑器(Query Editor),通过点击“Edit Queries”切换到查询编辑器(Query Editor),用于对查询(Query)进行编辑,在左侧的Queries 列表中,共有三种类型的查询,分别是Table,List和Parameter,中间面板是Query的数据,右侧面板是查询设置(Query Settings),如下图所示,查询编辑器(Query Editor)通过菜单提供丰富的编辑功能,例如,通过“Transform”菜单对查询和其字段执行转换操作,通过“Add Column”菜单,适用Power Query M语言为查询添加字段:

二,加载数据

在Home主菜单中,点击“Get Data”,能够从多种数据源(文档,数据库,Azure等)中加载数据,在PowerBI Desktop中,每一个数据源都被抽象成一个“Query”,在加载数据时,PowerBI支持对Query进行编辑,在Query Editor中编辑Query,对数据进行清理,转换,以满足复杂的业务需求。

1,加载Excel示例数据

示例数据:download this sample Excel workbook,将Excel下载到本地主机中,选择Excel数据源类型,点击“Connect”,指定Excel文件的路径:

选择需要加载的Sheet,点击Edit,将打开Query Editor对数据进行编辑,在该例中,直接点击“Load”,把Excel中的数据加载到报表中,点击左边的“Data”面板,查看加载的数据,对于数值型数据,前面有累加符号(∑):

2,编辑查询

每一个数据源都被抽象成一个Query,通过定义相应的数据转换操作,就能在数据集加载到PowerBI时,应用(apply)自定义的数据修改操作,而不需要修改数据源。在Data视图中,点击Home菜单的“Edit Queries”,能够对“Query”进行编辑和转换,例如,清洗脏数据,删除冗余的Column,添加新的Column,转换列的数据类型。在右边的“Query Settings”中,“Applied Steps”显式列出查询的编辑步骤,在编辑完成之后,点击“Close & Apply”,完成查询的修改。

在菜单Transform中,PowerBI提供丰富的数据转换功能,满足您复杂的分析需求。

3,增加一个数据列YearMonth

数据列YearMonth时Year字段和MonthName字段的结合(Combine),点击菜单Add Column,按住CTRL,同时选中Year和MonthName字段,并从“Add Column”菜单中选择“Column From Examples”:

双击右侧新建的Column,输入同一数据行的Year和MonthName字段值的拼接(Combine),作为一个示例(Example),PowerBI会根据用户输入的结果,自动检测派生列的值,并生成派生列的计算公式,该公式可以在数据表格的上方查看到:

Transform:Text.Combine({Text.From([Year])," ",[Month Name]})

点击OK,并把列名Combined修改YearMonth,并切换到Home菜单,点击“Close & Apply”,应用Query的编辑,并关闭Query Editor窗体。

三,添加可视化组件

在制作报表之前,必须熟悉报表数据及其数据之间的关系,本例只有一个数据表,所有的数据及其关系都存储在一个数据表中,在Relationships视图中,只有孤零零的一个表。

点击“Report”,进入到报表编辑界面,使用Visualizations中可视化组件,设计报表UI。

1,使用分片器(Slicer)

Slicer是一个过滤器(Filter),每一个CheckBox都是一个选项(Item);单击选中,再次单击,取消选择;按住CTRL不放,能够多选;不选择任何Item,表示不对数据应用该Filter,不选和全选是不相同的。从PowerBI的内部运行原理上来解释,如果没有选择Slicer的任何一个选项,那么PowerBI不会对数据执行筛选操作;如果全选,那么PowerBI对数据执行筛选操作。由于在数据模型中,数据表之间可能存在多层关系,不选和全选的结果可能是不相同的,在后面的数据建模章节中,我会解释这一点。

例如,拖曳一个Slicer,把Country作为Filter,UI效果如图:

每一个可视化组件(Visualization)都需要设置Fields属性,将数据字段Country从Fields列表中拖曳(Drag)到Field字段中,PowerBI会自动对数据进行去重(Distinct),只显示唯一值,并按照显示值进行排序。

Field右边是一个刷子的图形,用于改变可视化组件的显示属性,读者可以尝试着修改,以定制数据的UI显示效果。

每一个可视化组件,都会三个级别的过滤器(Filers),分为组件级别,Page级别,Report级别,用于对数据进行过滤,该过滤是静态设置的,不会动态地根据用户选择的Filter对数据进行过滤。

2,对Slicer的显示进行排序

PowerBI支持数据值的排序,在排序时,可视化组件根据排序值(Sort)执行排序操作,在相应的顺序位置上呈现数据的显示值(Display),因此,排序操作会使用到排序列(Sort By Column)和显示列(Display By Column),默认情况下,显示列就是排序列;用户可以在“Modeling”菜单中修改默认的排序行为,组件在显示数据列Column1的数据时,按照另外一个数据列Column2的值的顺序。

在右边框的Fields中选择排序的显示列,在“Modeling”菜单中,选择“Sort By Column”,默认的排序列是显示列,可以选择其他数据列作为排序列。

3,使用Line Chart可视化组件

从Visualizations列表中,选择Line chart组件,轴线(Axis)属性选择Product字段,该可视化组件会按照Product呈现数据,每一个Product都是数据分析的一个维度,一个视角;Values属性选择Gross Sales和Sales 字段,该可视化组件会显示两条曲线,曲线的值分别是按照Product划分的Gross Sales和Sales,这就是说,对于每一个Product,都会分别计算Gross Sales和Sales的值。

4,使用Stacked column Chart可视化组件

分组显式报表数据,如图,设置Axis属性为YearMonth,Value数据设置为Profit,Legend属性设置为Product,Legend属性的作用是再次分组,本例设置Legend属性为Product,这意味着,当Axis属性为某一个月(Year Month)时,PowerBI按照Product对Value进行分组,分别设置各个Product所占的利润(Value属性是Profit);

该可视化组件的数据呈现并不完美,因为,底部的YearMonth不是按照自然月进行排序的,而是按照字符的顺序进行排序,为了修改这个“瑕疵”,必须改变组件默认的排序行为,使其按照排序列的值进行排序,由于数据表中有Date字段,可以按照Date字段排序,而显示的字段是YearMonth。实现的步骤非常简单,分两步:

Step1:在右边Fields列表中选中YearMonth字段,

Step2:打开菜单“Modeling”,点击“Sort by Column”,默认的排序字段是YearMonth,把排序列选中为Date字段。

在修改YearMonth的排序列之后,组件的显示正常,YearMonth轴按照自然月从左向右,依次递增。

四,设计第一个PowerBI报表

当点击Slicer可视化组件(Year,Country)中的选项时,右边和下面的可视化组件中的数据会自动变化,这种交互式的“联动”变化是通过关系(Relationship)来实现的,对于本例,由于报表只有一个数据源,关系隐藏在单表中,对于多个表之间的交互式关系,可以在“Relationships”面板中,通过数据建模来实现,我会在《PowerBI 第二篇:数据建模》中详细讲述PowerBI的数据建模和关系,以及动态关联的实现。

参考文档:

Getting started with Power BI Desktop

Add a column from an example in Power BI Desktop

Power BI 文档

Power BI 的引导学习

微软又一逆天可视化神器——Power BI

PowerBI开发 第一篇:设计PowerBI报表的更多相关文章

  1. iOS开发——高级技术精选&底层开发之越狱开发第一篇

    底层开发之越狱开发第一篇 做越狱开发也有一些时间了,有很多东西想总结一下,希望给他人一些借鉴,也是自己对过去开发经历的一些总结.个人不推荐使用盗版,这里主要以技术介绍为主. 这个系列里面主要介绍怎样进 ...

  2. PowerBI开发 第二篇:数据建模

    在分析数据时,不可能总是对单个数据表进行分析,有时需要把多个数据表导入到PowerBI中,通过多个表中的数据及其关系来执行一些复杂的数据分析任务,因此,为准确计算分析的结果,需要在数据建模中,创建数据 ...

  3. Android百度地图开发-第一篇:申请、搭建百度地图

    一.前言 这是第一篇关于Android使用百度地图的学习记录,主要记录: 1.在百度地图开发者平台上申请API Key. 2.在自己的应用中加入百度地图的Android版SDK. 3.在自己的应用中显 ...

  4. python开发第一篇:初识python

    一. Python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为AB ...

  5. Swift开发第一篇——异常处理及断言

    本篇分两部分: 1.错误和异常处理 2.Swift 中的断言 1.错误和异常处理 在 OC 开发中,我们通常会将 error 置为 nil NSError *error; BOOL success = ...

  6. android 串口开发第一篇:搭建ndk开发环境以及第一个jni调用程序

    一:ndk环境搭建 1:开发环境 我使用的是android studio 2.3.3版本,搭建ndk开发环境比较简单,打开File----Settings----Appearance&Beha ...

  7. Python开发 第一篇 python的前世今生

    Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC ...

  8. 微信支付之JSAPI开发第一篇-基本概念

    申请权限 具体步骤就不说了,进入微信支付商户平台进行申请认证,认证成功后在微信公众号后台会有个微信支付的菜单按钮,点击后会有如下的信息 配置 在进行微信支付开发之前,必须进行一些必要的配置,如果这些配 ...

  9. 团队开发——第一篇scrum报告

    一.角色介绍 产品负责人(兼项目经理PM):王雪青 scrum master: 陆宇 开发团队:赵建松.张文冬.徐擎天 二.product backlog 1.买家登录后,显示各个小吃摊的信息,主要是 ...

随机推荐

  1. MySQL基础值 存储过程和函数

    一.创建存储过程和函数 什么是创建存储过程和函数? 就是将经常使用的一组SQL语句组合在一起,并将这些SQL语句当做一个整体存储在MYSQL服务器中. 创建存储过程的语句是:CREATE  PROCE ...

  2. Apache的安装与AWstats分析系统

    实验拓扑图: 实验要求: 1.  WEB服务器: 使用源码包apache实现.安装完成后,并优化执行路径. 启动服务后,客户端通过http://IP能访问默认的网站. 2.  DNS服务器: 安装DN ...

  3. 在Linux服务器上运行Jupyter notebook server教程

    在Linux服务器上运行Jupyter notebook server教程 很多deep learning教程都推荐在jupyter notebook运行python代码,方便及时交互.但只在本地运行 ...

  4. MySql详解(二)

    MySql的安装和使用安装过程可以自行百度,非常简单,一直下一步就行,这里省略. 启动和停止MySql服务:• 方式一:通过计算机管理方式右击计算机—管理—服务—启动或停止MySQL服务• 方式二:通 ...

  5. ERC: Claim Holder #735 status:Discussion

    EIP: Title: Claim Holder Author: Fabian Vogelsteller (@frozeman) Type: Standard Category: ERC Status ...

  6. python之生成随机测验试卷

    自己又开始懒散的态度生活,所以几乎有两个月没有更博了. 项目:美国各州首府地理考试,为防止作弊,35份试卷,50道题随机次序,生成独一无二的试卷. 基本想法: 1.将各州首府的地方和首府写入列表,以K ...

  7. 解决Matlab当中for循环运行慢的问题

    做量化操作的时候经常需要使用到matlab编写策略或者计算多因子,for循环非常慢,自己找了一些matlab中for循环的优化方法,for的部分每处理一个大矩阵都要花费大量的时间,这是不可避免需要遇到 ...

  8. OpenCV——查找、绘制轮廓

    #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...

  9. ICC Stage Flow

    initial: reference library(mw), link library(db), create_mw_lib, read_verilog, link create_floorplan ...

  10. JS 点击元素发ajax请求 打开一个新窗口

    JS 点击元素发ajax请求 打开一个新窗口 经常在项目中会碰到这样的需求,点击某个元素后,需要发ajax请求,请求成功以后,开发需要把链接传给前端(或者说请求成功后打开新窗口),前端需要通过新窗口打 ...