数据可视化之powerBI入门(九)PowerBI数据建模:其实一点都不高深
https://zhuanlan.zhihu.com/p/64149834
数据建模并没有那么高深,你同样可以学会!这篇文章通过一个实例创建一个简单的数据建模,并引出两个重要的概念:度量值和DAX.
之前谈论PowerBI与Power Pivot的关系时就提到,Power BI数据建模其实就相当于Excel的Power Pivot插件,不过这个插件已内嵌到PowerBI Desktop中了,两者的功能基本相同。Pivot是透视的意思,那么PBI的数据建模也和透视有许多共通之处。
使用的数据透视表的都知道,透视表只能从单个表中取数,如果想把其他表中的数据也放进来,只能先利用Vlookup把其他表的数据合并过来,然后再把这个字段放到透视表中。这只适用于数据非常简单的情况,如果数据量大或者维度很多,用透视表就无法满足需求了。
Power BI突破了这个限制,可以从多个表格、多种来源的数据中,根据不同的维度、不同的逻辑来聚合分析数据;而提取数据的前提是要将这些数据表建立关系,这个建立关系的过程就是数据建模。
以一个实例来理解数据建模。
比如有个电子产品专卖店,销售产品有三类:手机、电脑、平板,每一类又分别来自三个品牌:小米、苹果、三星,那么这个店销售的产品共计9个,其销售明细也是记录这些产品每天的销售数据,

为了能分析每个品牌的销售金额,或者分析每个产品类别的销售情况,其实还应该设计个产品明细表以及对应的品牌表和种类表,像这样的:

从这四个表中很容易就能想到它们之间的关系,品牌表和产品类别表分别和产品明细表中的品牌与产品种类相对应,而产品明细表中的产品编号和销售明细表中的产品编号相对应。
下面就演示一下在Power BI Desktop中建立一个模型,导入以后点击关系,出现这4张表,

可以看出产品明细表和销售明细表之间已经有一条线,这是由于表格导入后,PowerBI会自动检测关系并联接,没有检测到的表,可以点击一个表中的字段托到另一个表的对应字段上,就可以建立关系了,把类别表、品牌表和产品明细表建立关系后,关系图如下:

一个简单的数据模型就建立好了,可以点进去看看建立模型的相关参数。
点击关系连接线,两边的表对应的连接字段会框选,双击关系线,进入编辑关系窗口:

编辑关系窗口可以看出关联的两个表和对应的字段,也可以更改联结的字段;下面还有两个可选项,基数和交叉筛选方向。
基数
基数就是两个连接字段的对应关系,分为多对一、一对一和一对多,一对多和多对一其实是一样的,实际上就是两种关系:
- 多对一(*:1):这是最常见的类型,代表一个表中的关系列有重复值,而在另一个表中是单一值
- 一对一(1:1):两个表是一对一的关系,列中的每个值在两个表中都是唯一的
具有唯一值的表通常称为“查找表”,而具有多个值的表称为“引用表”。在上述的关系图上,产品明细表上类别手机、平板、电脑都不是唯一的,每个品牌都有这种类型,是个引用表;但类别表上,几种类别都是唯一值,因此这两个表是多对一的关系,类别表也就是查找表。
交叉筛选方向
表示数据筛选的流向,有两种类型:
- 双向:两个表可以互相筛选
- 单向:一个表只能对另一个表筛选,而不能反向
这个稍微有点抽象,以后可以根据实例来理解。
根据刚才建立的数据模型,可以做一下分析,比如统计各品牌产品的销售额:
在销售明细表中并不能直接统计出按品牌的销售额,可以先建一个度量值,在建模选项卡下,点击新建度量值,公式栏输入:
销售额 = sum('销售明细表'[金额])
然后[销售额]这个度量值就建立了,在右边字段区可以看到。

为了在画布上直观的看到各品牌销售额,在可视化里添加“卡片图”,把度量值字段放进去,可以看到卡片图的数字出来了,

这个数字是整体销售金额,因为还没有做任何筛选,为了看出各品牌的销售金额,现在添加一个品牌的切片器,

点击不同的品牌,数值跟着变化,通过这个例子,可以看出:
- 展现的数字并不是一个表得出的,根据之前建立的关系模型,销售明细表中的数据被品牌表中的[品牌名称]字段所筛选,展现出来不同品牌的销售额,这就是数据模型的威力。
- 品牌销售额是通过[销售额]这个度量值,加入到卡片图中,并可与切片器交互,展现不同的数据。
通过这个实例,还看到了以前从未见过的的概念:度量值,这可以说是PowerBI数据建模的灵魂,创建度量值的公式称为DAX公式(看起来和Excel公式非常相似),刚才创建的这个度量值只是一个简单的sum函数,并没有任何的过滤条件,但是却可以根据切片器的筛选而展现不同的数值,所以度量值被称为移动的公式,这里只是简单介绍,有个印象即可。
学习数据建模的更多知识,可以说都是依据度量值的逻辑以及建立度量值的DAX公式来展开,是下一步学习Power BI的重点。
本文案例数据可在公众号回复“建模案例数据”下载。
数据可视化之powerBI入门(九)PowerBI数据建模:其实一点都不高深的更多相关文章
- Python图表数据可视化Seaborn:1. 风格| 分布数据可视化-直方图| 密度图| 散点图
conda install seaborn 是安装到jupyter那个环境的 1. 整体风格设置 对图表整体颜色.比例等进行风格设置,包括颜色色板等调用系统风格进行数据可视化 set() / se ...
- 一招教你轻松使用数据可视化BI软件创建旅游消费数据可视化大屏
灯果数据可视化BI软件是新一代人工智能数据可视化大屏软件,内置丰富的大屏模板,可视化编辑操作,无需任何经验就可以创建属于你自己的大屏.大家可以在他们的官网下载软件. 本文以旅游消费数据可视化大屏为 ...
- 不懂怎么创建可视化大屏?手把手教你使用数据可视化BI软件创建工厂车间数据监控大屏
灯果数据可视化BI软件是新一代人工智能数据可视化大屏软件,内置丰富的大屏模板,可视化编辑操作,无需任何经验就可以创建属于你自己的大屏.大家可以在他们的官网下载软件. 本文以工厂车间数据监控大屏为例 ...
- 数据可视化:使用python代码实现可视数据随机漫步图
#2020/4/5 ,是开博的第一天,希望和大家相互交流学习,很开森,哈哈~ #像个傻子哟~ #好,我们进入正题, #实现功能:利用python实现数据随机漫步,漫步点数据可视化 #什么是 ...
- 数据可视化基础专题(九):Matplotlib 基础(一)坐标相关
1.前言 图表要素如下图所示 # sphinx_gallery_thumbnail_number = 3 import matplotlib.pyplot as plt import numpy as ...
- python数据可视化——matplotlib 用户手册入门:使用指南
参考matplotlib官方指南: https://matplotlib.org/tutorials/introductory/usage.html#sphx-glr-tutorials-introd ...
- python数据可视化——matplotlib 用户手册入门:pyplot 画图
参考matplotlib官方指南: https://matplotlib.org/tutorials/introductory/pyplot.html#sphx-glr-tutorials-intro ...
- 数据可视化系列--svg入门基础(一)
一.前言 1.SVG(Scalable Vector Graphics)可伸缩矢量图形 特点: (1)使用xml格式来定义图形: (2)用来定义web上的使用的矢量图: (3)改变图像尺寸,图片质量不 ...
- 数据可视化之powerBI技巧(六)在PowerBI中简单的操作,实现复杂的预测分析
时间序列预测就是利用过去一段时间内的数据来预测未来一段时间内该数据的走势,比如根据过去5年的销售数据进行来年的收入增长预测,根据上个季度的股票走势推测未来一周的股价变化等等. 对于大部分人来说,这是个 ...
随机推荐
- 对select函数的理解
对select函数的理解 1. 处理多个socket链接的方法 阻塞模式下服务端要解决多个客户链接的问题的3个思路: 每个客户端的socket对应一个内核线程,在这个线程内部进行阻塞的read 单线程 ...
- 解决 React Native Android:app:validateSigningRelease FAILED 错误
RN 运行的时候报这个错这咋办:
- oracle包package的使用
创建包 包头: CREATE OR REPLACE PACKAGE test_pkg IS PROCEDURE update_sal(e_name VARCHAR2,newsal NUMBER); ...
- JavaWeb网上图书商城完整项目-CommonUtils(1生成uuid,2Map转换成JavaBean)
java工程中添加上面的jar包 CommonUtils类就两个方法: l String uuid():生成长度32的随机字符,通常用来做实体类的ID.底层使用了UUID类完成: l T toBe ...
- Idea激活JRebel
选择license激活 UUID 生成地址: http://www.uuid.online 激活地址 http://jrebel-license.jiweichengzhu.com/ UUID
- 状态机模式 与 ajax 的结合运用
太神奇了,昨晚做了个梦,梦中我悟出一个道理:凡是涉及到异步操作而且需要返回值的函数,一定要封装成 Promise 的形式,假如返回值取决于多个异步操作的结果,那么需要对每个异步操作进行状态的设计,而且 ...
- 弹性盒模型中flex-grow 和flex的区别
在flex弹性盒模型体系中,flex-grow和flex都有对子元素进行放大的作用,但是这两个属性在放大时的计算方法不同,在使用时候要注意,使用正确的放大属性,从而达到自己想要的效果. 先来看下两个属 ...
- MongoDB快速入门教程 (2)
2.MongoDB的基本的CRUD操作 2.1.创建文档 在具体操作之前,想要知道有多少数据库,可以执行下面命令 show dbs 在mongodb中,数据库中包含的叫做集合(表),集合中存储的内容叫 ...
- 全栈的自我修养: 001环境搭建 (使用Vue,Spring Boot,Flask,Django 完成Vue前后端分离开发)
全栈的自我修养: 环境搭建 Not all those who wander are lost. 彷徨者并非都迷失方向. Table of Contents @ 目录 前言 环境准备 nodejs v ...
- [USACO11JAN]Roads and Planes G【缩点+Dij+拓补排序】
题目 Farmer John正在一个新的销售区域对他的牛奶销售方案进行调查.他想把牛奶送到T个城镇 (1 <= T <= 25,000),编号为1T.这些城镇之间通过R条道路 (1 < ...