PowerBI入门 第一篇:创建第一个PowerBI报表

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

一,认识PowerBI Desktop主界面

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

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

二,加载数据

在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

Power BI 文档

Power BI 的引导学习

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

时间: 2024-10-13 10:21:57

PowerBI入门 第一篇:创建第一个PowerBI报表的相关文章

ElasticSearch入门 第一篇:Windows下安装ElasticSearch

https://www.elastic.co/downloads/past-releases/elasticsearch-2-4-4 这是ElasticSearch 2.4 版本系列的第一篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 ElasticSearch入门 第三篇:索引 ElasticSearch入门 第四篇:使用C#添加和更新文档 ElasticSearch入门 第五篇:使用C#查询文档

JavaMail入门第一篇 邮件简介及API概述

现如今,电子邮件在我们的生活当中扮演着越来越重要的角色,我们每个人几乎都会与其打交道(至少时不时我们都会接收到莫名其妙的垃圾邮件),在工作中,使用邮件进行交流沟通,可以使我们的工作有迹可循,也显的较为正式,这是由我们人为手工操作的,在生活中,在某网站注册了一个账户之后,该网站就会自动发送一封欢迎邮件并让我们确认是否注册,以防止恶意注册,当然,这个就不可能像我们工作中手工方式来进行操作了,Java的13种核心技术中的JavaMail为我们提供了API来对邮件进行相关的操作. 一.邮件服务器 要在I

Django入门第一步:构建一个简单的Django项目

Django入门第一步:构建一个简单的Django项目 1.简介 Django是一个功能完备的Python Web框架,可用于构建复杂的Web应用程序.在本文中,将通过示例跳入并学习Django.您将按照以下步骤创建功能完备的Web应用程序,并一路学习框架的一些最重要的功能以及它们如何协同工作. 学习目标: 了解Django是什么以及为什么他是一个伟大的web框架 了解Django的体系结构以及与其他框架的对比 独立搭建一个简单的Django项目和应用程序(app) 2.为什么要学习Django

Three.js 第一篇:绘制一个静态的3D球体

第一篇就画一个球体吧 首先我们知道Three.js其实是一个3D的JS引擎,其中的强大之处就在于这个JS框架并不是依托于JQUERY来写的.那么,我们在写这一篇绘制3D球体的文章的时候,应该注意哪些地方呢?下面我就来一一列举 1.场景. 场景是什么,说得简单一点,场景就是一个canvas ,我们就是要在Canvas上面实现3D效果的画面而已.场景和容器,相机是息息相关的,我们就拿拍戏来说,假如我们需要演一个古装剧的撕逼场景,那么,我们需要的道具其中之一就是一个相机. 2.容器 就是承载球体的DI

html/css入门第一篇

1.基本教程学习 大概三天业余时间看完下面两个教程. HTML文字教程 CSS文字教程 2.练习 看完教程后,做第一练习时,总结如下: 1)div居中 需要设置属性:margin-left:auto; margin-right:auto; 2) 给图片加链接后,图片有边框,消除边框方法:给图片设置属性 border-width:0px; 3)图片相连时,图片间有距离,消除图片间距离:给图片设置属性 display: block; html/css入门第一篇

开博第一篇:记一个前端实现的“换一换”功能

需求的极简概要:实现“换一换”按钮的功能,点击之后,换另一批对应的品牌 刚开始的时候考虑使用ajax请求数据,之后通过js在页面上填充到指定位置,但是真是懒得给这个ajax请求单独再配一个请求映射了,干脆直接在后台把需要的内容全部拼成JSON字符串,直接在前台解析,分页. 页面比较简单,就不上html代码了,大概思路就是:两个“换一换”按钮分别对应两套数据,共用一个分页的方法,分别传入各自的页数,显示对应页数的内容.当然了,实现“换一换”的方法多种多样,我在此只是记录一下自己的思路,欢迎批评指教

Zookeeper 入门第一篇

转载原文地址: ZooKeeper学习总结 第一篇:ZooKeeper快速入门 ZooKeeper学习总结 第二篇:ZooKeeper深入探讨 ZooKeeper学习第一期---Zookeeper简单介绍 1. 概述 Zookeeper简单来说就是一个分布式协调技术的具体实现,所谓分布式协调技术就是在集群环境下,协调集群中多台机器并发访问控制,实现临界资源加锁和有序访问,防止造成"脏数据"的后果.所以Zookeeper最常见的应用就是:分布式锁.除此之外,基于Zookeerper提供的

JavaMail入门第二篇 创建邮件

JavaMail API使用javax.mail.Message类来表示一封邮件,Message类是一个抽象类,所以我们需要使用其子类javax.mail.internet.MimeMessage类来创建Message类的实例对象,如果我们创建的是一个简单文本邮件,那么MimeMessage类就可以满足我们的需求了,但是如果需要创建一封包含内嵌资源或者是带附件的复杂邮件,则需要使用到JavaMail API中的MimeMessage.javax.mail.internet.MimeBodyPar

博客第一篇:介绍一个js封装类 MSClass.js

新手第一篇博客,如有不足 请多多指教哈~ 在偶然的一次机会,接触到一个js封装类 那时候是我刚学js的时候,觉得什么效果都写不出来,脑子里也没有什么思路和逻辑之类的(新手们有这样的问题么...) 然后在随便点开链接的时候,接触到了一个js类 MSClass.js.. MSClass,是一款通用不间断滚动JS封装类,几乎支持目前所有流行风格的图片或文字的滚动/切入/渐显等效果,同时支持横向/竖向/连续/间断/缓动等多种形式. 要使用它,先在head部分引入 MSClass.js 核心文件,如: <