最近做了几个PowerBI报表,对PowerBI的设计有了更深的理解,对数据的塑形(sharp data),不仅可以在Data Source中实现,例如在TSQL查询脚本中,而且可以在PowerBI中实现,例如,向数据模型中添加自定义字段,或者在报表数据显示时,根据数据表之间的关系做数据的统计。本文主要介绍数据的塑形和UI设计的微调。

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

一,创建数据列

PowerBI报表的数据分为数据源(Data Source)和数据模型(Data Model)。数据源(Data Source)的逻辑视图是Query,默认情况下,Data Source和Query的结构(Schema)相同。用户可以通过Power Query M语言增加自定义列修改Query的结构,Power Query M语言不会影响Data Source,只会修改Query导出的数据。默认情况下下,PowerBI按照Query把数据加载到Data Model中,默认情况下,Data Model和Query的结构(Schema)相同,用户可以通过DAX表达式在Data Model上创建计算列(Calculated Column)和度量(Measure)。

1,自定义数据列

在Data View->Query Editor中,创建自定义数据列,使用的是M 公式(M formula ),M公式语言用于创建灵活性数据查询,M公式对大小写敏感。用户添加自定义数据列,这会修改数据模型(Data Model)的架构,PowerBI向Data Model中添加数据列。

例如,创建MonthKey列,通过使用M公式,把DateKey(格式是:yyyyMMdd)转换成MonthKey(格式是:yyyyMM)。

在对数据进行排序时,有时不能使用DAX表达式,此时必须使用M公式,例如,对班级(Class)进行排序,使用DAX的IF函数,按照班级(Class)名称新建一个字段(Class Ordinal),

Class Ordinal = IF(Schools[Class]="一年级",1,IF(Schools[Class]="二年级",2,3))

设置Class按照Class Ordinal排序,PowerBI会抛出错误:

在这种情况下,必须使用M公式,在Schools Query中新增字段:

= Table.AddColumn(KustoQuery, "Class Ordinal",
each if [Class]="一年级" then 1else if [Class]="二年级" then 2else if [Class]="三年级" then 3else 4) 

2,计算列(Calculated Column)

在Report View中,计算列用于从已经加载到数据模型(Model)中的数据,根据公式计算的数据列,这跟在Data Model中增加计算列是不同的,计算列是从数据模型中计算数据,不会修改数据模型,因此,计算列的值,只会出现在Report View 和Data View中。计算列使用DAX定义字段的数据值,基于加载到数据模型的数据和公式计算结果。计算列只计算一次,跟Report没有交互行为,这意味着,计算列不会根据用于在Report Page上选择的Filter,而动态计算表达式的值。

计算列的值是基于当前数据行,进行计算,每行有一个计算列的值。举个例子,显示最近一年的日期:

3,度量列(Measure)

度量值是在报表交互时对报表数据执行的聚合计算,度量值使用DAX定义字段的数据值,从数据模型中计算数据,不会修改数据模型,因此,度量值只会出现在Report View 和Data View中。度量值通常是用于聚合统计,基于用户选择的Filter,以显示不同的聚合值,由于度量值是聚合值,不是每行都有一个聚合值。举个例子,创建度量值 Answer Rate,其公式是:

Answer Rate = DISTINCTCOUNT(CloudThreads[AnsweredThreadID])/DISTINCTCOUNT(CloudThreads[ThreadID])

度量列能够引用其他表的数据列,根据数据模型中的关系,能够完成很多交互性的数据统计,非常强大,但是,也很绕、绕、绕……

二,报表可视化控件的设计

在显示报表数据时,PowerBI提供多种方式,能够对数据的显示进行微调,使数据显示的效果更合理。

1,层次结构( Hierarchy)

PowerBI 支持在Report View中创建字段的层次结构(Hierarchy),在同一个Query中,拖动一个字段到另一个字段下,PowerBI自动创建一个层次结构,并以父层次字段的名称命名,例如:

PowerBI内置一个可视化控件HierarchySlicer,能够显示字段的层次结构,在Fields中设置一个层次结构:

控件显示的结构是一个树形结构,点击“三角”,能够展开,以树形结构显示子级别的数据,HierarchySlicer支持逐层展开,如下图所示:

2,在Table控件中显示超链接(HyperLink)

在Product View中,选中Query的某一个字段,如下图,选中字段 ProfileLink,

Modeling菜单下,该字段的Data Type为Text,设置文本的Data Category为Web URL:

Table可视化控件的视图属性中,设置Values的URL Icon属性为On,

在Table控件中,Web URL的显示如下所示,点击LInk,能够直接打开浏览器,跳转到指定的网址:

3,数字的小数位的控制

可以在PowerBI中设置字段的数据类型,选中一个字段,打开Modeling菜单,

选择字段的数据类型,Format为 Decimal number,选择货币符号($), 显示百分比(%),千位分隔符(,),或小数位数(0-N),这里设置 显示的小数位数是1,只显示一位小数。

显示的效果如下,Score 保留一位小数点,并使用千位分割符号:

4,字段值的过滤

可视化(Visual)控件只显示排名靠前的TOP N行数据,这可以通过为字段设置过滤条件来实现,在FIELDS列表中,点击字段后面的”...“ ,添加过滤条件(Add filter),按照特定字段的值(By value),过滤当前字段的值:

例如,在一个Table visual中,把Filter Type设置为Top N,把Show items设置为Top 20,把By Value设置为度量值 Contribution Score,PowerBI按照度量值降序排列,只显示排名前20的数据行:

PowerBI 支持两种显示的项目(Show item)类型:Top和Bottom,PowerBI按照排序值(by value)降序排名。

字段的过滤类型,共有三种,如下图所示,可以根据需要,创建适合业务逻辑的过滤器:

三,根据当前的数据导出数据

在数据建模时,需要创建两个表之间的关系,PowerBI要求跟关系相关的两个数据列,必须有一列是唯一值,不允许存在重复值。在DimCalendar表中,存在DateKey列,该列是以int表示的日期类型,例如,2017年10月1日,用DateKey表示是20171001,从DimCalendar表中导出MonthKey,公式是MonthKey=DateKey/100。需要根据MonthKey列新建一个Query,做法是:

1,添加新的查询(Query)

在查询编辑器(Query Editor)中,选中列 MonthKey,右击弹出快捷菜单,选择“Add as New Query”,从当前列中新建查询

2,把List转换成Table

此时,新建的Query命名为MonthKey,是一个List类型,需要把List转换成Table,选中该List,打开主菜单Transform,点击“To table Convert”,把List转换成Table

从一个List创建Table,PowerBI需要用户选择界定符,该List没有任何界定符,选择None:

3,修改数据

新表的数据列名是Column1,右击弹出快捷菜单,点击“Rename”,把该列重命名为MonthKey,点击“Change Type”把该列的数据类型修改为“Whole Number”,点击“Remove Duplicates”,删除重复的数据值

4,查看导出数据表的实现步骤

在右侧的查询设置(Query Settings)中查看实现的步骤,选择某一个Step,点击Step 名称前的“×”,能够把该Step删除。

附:鉴于本人接触PowerBI的时间不长,cover的内容有限,后续有新的设计技巧,我会持续更新

参考文档:

Tutorial: Create calculated columns in Power BI Desktop

Tutorial: Create your own measures in Power BI Desktop

Power Query M Reference

Hyperlinks in tables

Measures in Power BI Desktop

Calculated columns in Power BI Desktop

PowerBI开发 第三篇:报表设计技巧相关推荐

  1. Agv、Rgv 车辆控制调度系统开发第三篇

    Agv.Rgv 车辆控制调度系统开发第三篇地图编辑器 Agv.Rgv 车辆控制调度系统开发第三篇地图编辑器 Agv.Rgv 车辆控制调度系统开发第三篇地图编辑器 前言 一.GOJS 二.使用步骤 1. ...

  2. PowerBI开发 第十三篇:增量刷新

    PowerBI 将要解锁增量刷新(Incremental refresh)功能,这是一个令人期待的更新,使得PowerBI可以加载大数据集,并能减少数据的刷新时间和资源消耗,该功能目前处于预览状态,只 ...

  3. PowerBI开发 第十篇:R 脚本

    R是一种专门用于数据分析和统计的脚本语言,广泛应用在每一个需要统计和数据分析的领域.PowerBI支持R脚本,两者强强结合,使PowerBI的功能更加强大.PowerBI Desktop默认没有安装R ...

  4. 在报表开发工具Stimulsoft Report报表设计中使用存储过程?

    本文主要介绍如何在Stimulsoft Report 设计中使用存储过程. 创建报表或仪表板时,通常使用存储过程来获取数据.在本文中,我们将介绍如何为常用数据源调用存储过程.使用存储过程创建数据源的复 ...

  5. PowerBI开发 第四篇:DAX表达式

    DAX 表达式主要用于创建度量列(Measure),度量值是根据用户选择的Filter和公式,计算聚合值,DAX表达式基本上都是引用对应的函数,函数的执行有表级(Table-Level)上下文和行级( ...

  6. 基于GBT28181:SIP协议组件开发-----------第三篇SIP注册流程分析实现

    原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3941172.html,qq:1269122125. 上两章节简要的 ...

  7. PowerBI开发 第21篇:关键因素(Key Influencer)

    关键因素(Key Influencer)图表能够帮助用户分析KPI的因素,并按照因素的重要性进行排名,也就是说,该图表可以查看哪些因素会影响到KPI,并计算出因素的相对重要性.使用Key Influe ...

  8. 项目实训-----unity多人游戏开发----第三篇

    游戏制作之人物移动(一) 综述 主体 内容1:人物移动控制方式 方式1:键盘控制 键盘控制角色的transform移动 特点 键盘控制角色的rigidbody移动 特点: 总结 综述 本次我们主要进行 ...

  9. 并行开发 —— 第三篇 plinq的使用

    2019独角兽企业重金招聘Python工程师标准>>> 1:AsParallel(并行化) 下面我们模拟给ConcurrentDictionary灌入1500w条记录,看看串行和并行 ...

  10. MFC开发IM-第三篇、资源视图--显示在另一个编辑器中打开

    VS2013 MFC对话框编程,资源视图--显示在另一个编辑器中打开 原创 2017年03月26日 22:47:24 标签: visual studio 3512 问题如下图:  解决办法:  一般这 ...

最新文章

  1. STM32常用数据类型 u8、u16、u32
  2. 软件设计是决定软件性能的关键
  3. 【Linux】- 获取root权限命令
  4. mysql与hive2.1.1安装和配置
  5. Linux的一些配置文件位置
  6. 谷歌吃苹果:新系统让Macbook秒变Chromebook
  7. 开发微信小程序中SSL协议的申请、证书绑定、TLS 版本处理等
  8. 【高德地图API】从零开始学高德JS API(六)坐标转换
  9. 这就是即将发布的苹果刘海屏MacBook Pro样机?
  10. Thunder团队第二周 - Scrum会议3
  11. iOS: 教你给UI控件添加Badge(消息提醒小圆点)
  12. ZED2+ORB_SLAM3
  13. ASP.NET2.0的控件状态和视图状态探讨
  14. C++ 设计模式 简单工厂模式
  15. Maven环境变量配置-win10
  16. 数独游戏技巧从入门到精通_免费教学视频数独阶梯训练让孩子从入门到精通,数学思维直线上升!...
  17. 关于IE浏览器的一些思路
  18. Unity的[Obsolete]属性
  19. 醉林疯的OJ 1058: 求解不等式
  20. 荣耀Magic5 Pro屏幕参数怎么样? 荣耀Magic5 Pro摄像头参数

热门文章

  1. OBS 卡顿原因 及 优化策略
  2. 修复cdn服务器连接异,cdn服务器连接异常怎么处理
  3. 10个城市logo设计
  4. 移动mm 话费支付接入过程(ane)
  5. HTC Vive开发笔记之手柄震动
  6. chrome18-使用network waterfall分析页面载入性能
  7. 【jQwidgets】简单封装示例
  8. 仲裁器设计(4)Weighted Round Robin
  9. 购物车中我的订单查询
  10. 2022年医院三基考试药师(中医临床)考试模拟试题卷及答案