PowerBI入门学习笔记

2023-11-15

下载安装

Win10系统,在微软商店里直接下载PowerBI desktop,打开即可。
界面如下:

接下来导入后面要用到的数据,我目前用的都是Excel文件,“获取数据”,选中后选择要导入的若干个工作表:

点击“加载数据”就进入到power query编辑器,用于对数据进行清洗等操作。进入pq还有几种方式,比如当你直接确定导入工作表了,可以点击【主页】中的【转换数据】或右键某个你要清洗的表,点击【编辑查询】。

一、Power Query

(一) 横向追加数据

1. 添加列

在pq的【添加列】中,

  • 重复列
    右键所要重复的列,点击【重复列】,即可得到列“列名-复制”

  • 索引列
    为每行增加个序号,记录每一行所在的位置,可以从0或者1开始

  • 条件列
    添加一列根据指定条件从其他列计算的数据,打开窗口看看,其实就是 if 函数。

  • 自定义列
    自定义列就是使用M函数生成新的一列,例如这里,添加一列合计,为三大产业之和,得到:

  • 合并查询
    相当于Excel的VLOOKUP函数。例如我要将订单表中每个客户购买的产品名称通过【客户姓名】匹配到客户工作表,新增一列:


    步骤:点击工作表【客户】,点击主页的【合并查询】,

    跳出窗口,在方框中选中sheet页,再点击两个表的匹配字段【客户姓名】使其呈灰色,就可以了,

    得到如下:

    订单列可选中你想匹配过去的东西,比如【产品名称】等,任选:

    这里我选了【产品名称】和【数量】,这样工作表【订单】的【产品名称】和【数量】就通过客户姓名匹配到工作表【客户】中了。

(二)纵向追加数据

  • 追加查询
    在现有记录的基础上,在下边添加新的行数据,比如有两个表格式相同,需要合并为一个表,点击“追加查询”,两个表的结构应一致。

(三)提升标题

当Excel工作表导入进去后,将excel里第一行作为标题,可点击【转换】中的【将第一行用作标题】,但我这里导入就已经将第一行作为了标题了,

我点了一下【将第一行用作标题】,出现了将第一行数据作为标题了,要撤销这一步,ctrl+Z没用,而是分别删除【更改的类型】右边的步骤【提升的标题】。

(四)更改数据类型

点击字段名称左边那个东西,进行数据类型的更改。

(五)删除错误/空值

对有空值或错误的列,右键【删除错误】或【替换错误】;点击筛选,【删除空】

(六)删除重复项

右键【删除重复项】

(七)填充

从excel中导入的合并单元格的数据会出现这种情况,


可以通过向下填充的方式补齐null值,【转换】→【填充】→【向下】:

(八)合并列

在PQ中选择需要合并的列,然后在「转换」中找到”合并列“,弹出合并列窗口。现在合并列【客户姓名】和【客户代码】,用冒号连接,


不是新增列哦,合并了就取代了原本的两个列:

(九)拆分

拆分相当于是合并列的反动作,不过功能更丰富,可以选着按字符数,也可以选择按分隔符,如果列中包含多个分隔符,还可以选择按哪个位置的分隔符来拆分。把刚刚合并的列拆开:

有几种方式,这里用分隔符:

(十)分组

相当于Excel中的分类汇总功能,比如我要计算这些省第一产业的总和,点击分组依据:


【新列名】是自定义的,【柱】是要汇总的列

(十一)提取

PQ的提取功能可以按照长度、首字符、尾字符、范围等来提取,比如刚刚合并的这个列,提取冒号之前的文本,【转换】→【提取】→【分隔符之前的文本】:


(十二)行列转置

比如这个表,点击【转换】中的【转置】后,


发现【年度】和【第一产业】等没了,这是因为转置只转了数据区,字段标题不在数据区,要把它们降下来,【将第一行用作标题】→【将标题作为第一行】
在这里插入图片描述
再转置:

(十三)逆透视列

这是PQ非常便捷的逆天功能,由于数据分析的需要,我们经常要将二维表变为一维表,通过逆透视功能,可以一键降为一维表。例如二维列联表:

选中列【地区】和【年度】,通过【转换】→【逆透视列】→【逆透视其他列】
在这里插入图片描述
就转换为一维的:

(十四)透视列

做分析需要一维表,而为了展现的需要,常常还要把一维表变成二维表,也就是Excel中的数据透视,在PQ中同样可以一键透视,比如把刚才的一维表变成原样,聚合方式选择“不要聚合”。
对刚刚那个逆透视的表,将【值】进行透视:

(十五)M函数

略过……以后有时间再研究

二、PowerBI

(一)数据建模

即找寻各个工作表之间的关系,联结起来,我初步理解为SQL中的表联结。例如,这6个工作表:

观察每个表的外键,在【模型】中建立模型,将一个表的外键选中拖到另一个相同的外键,中间就有一条线连起来了。

双击那个三角形,

【基数】是指两个连接字段的对应关系,分为多对一、一对一和一对多,一对多和多对一其实是一样的,实际上就是两种关系:

  • 多对一(*:1):这是最常见的类型,代表一个表中的关系列有重复值,而在另一个表中是单一值
  • 一对一(1:1):两个表是一对一的关系,列中的每个值在两个表中都是唯一的
    具有唯一值的表通常称为“查找表”,而具有多个值的表称为“引用表”。
    【交叉筛选方向】表示数据筛选的流向,有两种类型:
  • 双向:两个表可以互相筛选
  • 单向:一个表只能对另一个表筛选,而不能反向
    这个有点抽象,目前我没懂。

(二)度量值

度量值是用DAX公式创建一个虚拟字段的数据值。仍然以上面6个工作表为例,新加度量值【销售总额】、【本年累计销售额】、【上年累计销售额】、【同比增长率】。
在【数据】中点击【新建度量值】,在编辑栏输入销售总额 = sum('销售明细'[销售额])

本年累计销售额 = TOTALYTD([销售总额],'日期表'[日期])

上年累计销售额 = TOTALYTD([销售总额],SAMEPERIODLASTYEAR('日期表'[日期]))

同比增长率 = DIVIDE([本年累计销售额],[上年累计销售额])-1


这里的DAX函数会在后面深入DAX的文章说明。

现在来可视化,点击【矩阵】,将【月】拖至【行】,将度量值【销售总额】拖至【值】

得到:

显然这是不分2016年2017年的,因此做一个【切片器】。点击【切片器】,将【年度】拖至【字段】:


再点击【矩阵】,将【月】拖至【行】,将【本年累计销售额】、【上年累计销售额】、【同比增长率】拖至【值】:

得到:

整个可视化结果如下:

点击不同【年份】结果跟着变化。

(三)DAX函数

1. DAX参数的基本格式
  • 表名用单引号’ '括着 如 ‘日期表’
  • 字段用中括号[ ]括着 如[日期]
  • 度量值也是用中括号[ ]
  • 引用字段始终要包含表名,以和度量值区分开
2. DAX常用函数
(1)聚合函数
  • SUM
  • AVERAGE
  • MIN
  • MAX
    这几个函数跟Excel中一样。
  • SUMX
  • AVERAGEX
  • MINX
  • MAXX
  • RANKX
    这几个函数可以循环访问表的每一行,并执行计算,所以也被称为迭代函数。

其他的聚合函数:

  • COUNT:计数
  • COUNTROWS:计算行数
  • DISTINCTCOUNT:计算不重复值的个数
(2)时间智能函数
  • PREVIOUSYEAR/Q/M/D:上一年/季/月/日
  • NEXTYEAR/Q/M/D:下一年/季/月/日
  • TOTALYTD/QTD/MTD:年/季/月初至今
  • SAMEPERIODLASTYEAR:上年同期
  • PARALLELPERIOD:上一期
  • DATESINPERIOD:指定期间的日期
    它们可以灵活的筛选出一段我们需要的时间区间,做同比、环比、滚动预测、移动平均等数据分析时,都会用到这类函数。
(3)筛选函数
  • FILTER:筛选
  • ALL:所有值,可以清除筛选
  • ALLEXCEPT:保留指定列
  • VALUES:返回不重复值
  • CALCULATE
    这几个函数是典型的DAX查询函数,通过筛选来操纵上下文的范围。
    微软DAX文档:https://docs.microsoft.com/en-us/dax/
    https://docs.microsoft.com/zh-cn/dax/new-dax-functions

CALCULATE:
语法结构:CALCULATE(<expression>,<filter1>,<filter2>…)

  • 第一个参数是计算表达式,可以执行各种聚合运算
  • 从第二个参数开始,是一系列筛选条件,可以为空;如果多个筛选条件,用逗号分隔
  • 所有晒选条件的交集形成最终的筛选数据集合
  • 根据筛选出的数据集合执行第一个参数的聚合运算并返回运算结果

案例,工作表【产品明细】:
先看countrows:产品数量 = COUNTROWS('产品明细'),其实就是计算了总行数,

往行里加点东西,


接下来看calculate:

  • 筛选内容为空
    创建度量值【产品数量1】产品数量1 = CALCULATE([产品数量]) 也可以产品数量1 = CALCULATE(COUNTROWS('产品明细'))

  • 添加限制条件
    添加度量值【产品数量2】产品数量2 = CALCULATE([产品数量],'产品明细'[品牌]="苹果")

    只有苹果的产品计数显示出来了。

  • 结合ALL函数,扩大上下文
    创建度量值【产品数量3】产品数量3 = calculate([产品数量],ALL('产品明细'))

  • 重置上下文
    创建度量值【产品数量4】产品数量4 = CALCULATE([产品数量],ALL('产品明细'[产品名称]),'产品明细'[类别]="手机")

    filter:
    语法:FILTER(< table>,< filter>)

  • 第一个参数< table>是要筛选的表

  • 第二个参数< filter>是筛选条件

  • 返回的是一张表,不能单独使用,需要与其他函数结合使用
    案例(上面度量值的数据):
    度量值[产品数量2] =CALCULATE([产品数量],'产品明细'[品牌]="苹果")
    与度量值[产品数量5]= CALCULATE([产品数量],FILTER(ALL('产品明细'[品牌]),'产品明细'[品牌]="苹果"))返回结果一样。先看度量值1 = FILTER(ALL('产品明细'[品牌]),'产品明细'[品牌]="苹果")的结果:


    这时看起来似乎filter比calculate要麻烦,但其实它功能更强大。
    现在想找出年销售额超过2000万的城市销售金额,这个利用简单的表达式已无法解决,来看FILTER如何实现。
    度量值1销售总额 = sum('销售明细'[销售额])
    度量值2大于2000万的城市销售总额 = CALCULATE([销售总额],FILTER(ALL('销售明细'[门店城市]),[销售总额]>20000000))

    尽管这里可以得到大于2000万的城市销售总额,但很明显其合计不等于总合计。

CALCULATE(…,FILTER(ALL(…),…))      做各种分析时会经常用到这个组合。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PowerBI入门学习笔记 的相关文章

  • 微信小程序,计算时分秒时间差

    shijiancha function faultDate completeTime var stime Date parse new Date faultDate var etime Date parse new Date complet
  • r语言(总)(我命油我不油天)

    seq等间隔函数 seq from to by length out along with from to 为数值 表示开始和结束 by为数值 表示间隔 length out为数值 表示数列长度 along with为向量 表示数列长度与该
  • fabric基本概念

    Hyperledger fabric基本概念 首先fabric是由IBM贡献的超级账本框架 它是一个利用现有成熟的技术来组合而成的一个区块链技术的实现 它是一种允许可插拔实现各种功能的的模块化架构 它具有强大的容器技术 来承载各种主流语言来
  • C语言进阶——文件管理

    每当我们写好一段代码运行结束之后 再次运行的时候就会发现 之前在终端上输入的数据都会消失 那么如何把之前输入的数据保存下来呢 我们一般把数据持久化的方式有把数据存放在磁盘文件中 存放到数据库 打印等方式进行保存 使用文件我们可以直接将数据保
  • Mysql字符串处理函数详细介绍、总结

    1 ASCII str 返回字符的 ASCII 码值 返回值为字符串str 的最左字符 第一个字符 的数值 即取得最左字符的 ascii 码 假如str 为空字符串 则返回值为 0 假如 str 为 NULL 则返回值为 NULL ASCI
  • unity 不显示UI项,代码无法引用UI类

    如果在unity项目中遇到在Hierarchy面板右键发现没有ui这个选项 在vs里无法引用到UI类时可以进行以下操作 1 可以在unity的Project面板 选中Assets文件夹 右键选择 show in Explorer选项 开打资
  • vue3.0 新的api属性

    vue3 0 只需要升级vuecli4 0以上的版本就可以选择性的安装了 获取路由对象 import useRouter from vue router const router useRouter router push 即可调用路由跳转
  • 【转载】国内主要的量化交易平台及链接

    Bigquant 掘金 优矿 万矿 聚宽 米筐 真格 镭矿 量化云 点宽等 附 网站网址 Bigquant https bigquant com 掘金 https www myquant cn 优矿 https uqer io v3 com
  • java基础 基本包装类 System Math Array BigInteger BigDecimal

    基本类型包装类 1 1 基本类型包装类概述 在实际程序使用中 程序界面上用户输入的数据都是以字符串类型进行存储的 而程序开发中 我们需要把字符串数据 根据需求转换成指定的基本数据类型 如年龄需要转换成int类型 考试成绩需要转换成doubl
  • 面试题 08.08. 有重复字符串的排列组合--回溯算法

    LeetCode 面试题 08 08 有重复字符串的排列组合 有重复字符串的排列组合 编写一种方法 计算某字符串的所有排列组合 示例1 输入 S qqe 输出 eqq qeq qqe 示例2 输入 S ab 输出 ab ba 解法 回溯法
  • 二分查找及二分答案

    一 二分思想 二分是一种常用且非常精妙的算法 常常是我们解答问题的突破口 二分的基本用途是在单调序列或单调函数中做查找操作 因此当问题的答案具有单调性时 就可以通过二分把求解转化为判定 根据复杂度理论 可知判定的难度小于求解 这使得二分的应
  • (优雅的使用)matlab脚本编程习题2

    matlab脚本编程习题2 输入一个四位整数 求出各位数字之和 如果该和能被3整除 输出 这个数可以被3整除 否则输出 这个数不可以被3整除 num input input the four digit integer n A zeros
  • C++解析xml(使用tinyxml)

    环境是vs2010 Windows 7 timyxml库我是在这里下载的 直接就能编译 编译后得到tinyxml lib 使用时当然也需要tinyxml h文件 如果不想编译 这里能下载我编译好的lib 顺便附赠h文件 我程序中解析的xml
  • 【计组】学习笔记1.1:8421码和ASCII码

    8421码 8421码即BCD码 由于人们习惯日常使用十进制数 而计算机处理时使用的是二进制数 而两种数制相互转换十分麻烦 因此产生了8421码映射关系 其映射运算例如 1001转化为十进制数9 1 8 0 4 0 2 0 1 8 0 0
  • python算法中的机器学习算法之半监督学习和强化学习(详解)

    目录 学习目标 学习内容 1 半监督学习 Semi Supervised Learning 基于图的半监督学习
  • 编码器计数原理与电机测速原理——多图解析

    编码器 是一种用来测量机械旋转或位移的传感器 它能够测量机械部件在旋转或直线运动时的位移位置或速度等信息 并将其转换成一系列电信号 编码器分类 按监测原理分类 光电编码器 光电编码器 是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或
  • 使用Pycharm,tensorflow1.13.1中的keras等库出现cannot find declaration to go to的问题

    使用Pycharm tensorflow1 13 1中的keras等库出现cannot find declaration to go to的问题 使用Pycharm编写python程序 import numpy os 使用ctrl 鼠标左键
  • python编译成c代码_cython编译Python为c语言

    第一种办法 执行命令 cython test py 结果 会在同一目录下面生成test c文件 执行命令 gcc c fPIC I usr include python2 7 test c 结果 在同一目录下面生成test o文件 执行命令
  • Windows下Apache Tomcat 8安装配置

    1 环境配置 1 安装好jar jdk文件包 jdk1 8 0 66与jre1 8 0 66 打开我的电脑 属性 高级 环境变量 新建系统变量JAVA HOME 和CLASSPATH 变量名 JAVA HOME 变量值 C Program
  • vue调用高德地图实现定位

    vue调用高德地图实现定位 第一步创建高德地图key 第二步 下载vue amap npm install vue amap save 第三步 在项目main js引入vue amap import AMap from vue amap V

随机推荐

  • RedmiBook pro15 2023款折腾笔记(7840HS)amd-pstat解决APU睿频问题

    这里记录一下RedmiBook pro15 2023款笔记本 7840HS 搭建ubuntu 22 04系统的记录 留给正好需要在这个笔记本上安装linux环境的童鞋参考一下 其他AMD的APU都是类似的 拿到机器过后安装ubuntu 22
  • 操作系统终端输入大小限制

    问题描述 使用c 写算法题时 测试用例是一个长字符串 上万字符 但运行结果显示字符串读入的长度远远小于输入长度 并且不同操作系统下面显示出了不同的bug macos 输入字符串长度只有1000 超过这个长度成都就会卡在cin那行代码 ubu
  • 裸片IC的简单介绍以及裸片IC的封装设计

    最近项目一直用到一种比较旧的PCB生产工艺 裸片IC 也就是绑定的工艺 1 什么是裸片IC 裸片既是在加工厂生产出来的芯片 即是晶圆经过切割测试后没有经过封装的芯片 大小一般在几毫米左右 边上有用于连接金属线的的焊盘或者小孔 金属线这是连接
  • 02rapidJson学习之数组的创建、遍历

    02rapidJson学习之数组的创建 遍历 概述 创建数组时我们需要注意以下内容 1 不能直接返回数组 我试过不行 因为数组必须依赖某一对象 即若我们不将数组添加到doc上 而直接返回数组是不行的 1 数组的创建 从doc中获取strin
  • Github 本地合并 (merge) 他人提交的 pr

    Github 上有些项目可能作者长时间没有进行维护 会出现有些新的 pr 没有合并到主分支 master 上 这时如果想在本地应用这个新的 pr 呢 一般来说主要有以下几种方式 针对提交的pr 查看具体的改动文件和改动内容 然后在本地进行对
  • git log 后一直出现:(冒号)的原因以及处理方法

    博客主页 https blog csdn net mukes 欢迎点赞 收藏 留言 如有错误敬请指正 本文由 mukes 原创 首发于 csdn 问题重现 在 git bash 中输入 git log 时出现 冒号 如下图所示 问题描述 一
  • Android酷炫实用的开源框架(UI框架)

    Android酷炫实用的开源框架 UI框架 前言 忙碌的工作终于可以停息一段时间了 最近突然有一个想法 就是自己写一个app 所以找了一些合适开源控件 这样更加省时 再此分享给大家 希望能对大家有帮助 此博文介绍的都是UI上面的框架 接下来
  • web初始

    个人学习开始 写的不好 请大佬指教
  • 机器学习实战——Kmeans聚类算法

    机器学习实战 Kmeans聚类算法 1 聚类算法介绍 1 1 K 均值聚类 1 2 聚类效果的评价 2 sklearn中的实现 1 聚类算法介绍 在无监督学习中 训练样本的标记是未知的 目标是通过对无标记训练样本的学习来揭示数据的内在性质及
  • 纷玩岛演唱会下单代码

    继大麦M端之后 再发现一个演唱会平台 纷玩岛 此平台不像大麦 猫眼那么火爆 相对来说比较容易研究 通过抓包软件发现下单很简单 就一个JWT登录后的头部token而已 下载地址 https download csdn net download
  • 结构体对函数指针的高级封装应用

    分层设计考虑 作用 降低对底层应用程序的高耦合度 示例 include mac h typedef struct phy t char channel char snd fail count char name char open flag
  • 软件测试用例覆盖率怎么算,如何计算增量测试覆盖率

    为了保证代码质量 一般会要求提交的源码要有测试用例覆盖 并对测试覆盖率有一定的要求 在实践中不仅会考核存量代码覆盖率 总体覆盖率 还会考核增量代码的覆盖率 或者说增量覆盖率更有实际意义 测试用例要随源码一并提交 实时保证源码的质量 而不是代
  • 进程和线程的区别,以及应用场景

    什么是线程 Linux下线程用进程PCB模拟描述 也叫轻量级进程 线程是进程内部的一个执行流 也就是线程在进程的地址空间内运行 一个进程内的所有线程共享进程资源 线程是CPU调度的基本单位 CPU调度是按照PCB进行调度的 创建 销毁一个线
  • Mule入门——DB、Rest、Soap接口开发

    一 DB查询接口开发 这里我用的mysql数据库 首先我们先查询下我们的数据库这里有很多数据 然后我们用AnypointStudio进行我们的接口开发 首先我们先新建一个Mule工程 File gt New gt Mule project
  • 计算机网络---传输层

    两个端的会话层之间提供建立 维护和取消传输连接的功能 这一层 数据传送的协议单元成为报文 网络层只是根据网络地址将源节点发出的数据包送到目的终点 而传输层负责将数据可靠的传送到相应的端口 传输层负责将上层数据分段提供端到端 可靠不可靠的传输
  • vue3-admin-template页面

    vue3 admin template 本人学习视频网址为 视频地址 源码 github 网页采用技术框架 本管理模板采用vue3开发 使用vue router来作为路由跳转 将登录成功后产生的菜单 token放入到vuex中存储 通过ax
  • 一般Python开发面试中可能会问到的大部分问题

    python语法以及其他基础部分 可变与不可变类型 浅拷贝与深拷贝的实现方式 区别 deepcopy如果你来设计 如何实现 new 与 init 的区别 你知道几种设计模式 编码和解码你了解过么 列表推导list comprehension
  • Linux嵌入式学习——c语言选择结构设计

    Linux嵌入式学习 c语言选择结构设计 一 if语句 1 1if语句的一般格式 1 2if语句常用的3种形式 1 3if语句的嵌套 二 关系运算符和关系表达式 2 1关系运算符及其优先次序 2 2关系表达式 三 逻辑运算符和逻辑表达式 3
  • @ControllerAdvice注解使用及原理探究

    最近在新项目的开发过程中 遇到了个问题 需要将一些异常的业务流程返回给前端 需要提供给前端不同的响应码 前端再在次基础上做提示语言的国际化适配 这些异常流程涉及业务层和控制层的各个地方 如果每个地方都写一些重复代码显得很冗余 然后查询解决方
  • PowerBI入门学习笔记

    下载安装 Win10系统 在微软商店里直接下载PowerBI desktop 打开即可 界面如下 接下来导入后面要用到的数据 我目前用的都是Excel文件 获取数据 选中后选择要导入的若干个工作表 点击 加载数据 就进入到power que