powerbi开发第七篇:数据集和数据刷新

悦光阴 悦光阴     2022-09-22     421

关键词:

PowerBI报表是基于数据分析的引擎,数据真正的来源(Data Source)是数据库,文件等数据存储媒介,PowerBI支持的数据源类型多种多样。PowerBI Service(云端)有时不直接访问Data Source,而是直接从PowerBI Service创建的数据集(Dataset)中获取数据,数据集中存储的内容主要分为三部分:Data Source的数据(Data)、连接数据源的凭证(Credentials)、以及数据源的架构(Table Schema)等元数据(metadata)。PowerBI Service分析数据时,直接访问Dataset获取数据,执行聚合计算,以响应用户的查询请求。使用Dataset的好处是:PowerBI只需要维护统一的Data Store,不需要从众多不同的DataSource中读取数据,所需要的数据都能从单一的数据结构(Dataset)中读取。

PowerBI Service为每个发布的Report自动创建一个Dataset,每一个Dataset的大小的上限是1GB。在导入(Import)连接模式下,PowerBI把多个Data Source的数据导入到Dataset中,也就是说,Dataset存储的是多个数据源(Data Source)的快照。是否把数据源导入到Dataset,是由数据连接(Data Connection Model)决定的。

 

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

一,数据连接模式

当使用“Get Data”连接到Data Source时,PowerBI 自动创建Dataset,把数据从多个Data Source加载到一个Dataset中,Dataset还包含连接Data Source的凭证(Credentials),以及数据的架构等元数据。PowerBI Service直接从Dataset中引用数据,而不是直接从Data Source中。PowerBI支持的连接模式有两种,分别是:Import,Live/DirectQuery。导入(Import)模式把Data Source的数据导入到PowerBI Service的Dataset中,而直接查询(DirectQuery)模式建立Data Source 和Dataset之间的直接连接。

1,导入(Import)模式

对于导入(Import)模式,云端的Dataset中存储的数据来源于内网(On-Premises)数据的副本,一旦加载数据源,查询定义的所有数据都会被加载到Dataset中。PowerBI从高度优化的Dataset中查询数据,查询性能高,能够快速响应用户的交互式查询。由于导入模式是把数据源快照复制到Dataset中,因此,底层数据源的改动不会实时更新到Dataset,这使得Dataset存储的数据是过时的,用户需要手动刷新或设置调度刷新,否则,Dataset的数据不会更新。数据的刷新是全量更新,而非增量。

导入模式的限制是:Dataset的最大Size是1GB。

2,直接查询(DirectQuery)模式

对于DirectQuery模式,PowerBI直接访问底层的数据源,因此数据始终是最新的。一旦加载数据,PowerBI Service不会向Dataset中加载任何数据(Data),这意味着,Dataset不存储任何数据(Data),但是,Dataset仍然会存储连接Data Source的凭证,以及数据源的元数据,用于访问底层数据源。在执行查询请求时,PowerBI Service直接把查询请求发送到原始的Data Source中去获取所需的数据。直接查询采用主动获取数据的方式,这意味着,底层数据的任何更新,不会立即反应到现有的报表展示中,用户需要刷新(Refresh)数据,但是,新的查询请求,都会使用最新的数据。

直接查询模式需要使用本地数据网管(On-Premises Data Gateway),PowerBI Service能够从云端向本地数据源(on-premises data sources)发送查询请求。当产生数据交互行为时,查询直接发送到数据库,Excel,Azure SQL DB/DW等,由于PowerBI和Data Source之间是直接连接,因此,不需要调度数据PowerBI Service的数据集(Dataset)。

Live/DirectQuery – This means there is a live connection between Power BI and the data source.

DirectQuery连接模式的好处是:

  • 能够访问更大Size的Dataset:由于不需要把数据加载到Dataset中,DirectQuery模式能够从海量的数据源中加载数据;
  • 直接访问数据源:在DirectQuery模式下,PowerBI使用的是最新的数据。

DirectQuery连接模式的调优:

在使用DirectQuery连接模式时,如果查询数据源的速度非常慢,以至于需要等待一段时间才能从基础数据表获得响应,那么可以在报表中设置Query reduction选项,向数据源发送更少的查询,使查询交互更快。

为了设置Query reduction选项,你需要点击 File 主菜单,点击菜单的路径是:File > Options and settings > Options,然后在CURRENT FILE目录下,选择 Query reduction 选项卡:

禁用默认的交叉高亮:在整个Report上禁用默认的交叉高亮显示,所谓交叉高亮,是指当用户点击Visualization上的某一行数据时,其他Visualization相关联的相关数据行也会高亮显示。在禁用交叉高亮之后,用户可以通过Visual interactions功能,手动为特定的Visual启用交叉高亮,默认情况下,是禁用交叉高亮。

在Slicer或Filer上显示一个Apply按钮:用户可以选中相应的选项,但是,只有在点击Apply按钮之后,用户选中的Slicer或Filer才会用于过滤数据。

二,数据刷新(Data Refresh)

PowerBI Service从Dataset中获取数据,用于数据分析和展示,用户可以通过"SCHEDULE REFRESH"和"REFRESH NOW"刷新Dataset的数据,把Dataset的数据更新到最新。用户刷新Dataset之前,必须配置内网数据网关(On-Premises Data Gateway),详细信息,请参考我的博文《PowerBI开发 第六章:数据网管》。PowerBI Service对数据Dataset的刷新是完整数据刷新,而不是增量数据刷新。

When you refresh data, you are updating the data in the dataset that is stored in Power BI from your data source. This refresh is a full refresh and not incremental.

当使用Import连接模式时,所有的数据都会从Data Source导入到PowerBI Service的缓存中,PowerBI的可视化控件都是从缓存中查询数据。一旦PowerBI文件发布到PowerBI Service中,PowerBI 将会创建一个Dataset,用于存储被导入的数据。设置调度,定时刷新Dataset,使得PowerBI呈现最新的分析数据,对于做出正确的决策是非常重要的。

三,连接模式的性能

推荐使用导入(Import)连接模式,这是因为PowerBI 使用内存的列式数据库 VertiPaq,用于对已发布的数据集(Dataset)进行数据压缩和快速处理,能够使PowerBI报表执行脱机访问,面向列的处理,高度优化对1:N关系的处理性能。导入模式非常适合聚合查询,特别是,当存在大量的关系时,PowerBI能够快速执行聚合运算。导入模式的缺点是Dataset的Size最大是1GB,需要调度刷新才能访问最新的数据。

直接查询(DirectQuery)模式,建立PowerBI和Data Source之间的直接连接,访问的数据始终是最新的,并且数据源的大小是无限制的。在直接查询模式下,PowerBI直接发送查询到Datasource中,以获取所需要的数据。当Data Source是关系型数据库时,PowerBI直接发送SQL查询语句到数据库中。直接查询模式的最大缺点是性能问题。

在直接查询模式下,所有的直接查询请求都直接发送到源数据库中,后端数据源响应查询请求的速度决定了直接查询的性能。虽然PowerBI尽可能的优化生成的SQL命令,但是,通过监控发现,PowerBI最终生成的SQL命令是非常低效的,特别是在查询海量的数据源时,后端(Back-end)数据源需要执行很长时间,才能返回结果。等待的时间超过30s,用户体检就很不理想了。当导入模式不能满足业务需求时,再考虑直接查询模式。

四,数据加载(并行和串行)

在设计PowerBI 报表时,我们使用两种方式来刷新数据,可以手动逐个地刷新Query,也可以点击Refresh按钮同时刷新所有的Query。当点击刷新全部(Refresh All)时,由于系统内存的限制,刷新操作可能会失败。PowerBI Desktop加载数据的方式可以是串行的,也可以是并行的,默认是并行的,以串行方式加载数据,不需要很大的内存就可以完成。当PowerBI需要刷新很多Query时,刷新全部可能会使PowerBI占用过多的系统内存而发生错误,此时,可以设置PowerBI,使其以串行的方式加载数据以解决这个问题。

设置串行加载数据的步骤是:点击File->Opions & Settings->Options,如下图所示,在CURRENT FILE选项卡中,打开"Data Load"分组,勾选“Enable parallel loading of tables”,启用PowerBI的串行加载数据模式。

然而,这种模式只是以串行的方式把数据加载到PowerBI的缓存中,当在数据模型中创建连接时发生异常,或者在等待数据源返回数据集时出现异常,

数据刷新仍然会失败。PowerBI的刷新全部数据(Refresh All)的工作流程类似于事务,只有当全部的数据集都刷新成功时,数据刷新才是成功的;只要有一个数据集刷新失败,整个刷新操作就失败。

当需要查询的数据集较多时,用户体验非常差。如果PowerBI不能解决大量数据集的刷新问题,那么其功能是不完善的,期待PowerBI 团队后续的更新会修复这个异常。

 

参考文档:

Data refresh in Power BI

Use DirectQuery in Power BI Desktop

Power BI and DirectQuery

第七篇pythonio操作

文章目录10文件操作10.1打开与关闭10.1.1打开文件10.1.2关闭文件10.2文件的读写10.2.1写数据(write)10.2.2读数据(read)10.2.3读数据(readlines)10.2.4读数据(readline)10.3文件的常用操作10.3.1获取当前读写的位置10.3.2定位到某个位置10.3.3文件... 查看详情

第七篇pythonio操作

文章目录10文件操作10.1打开与关闭10.1.1打开文件10.1.2关闭文件10.2文件的读写10.2.1写数据(write)10.2.2读数据(read)10.2.3读数据(readlines)10.2.4读数据(readline)10.3文件的常用操作10.3.1获取当前读写的位置10.3.2定位到某个位置10.3.3文件... 查看详情

数据结构第七篇——顺序栈

?注:未经博主同意,不得转载。  栈(stack)是常用的重要数据结构,其应用十分广泛。栈是一个操作受限的线性表,其插入和删除操作都在表的同一端进行。  其中允许操作的一端称为栈顶(top),另一端称为栈底(bottom... 查看详情

第七篇:数据预处理-数据归约(pca/efa为例)

前言    这部分也许是数据预处理最为关键的一个阶段。    如何对数据降维是一个很有挑战,很有深度的话题,很多理论书本均有详细深入的讲解分析。    本文仅介绍主成分分析法(PC... 查看详情

数据分析第七篇:相关分析(代码片段)

相关分析是数据分析的一个基本方法,可以用于发现不同变量之间的关联性,关联是指数据之间变化的相似性,这可以通过相关系数来描述。发现相关性可以帮助你预测未来,而发现因果关系意味着你可以改变世界。 一,协... 查看详情

小刘同学的第七篇博文

真是醉了,最近笔记本坏了没办法,只好给自己的平板装数据库,而且平板没有网线接口,只有用校园网下,500KB,很酸爽。。。上午上了一下午,然后又解了个压,解压解了半小时,平板的配置是真的低。。。又安装了一下午... 查看详情

r语言学习第七篇:列表(代码片段)

列表(List)是R中最复杂的数据类型,一般来说,列表是数据对象的有序集合,但是,列表的各个元素(item)的数据类型可以不同,每个元素的长度可以不同,是R中最灵活的数据类型。列表项可以是列表类型,因此,列表被认... 查看详情

java笔记第七篇数据类型初了解(下,后含有循环输出a-z)

#日常唠叨1#怎么这么久没有更新?因为小星星的学校在没有提前通知的情况下开展了军训,没有时间打博客。现在已经是9月1日之后了,决定每周日更新,一周一更#日常唠叨2#有人问知道这些数据类型有什么用?嘻嘻,到了变量... 查看详情

mongodb基础教程系列--第七篇mongodb聚合管道

在讲解聚合管道(Aggregation Pipeline)之前,我们先介绍一下MongoDB的聚合功能,聚合操作主要用于对数据的批量处理,往往将记录按条件分组以后,然后再进行一系列操作,例如,求最大值、最小值、平均值,求和等操作。聚... 查看详情

flask第七篇flask中的wtforms使用

一、简单介绍flask中的wtformsWTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。安装:pip3installwtforms二、简单使用wtforms组件1、用户登录具体代码:fromflaskimportFlask,render_template,request,redirectfromwtforms.fieldsimp... 查看详情

powerbi如何制作地图数据表?powerbi如何在地图上标出数据啊?

参考技术A打开软件,添加一个标线地图。把汇总字段添加到汇总区域,城市名称添加到行维度。切换到开发者模式,在“属性”--“常规”--去掉“炫光”的勾选--刷新一下地图图表--在“点大小”调节到合适的大小并刷新地图图... 查看详情

powerautomate自动刷新powerbi数据集

参考技术A在工作区刷新powerbi数据集被限定在整点或者30分,而利用PowerAutomate自动刷新powerbi数据集,可以是任何时间,一分钟一次刷新也行,但是普通或Pro帐号,使用流每天也不能刷新超过8次1.登录flow.microsoft.com2.创建计划流3.... 查看详情

试图了解自动刷新 Power BI 数据的问题

】试图了解自动刷新PowerBI数据的问题【英文标题】:TryingtounderstandproblemautomaticallyrefreshingPowerBIdata【发布时间】:2021-12-0123:10:58【问题描述】:我是一位经验丰富的开发人员,对PowerBI知之甚少。因此,我们聘请了一些顾问来实... 查看详情

vue.js学习笔记第七篇表单控件绑定

本篇主要说明表单控件的数据绑定,这次没有新的知识点文本框1、普通文本框<divid="app-1"><p><inputv-model="textBox"placeholder="输入内容...">输入的内容:{{textBox}}</p></div><scripttype="text/javascript">varvm1=ne 查看详情

第七篇:两个经典的文件io程序示例

前言    本文分析两个经典的C++文件IO程序,提炼出其中文件IO的基本套路,留待日后查阅。程序功能  程序一打印用户指定的所有文本文件,程序二向用户指定的所有文本文件中写入数据。程序一代码及其注释1#... 查看详情

第七篇:面向对象高级

第七篇:面向对象高级   PYTHON-绑定方法反射内置函数PYTHON-组合封装多态property装饰器 查看详情

jdk11|第七篇:zgc垃圾收集器(代码片段)

...w一、简介Java11包含一个全新的垃圾收集器--ZGC,它由Oracle开发,承诺在数TB的堆上具有非常低的暂停时间。在本文中,我们将介绍开发新GC的动机,技术概述以及由ZGC开启的一些可能性。那么为什么需要新GC呢?毕竟Java10已经有四... 查看详情

springboot之旅第七篇-docker

...系统,除了原生的操作系统外,还要另外安装一些必要的开发软件,如果每台电脑都重新去安装的话工作量就很大了,这个时候就使用了windows镜像系统,我们将要安装的软件装好打包成一个镜像,其他电脑只要装这个镜像就可... 查看详情