《Power BI商业数据分析整套课件完整版ppt教学教程最全电子讲义教案(最新).pptx》由会员分享,可在线阅读,更多相关《Power BI商业数据分析整套课件完整版ppt教学教程最全电子讲义教案(最新).pptx(424页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、,xxx,认识Power BI,1.1 让数据成为你的竞争力,1.2 为什么是PowerBI,1.3 PowerBI主要架构,1.4 认识PowerBI,1.5 体验PowerBI,数据无处不在 每个组织都认识到了数据的重要性 组织拥有海量数据,但不能充分利用 组织缺乏数据专长的人才,组织的痛点在哪里 你的机会和价值就在哪里!,1.1 让数据成为你的竞争力,功能强大,Gartner BI平台魔力象限绝对领导者 上手更快:简洁、类似Office的界面 与微软其他产品无缝协作 成本低,个人可以完全免费的学习和使用,截止2020年初,Power BI支持43种语言,并已在全球40个数据中心中部署。全
2、世界有超过200,000个客户使用Power BI,每个月将40 PB的数据带入Power BI。在不到五年的时间里,Power BI社区已迅速发展为超过一百万的成员。如今,超过97的财富500强公司使用Power BI。,1.2 为什么是PowerBI,从各种数据源中提取数据; 对数据进行整理分析; 生成精美的可视化报表; 在电脑端和移动端与他人共享,1.3 PowerBI主要架构,1.3 PowerBI主要架构,PowerBI Desktop 它是PowerBI的桌面应用程序,也称为桌面版,专为分析人员设计。它结合了一流的交互式可视化效果和业界领先的内置数据查询和建模功能,可以创建并将报告
3、发布到 Power BI服务中。 平时学习和使用PowerBI,主要使用PowerBI Desktop。,三大组成部分: Power BI Desktop、Power BI 服务、Power BI移动版,PowerBI 服务 是一个在线服务,在浏览器中登录,可以查看、分享、发布PowerBI报表,也可以在这里设置数据刷新计划,管理数据的安全性等。,PowerBI 移动版 需要在移动终端查看跟踪数据,可以使用适用于 iOS、Android 或 Windows 设备的Power BI 移动版,它让每一个人获得触手可及的交互式数据报表。,1.4 认识PowerBI,安装Power BI Deskto
4、p的两种方式,一、 Win10操作系统, 进入Microsoft Store,搜索PowerBI Desktop, 点击安装即可,推荐使用此方式,可自动更新,1.4 认识PowerBI,安装Power BI Desktop的两种方式,二、,不能自动更新,须手动再次下载安装包更新,1.4 认识PowerBI,Power BI Desktop界面: 报表视图,不能自动更新,须手动再次下载安装包更新,1.4 认识PowerBI,获取数据:从这里开始,不能自动更新,须手动再次下载安装包更新,1.4 认识PowerBI,Power Query编辑器:在这里整理数据,不能自动更新,须手动再次下载安装包更新
5、,1.4 认识PowerBI,不能自动更新,须手动再次下载安装包更新,Power BI Desktop界面: 数据视图,1.4 认识PowerBI,不能自动更新,须手动再次下载安装包更新,Power BI Desktop界面: 模型视图,1.5 体验PowerBI,从Excel原始数据到PowerBI可交互报表,推荐使用此方式,可自动更新,1.5 体验PowerBI,推荐使用此方式,可自动更新,一、导入数据,从Excel导入数据,1.5 体验PowerBI,推荐使用此方式,可自动更新,二、数据整理:利用PQ逆透视将二维表转换为一维表,1.5 体验PowerBI,推荐使用此方式,可自动更新,三、
6、制作可视化报告-生成图表,1.5 体验PowerBI,推荐使用此方式,可自动更新,三、制作可视化报告-添加切片器,1.5 体验PowerBI,推荐使用此方式,可自动更新,三、制作可视化报告-编辑交互方式,按需要编辑,并不是必须做这个操作,1.5 体验PowerBI,推荐使用此方式,可自动更新,三、制作可视化报告-添加标题,1.5 体验PowerBI,推荐使用此方式,可自动更新,三、制作可视化报告-移动布局,1.5 体验PowerBI,推荐使用此方式,可自动更新,四、发布分享,1.5 体验PowerBI,推荐使用此方式,可自动更新,自己动手做一遍试试吧!,xxx,Power Query数据准备,
7、2.1 认识Power Query,2.2 数据导入,2.3 数据清洗,2.4 PQ应用-二维表转一维表,2.5 认识M语言,2.6 M语言应用-文本移除和提取,2.7 分列技巧,2.8 批量汇总技巧,Power Query是微软的数据连接和数据准备技术,使业务用户能够无缝访问存储在数百个数据源中的数据,并通过易于使用、引人入胜且无代码的用户体验来对其进行调整以适应他们的需求。,2.1 认识Power Query,如果还没有任何数据,在PowerBI Desktop中,点击获取数据,选择相应的数据格式导入后,就可以进入Power Query编辑器; 如果已经导入数据,想再次进入查看或者编辑,可
8、以点击上图中的“转换数据”进入。,2.1 认识Power Query,Power Query入口,2.1 认识Power Query,Power Query界面,2.2 数据导入,Power Query 的强大数据处理功能,几乎可以从任何来源、任何结构、任何形式上获取数据,具体可以连接的数据类型;,不仅支持微软自己的数据格式,比如Excel、SQL Server、Access等;还支持SAP、Oracle、MySQL、DB2等几乎能见到的所有类型的数据格式。,2.2 数据导入,从网页抓取数据示例,放映幻灯片查看操作步骤,2.3 数据清洗,Power Query最常用的16个界面功能,1.提升标
9、题,2.更改数据类型,方式一,方式二,3.删除错误/空值,右键删除错误,筛选-去掉null勾选,4.删除重复项,右键删除重复项,5.填充,Excel合并单元格,导入后变为null,5.填充,6.合并列,7.拆分列,8.分组,9.提取,提取前两个字符,10.转置,10.转置-将标题作为第一行,10.转置,11.行列操作,12.逆透视列,13.透视列,13.透视列,透视“属性”列,14.添加列,14.1添加重复列,14.2添加索引列,14.3添加条件列,14.3添加条件列,14.4添加自定义列,14.4添加自定义列,14.5添加示例列,14.5添加示例列,15.追加查询,15.追加查询,16.合并
10、查询,16.合并查询,16.合并查询,2.4 Power Query应用示例,二维表转一维表,二维表,什么是一维表、二维表?,一维表,一维表的每一列就是一个维度,列名就是该列值的共同属性 一维表的每一行就是一条独立的记录,为什么要转换为一维表?,二维表更符合我们日常的阅读习惯,信息更浓缩,适合展示结果,但作为源数据进行数据分析时,一维表更适合。 一维表的每一列是一个独立的维度,列是数据分析的基础,比如制作图表时直接把字段拖入到某个属性框中,以及后面将会学习的利用列与其他表建立关系;编写DAX时直接使用列名等。,如何转换为一维表?,主要是利用Power Query的逆透视功能 根据不同的二维表结
11、构,灵活使用填充、转置、合并列、分列等操作,四种常见的二维表结构: 行列标题均为单层的二维表 行标题有多层的二维表 列标题有多层的二维表 行列标题均有多层的二维表,二维表转一维表 | 1.行列标题均为单层的二维表,思路: 1、选中标题列; 2、逆透视其他列。,二维表转一维表 | 1.行列标题均为单层的二维表,放映幻灯片查看操作步骤,二维表转一维表 | 2.行标题有多层的二维表,思路: 1、向下填充行标题列; 2、选中多个行标题列; 3、逆透视其他列。,二维表转一维表 | 2.行标题有多层的二维表,放映幻灯片查看操作步骤,二维表转一维表 | 3.列标题有多层的二维表,思路: 1、转置表; 2、向
12、下填充; 3,将第一行用作标题;4,选中标题列; 5、逆透视其他列。,二维表转一维表 | 3.列标题有多层的二维表,放映幻灯片查看操作步骤,二维表转一维表 | 4.行、列标题均有多层的二维表,思路: 1、向下填充; 2,合并列; 3、转置表; 4、向下填充; 5、将第一行用作标题;6,选中标题列; 7、逆透视其他列; 8、拆分列。,实际上是第2种和第3种二维表的结合,二维表转一维表 | 4.行、列标题均有多层的二维表,放映幻灯片查看操作步骤,2.5 认识M语言,Power Query的秘密都在这里,2.5 认识M语言,2.5 认识M语言,为什么要学习M语言? 界面操作配合M函数,更加灵活、简洁
13、高效 部分复杂操作必须借助M函数,2.5 认识M语言,M函数基本规范 M函数严格区分大小写,每一个字母必须按函数规范书写,第一个字母都是大写 表被称为Table,每行的内容是一个Record,每列的内容是一个List 行标用大括号 列标用中括号 示例: 取表中第一行的内容:=表0 提取表中自定义列的内容:=表自定义 取表种第一行自定义列的内容:=表0自定义,2.5 认识M语言,常用的M函数 聚合函数: 求和:List.Sum() 求最小值:List.Min() 求最大值:List.Max() 求平均值:List.Average(),文本函数: 求文本长度:Text.Length() 去文本空格
14、:Text.Trim() 取前n个字符:Text.Start() 取后n个字符:Text.End() 移除文本:Text.Remove() 提取文本:Text.Select(),提取数据函数: 从Excel表中提取数据:Excel.Workbook() 从Csv/Txt中提取数据:Csv.Document() 条件函数: If then else(相当于Excel中的IF函数),2.5 认识M语言,从哪里查找和学习M语言 官网学习: ,2.6 M语言应用示例,文本处理技巧,Text.Remove 和 Text.Select,2.6 M语言应用示例 Text.Remove,原始数据,添加自定义列
15、: Text.Remove(客户,A.Z),移除英文字符、分离出中文,语法: Text.Remove (被处理的文本,移除的字符),2.6 M语言应用示例 Text.Remove,原始数据,语法: Text.Remove (被处理的文本,移除的字符),Text.Remove(客户,“一”.“龟”),移除中文字符,2.6 M语言应用示例 Text.Remove,原始数据,语法: Text.Remove (被处理的文本,移除的字符),Text.Remove(客户“A”.“z”,“一”.“龟” ),移除英文和中文字符,2.6 M语言应用示例 Text.Select,原始数据,语法: Text.Sel
16、ect (被处理的文本,选择的字符),Text.Select(客户,“0”.“9”))提取数字,,与Text.Remove效果一样,2.6 M语言应用示例 Text.Remove 和 Text.Select总结,根据实际情况选择使用: Text.Remove /Text.Select 代码更加简洁,2.7 PowerQuery应用,数据分列技巧,分列 | 按分割符,分列 | 从数字到非数字,分列 | 从小写到大写,分列 | 拆分到行,分列 | 多种分割符,分列 | 多种分割符-利用M语言灵活分列,直接添加步骤,输入下述代码即可。 主要是使用 Splitter.SplitTextByAnyDel
17、imiter 函数, 第一个参数写入所有分隔符的列表 ,,;,-,+,。,2.8 PowerQuery应用,批量汇总,汇总多个sheet,2.8 PowerQuery应用:批量汇总一个Excel表的多个sheet,思路: 任意导入一个sheet;删除“源”之后的步骤; 展开数据。,汇总多个sheet,2.8 PowerQuery应用:批量汇总一个Excel表的多个sheet,思路: 任意导入一个sheet;删除“源”之后的步骤; 展开数据。,放映幻灯片查看操作步骤,汇总多个工作簿,2.8 PowerQuery应用:批量汇总多个工作簿,思路: 选择从文件夹汇总,汇总多个sheet,思路: 任意导
18、入一个sheet;删除“源”之后的步骤; 展开数据。,放映幻灯片查看操作步骤,2.8 PowerQuery应用:批量汇总多个工作簿,汇总多个sheet,思路: 任意导入一个sheet;删除“源”之后的步骤; 展开数据。,2.8 PowerQuery应用:批量汇总,关于批量汇总的技巧: 1、无论是汇总多个sheet还是多个工作簿,都可以使用文件夹的方式; 2、汇总以后,文件夹中数据发生变动,或者放入新的文件,PowerBI点击刷新即可; 3、虽然可以点击合并按钮自动合并Excel,但建议使用Excel.Workbook函数来解析; 4、不仅可以批量汇总Excel文件,同样可以批量汇总txt、cs
19、v文件.,汇总多个sheet,思路: 任意导入一个sheet;删除“源”之后的步骤; 展开数据。,2.9 本章练习:特殊结构的二维表转一维表,思路: 1、将课程列和成绩列,两两合并,变为简单的二维表; 2、逆透视; 3、分列。,汇总多个sheet,思路: 任意导入一个sheet;删除“源”之后的步骤; 展开数据。,放映幻灯片查看操作步骤,2.9 本章练习:特殊结构的二维表转一维表,xxx,PowerBI数据建模,3.1 认识数据建模,3.2 基本概念,3.3 度量值,3.4 认识DAX,3.5 CALCULATE,3.6 常用的DAX函数,3.7 VAR变量,3.8 常用的分析,3.4 计算列
20、和度量值,3.10 数据分析,不仅仅是DAX,Power BI在多个表之间建立关系,将多个分散个表格变成一个协同的模型,以便能按不同的维度、不同的逻辑来聚合分析数据。 这个过程就是数据建模。,3.1 认识数据建模,3.1 认识数据建模,以这个的示例来认识数据建模。 模拟某电商订单明细数据。 订单表中详细记录每天的销售明细,包括产品名称、客户姓名、客户所在城市、发货地点等信息; 如何根据这些维度来对销售额进行分析?,3.1 认识数据建模,为了能按日期、按产品、按客户、按发货地点等维度分析销售金额,分别建立单独的: 日期表 客户表 城市表 产品表 仓库表,3.1 认识数据建模,将订单表和各个维度表
21、导入到PowerBI Desktop后,进入建模视图,可以点击一个表中的字段托到另一个表的对应字段上,两个表就建立了关系。 通过这种方式,将上述维度表都分别与订单表建立关系。 一个简单的模拟就建好了。,3.1 认识数据建模,新建度量值 在编辑栏中输入: 销售金额 = SUM(订单表销售额),3.1 认识数据建模,字段区中的度量值: 销售金额 前面有个计算器的标识,3.1 认识数据建模,度量值建好后,不会立即计算,只有放到可视化图表中才会计算并显示结果。 用卡片图来显示度量值:销售金额 因为没有任何筛选,这个数字是订单表中的合计销售额,添加产品类别切片器,选择“手机配件”,这个度量值显示就是手机
22、配件的销售额,3.1 认识数据建模,添加更多的切片器,比如添加年份和客户城市切片器,度量值会自动计算交叉筛选后的销售额。,通过这个例子可以看出: 这个计算出结果并不是一个表得出的,而是根据之前建立的关系模型,销售明细表被日期表的年度、客户城市表中的城市和产品表中的产品类别字段所筛选,然后汇总形成计算结果,这就是数据模型的威力。,3.2 基本概念,PowerBI 数据建模:基本概念,3.2 基本概念,字 段,字段是表的一列,只包含一类信息,列名就是字段名,相对于字段这个概念,更应该注意的是字段的设置,在进行分析之前,最好做到: 1,检查字段的数据类型是否正确,比如数值型、文本型等; 2,设置字段
23、的显示格式,比如百分比、千分位等; 3,检查字段的默认汇总方式,比如求和、计数、不汇总等; 4,检查字段的数据类别,比如地理字段,可以设置为国家、城市、经纬度等。,3.2 基本概念,计算列,计算列也是一个字段,但它不是从原始数据加载进来的,而是在数据模型中,使用DAX新建的列,在数据视图中,选择需要新建列的表,点击上方功能区的新建列,即可输入DAX公式,在该表中添加一个新列,这个新建的列可以同源数据的其他列一样使用。 计算列仅当刷新表数据时才执行计算所使用的DAX表达式,计算列的生成值存储在数据模型中,占用内存,如果在很大的表中添加列可能会对数据模型的内存大小产生显著影响,所以非必须的情况以下
24、,一般不建议使用新建列。 计算列不涉及用户交互;计算列的类型和格式等设置同字段的设置。,3.2 基本概念,度量值,度量值是PowerBI数据分析的核心,它是一个公式,与计算列一样同样是使用DAX建立的,但它不属于任何表,新建的度量值保持休眠状态,不执行计算,直到将其用于视觉对象中。 度量值计算出的结果是动态的,在不同的上下文中,执行不同的计算,所以也被称为移动的公式。可以响应用户交互,它可以快速重新计算,但不将输出存储在数据模型中,因此对数据模型的物理大小没有影响。数据模型中计算度量的数量增加不会影响静态模型的速度或大小,是数据分析的首选方式。 点击某个度量值,在上面功能区会出现【度量工具】栏
25、,然后可以设置该度量值的显示格式等,与字段的设置类似。,3.2 基本概念,DAX,Data Analysis Expression的缩写,也就是数据分析表达式,是PowerBI的中数据建模语言,DAX 是一种专门为计算数据模型中的商业逻辑而设计的语言。计算列和度量值都是用DAX生成的。 DAX可帮助您从模型中已有的数据中创建新信息,学习如何创建有效的DAX公式将帮助您充分利用数据。 利用DAX不仅可以快速得到分析结果,还可以灵活的驱动可视化。,3.2 基本概念,上下文,上下文是理解DAX的核心概念,简单来说,上下文就是DAX代码所处的外部环境,它又分为行上下文和筛选上下文。 筛选上下文对数据进
26、行筛选,而行上下文对表进行迭代,行上下文一般可以理解为表的当前行,并不产生筛选作用; 计算列和度量值的区别之一就是所处的上下文不同。度量值的动态计算,也是由于上下文的切换。 上下文的概念很简单,你也许能快速理解,但它也是DAX中最复杂的主题,如果想要彻底地理解其细节和精妙之处,需要花费一定的时间和精力来摸索。也只有精准的理解了上下文,才能真正理解和掌握DAX。,3.2 基本概念,事实表,在PowerBI中并没有事实表和维度表的区分,这里引用数据库中的相关概念,以便更容易理解和解释数据模型。 事实表,又叫明细表,表示业务开展而产生的结果记录,比如订单表,如果有10000次销售,理论上,订单表包含
27、10000行。 一个事实表最好只包含一种业务记录,比如订单表只含有销售记录,采购表只含有采购记录,而不应混合在一起。,维度表,维度表,又叫查找表。通常用来做分析问题的角度,比如按照产品分析,应该制作一个产品维度表,包含所有产品的不重复列表;按客户分析,应制作一个客户维度表,包含所有客户的不重复列表。 维度表是上下文的来源,切片器的字段、图表的轴,都应来自于维度表。 刚开始学习PowerBI的人可能不习惯用维度表,所有的数据都放到一张大表中,这非常不利于数据分析,可以说数据模型的好坏取决于维度表的设计和维度的质量。,3.2 基本概念,事实表,在PowerBI中并没有事实表和维度表的区分,这里引用
28、数据库中的相关概念,以便更容易理解和解释数据模型。 事实表,又叫明细表,表示业务开展而产生的结果记录,比如订单表,如果有10000次销售,理论上,订单表包含10000行。 一个事实表最好只包含一种业务记录,比如订单表只含有销售记录,采购表只含有采购记录,而不应混合在一起。,维度表,维度表,又叫查找表。通常用来做分析问题的角度,比如按照产品分析,应该制作一个产品维度表,包含所有产品的不重复列表;按客户分析,应制作一个客户维度表,包含所有客户的不重复列表。 维度表是上下文的来源,切片器的字段、图表的轴,都应来自于维度表。 刚开始学习PowerBI的人可能不习惯用维度表,所有的数据都放到一张大表中,
29、这非常不利于数据分析,可以说数据模型的好坏取决于维度表的设计和维度的质量。,3.2 基本概念,关系,两个表之间的联系称为关系,它是数据建模最基础也是最重要的概念。 从建模视图直观来看,关系就是一条线,在关系线的中间带有箭头,两端还有1或者*的符号,这些都是关系的属性。 在建模视图中,拖动一个表的字段到两个表的字段上,Power BI会自动分析检测数据,以便判断哪端是1,哪端是多(*),箭头一般是从1端指向多端的方向。当然前提是,两个表确实有共同的关系列。 模型中可能有多个表,但一个关系仅存在于两个表之间,可以点击这个关系线进去看看建立模型的相关参数。,3.2 基本概念,基数,在数据建模中,基数
30、是两个表的对应关系,关系是有次序的,分为左表和右表,两个表之间有多对一、一对一、一对多和多对多四种关系: 多对一(*:1):这是最常见的类型,代表左表中的关系列有重复值,而在右表中是单一值 一对一(1:1):左表和右表关系列中的值都是唯一的 一对多(1:*):与多对一正好相反 多对多(*:*):左表和右表关系列中均有重复值,尽量避免使用这种关系 在关系的一端的表通常是维度表,而在关系的多端的表为事实表。在上述的关系图上,订单表中,与其他建立关系的关系列都不是唯一的,比如产品列,同一个产品会有多条销售记录,客户列,也会存在同一个客户多次购买的情况。 而在维度表中,对应的关系列都是唯一值,产品表就
31、是不重复的产品列表,客户表是不重复的客户列表。,3.2 基本概念,数据模型,在PowerBI中,字段、度量值、事实表、维度表、关系的集合构成了数据模型。 一个数据模型中,可以将来自不同表、甚至是不同数据源的表建立关系,使各个独立的表,变成相互联系的有意义的数据模型,即可在一个图表中或者报告中分析来自不同表格的数据,所以数据模型是进行数据分析的基础,并且数据模型能够处理更大量级的数据,并且速度很快。 数据建模对于excel用户是全新的,因为excel用户不能跨表分析,表之间也没有关系的概念。 当然数据建模并不只是个概念,一个良好的数据模型可以将多个表像一个表一样使用,它是解决方案的基础,也是一个
32、良好的报告系统的基础,模型建的优秀,可以更简单的完成分析的需要。 直观来看,数据建模就是在表之间建立关系,好像很简单,但知道在哪些表之间建立关系,建立什么样的关系并不容易,尤其在复杂的数据分析、表比较多的情况下。 建立一个好的数据模型,首先你熟悉数据背后的业务逻辑,然后你需要深入思考,你要做什么分析,需要哪些数据,这些数据分别存放在哪些表中? 在深入分析的基础上,还需要对建模的知识有一定的积累,分清楚哪些是事实表、哪些是维度表,维度表是否够用,关系应该如何建立等。,3.2 基本概念,星型模型,关于数据模型的结构有很多种,其中有一个适合PowerBI分析的模型:星型模型。 星型模型的特征是: 事
33、实表居于中央,维度表环于周围 关系的最大深度为1 这样做的好处是,两个表之间不会有循环关系,一个表到另一个表只有一条路径,这样模型会由较少的表和较少的关系来建立,更便于理解、性能上也更优。,3.3 度量值,度量值,3.3 度量值,按照前面的订单数据和模型,如何计算本年累计销售额的同比增长率? 问题更细化一下:如何按月份、按季度、按产品、按类别、按城市来分析同比增长率,或者是多个分析维度的组合,比如2018年截止8月销往北京的手机配件的累计销售额的同比增长? 是不是每种需求你是不是都要单独计算一遍呢? 当然不用,利用度量值可以响应你的不同分析需求,快速计算出结果!,3.3 度量值,一、建立数据模
34、型,3.3 度量值,二、建立度量值,销售金额 = SUM(订单表销售额) 本年累计销售额 = TOTALYTD( 销售金额,日期表日期 ) 上年累计销售额 = TOTALYTD( 销售金额,SAMEPERIODLASTYEAR(日期表日期 ) 累计同比增长率 = DIVIDE( 本年累计 销售额-上年累计 销售额, -上年累计 销售额 ),3.3 度量值,三、在矩阵中显示度量值的结果,图表类型选择“矩阵”,月份放入矩阵的【行】 度量值放入到【值】 并添加年度切片器,3.3 度量值,三、在矩阵中显示度量值的结果,根据分析的需要添加不同维度的切片器。 根据度量值的计算结果: 2018年截止8月销往
35、北京的手机配件的累计销售额的同比增长率247%。 247%的上下文就是右图中圈住的分析维度值。,3.3 度量值,度量值的特点,度量值不浪费内存,只有被拖到图表上才执行运算,如果数据量非常大的时候这点非常有利 度量值可以循环使用,比如上面的建立的度量值: 本年累计销售额 = TOTALYTD( 销售金额 , 日期表日期 ) 上年累计销售额 = TOTALYTD( 销售金额 , SAMEPERIODLASTYEAR( 日期表日期 ) ) 累计同比增长率 = DIVIDE( 本年累计销售额-上年累计销售额, 上年累计销售额 ) 度量值可以直接调用之前建立好的度量值,所以以后在模型中新建度量值的时候,
36、推荐从最简单的度量值开始分级建。,建立良好的数据模型,加上灵活运用度量值,你就可以使用PowerBI灵活处理各种数据分析问题。,3.4 DAX,PowerBI数据分析语言:DAX,3.4 DAX,认识DAX DAX是英文Data Analysis Expression的缩写,翻译过来是数据分析表达式,从名称上就可以看出,DAX公式是专门用作数据分析的,事实上也确实如此,从数据分析层面认识DAX会更有助于我们理解它。 数据分析可以归纳为从大量数据中筛选、分组、汇总的过程,而DAX的主要功能正是查询和运算,DAX查询函数负责筛选出有用的数据集合,然后利用DAX的聚合函数执行计算,它是Power B
37、I数据分析的灵魂。,3.4 DAX,在哪里使用DAX DAX可以在Power BI Desktop 中使用,也可以在Excel的Power Pivot中使用,在PowerBI中,有三个地方会用到DAX:度量值、计算列、计算表。,3.4 DAX,DAX基本语法 销售金额 = SUM(订单表销售额) 表达式以等号开始; 等号(=)前面是表达式名称,如果DAX建立的是度量值,它就是度量值名称,若是用于建计算列,就是计算列名;若是建立一个新表,它就是表名; 函数后面都用双括号()括上参数,参数之间用逗号分割。 表名用单引号 包裹,如:订单表 字段用中括号 包裹,并带上表名,如订单表销售额 度量值也是用
38、中括号 包裹,如DIVIDE(本年累计销售额,上年累计销售额),为了便于区分和增强DAX代码的可读性,字段应始终跟随表名一起书写,而度量值始终不要带表名,因为它并不依赖于任何表,它是独立的存在,可以单独书写。,3.4 DAX,DAX格式规范 1.如果函数只有一个参数,则和函数放在同一行; 2.如果函数具有2个或更多参数,则将每一个参数都另起一行; 3.如果函数及其参数写在多行上: 3.1左括号(与函数在同一行 3.2参数是新行,从该函数对齐位开始缩进4字符 3.3右括号)与函数开头对齐 3.4分隔两个参数的逗号位于前一个参数的同一行 3.5如果必须将表达式拆分为更多行,则运算符作为新行中的首字
39、符,熟练掌握DAX编辑器中的换行和缩进: 换行并缩进: Shift + Enter 换行不缩进: Alt + Enter 向右缩进:Ctrl + 向左缩进:Ctrl + ,3.4 DAX,常用的DAX函数,聚合函数 SUM / SUMX AVERAGE / AVERAGEX MIN / MINX MAX / MAXX COUNTROWS DISTINCTCOUNT,时间智能函数 PREVIOUSYEAR/Q/M/D:上一年/季/月/日 NEXTYEAR/Q/M/D:下一年/季/月/日 TOTALYTD/QTD/MTD:年/季/月初至今 SAMEPERIODLASTYEAR:上年同期 PARAL
40、LELPERIOD:上一期 DATESINPERIOD:指定期间的日期 DATEADD:移动一定间隔的日期,筛选函数 FILTER:筛选 ALL:所有值,可以清除筛选 ALLEXCEPT:保留指定列 VALUES:返回不重复值,最常用最重要的DAX函数:CALCULATE,3.5 CALCULATE,最重要的DAX函数:CALCULATE,3.5 CALCULATE,CALCULATE语法,3.5 CALCULATE,CALCULATE应用示例:背景数据,利用这个简单的产品明细表,帮助你直观的理解CALCULATE的计算逻辑。,3.5 CALCULATE,基础度量值:,产品数量 = COUNT
41、ROWS(产品明细),这里外部上下文就是表格每行的行标签,也就是产品名称,每个产品名称在产品表中对应的只有一行数据,所以全部返回1。,CALCULATE应用示例:背景数据,3.5 CALCULATE,产品数量1 = CALCULATE(产品数量),在这个度量值中,只是用了第一个参数,筛选条件为空,从这里也可以看出,CALCULATE唯一必须的参数就是第一个参数,后面的参数均是可选的。 因为没有内部筛选所以完全依赖外部上下文,出来的结果也和原度量值一致。,CALCULATE应用示例1:筛选条件为空,3.5 CALCULATE,产品数量2 = CALCULATE( 产品数量, 产品表产品类别=手机
42、配件“ ),只有类别为“手机配件”的产品计数正常显示出来,而其他产品的数据没有显示。 这是因为CALCULATE的第二个参数的限制,只筛选类别为“手机配件”的产品,限制了外部的上下文,非手机配件的产品都不再运算。,CALCULATE应用示例2:添加限制条件,缩小上下文,3.5 CALCULATE,产品数量3 = CALCULATE( 产品数量 , ALL(产品表) ),ALL(产品表)的意思是清除产品表里的所有外部上下文,外部筛选器不起作用了,每行统计的都是该产品表中的所有产品的行数,因此每行的数据都是13。,CALCULATE应用示例3:结合ALL函数,扩大上下文,3.5 CALCULATE
43、,产品数量4 = CALCULATE( 产品数量, ALL(产品表), 产品表产品类别=手机配件“ ),先用ALL函数清除外部上下文,然后又新增了一个筛选条件,类别为“手机配件”的产品数量。 被ALL清除行标签的外部筛选后,从全部产品中统计品类为手机配件的产品的数量,所以每行都返回5.,CALCULATE应用示例4:重置上下文,3.5 CALCULATE,通过以上几个简单的示例,可以先初步了解CALCULATE的计算逻辑,通过从第二个参数开始的筛选条件,得到一个数据集合,并利用第一个参数执行聚合运算,这其实也是DAX要实现的功能:筛选需要的数据集合并执行聚合运算,所以说CALCULATE就是实
44、现DAX功能的引擎。 CALCULATE 作为DAX 函数中最常用也是最强大的函数,其实也是最难学的。在高级的业务分析中,涉及到多重函数的嵌套时,CALCULATE的计算逻辑非常复杂,后面的各种DAX应用基本都离不开CALCULATE的身影,可以慢慢来理解它。,3.6,常用的DAX函数,3.6 常用的DAX函数,1、FILTER函数,CALCULATE函数的最佳搭档,我们知道CALCULATE函数第二个及之后的参数是筛选条件,而FILTER函数就是专门的筛选函数。,语法: FILTER(表,筛选条件) 它的第一个参数一定是表,是不能放入列或者值的; 第二个参数是筛选条件,如果是多条件筛选,可以
45、用 &(并) 或者 | (或)连接起来。 它返回的也是个表,所以不能直接用于建立度量值,但可以新建表。最常用的就是作为CALCULATE的参数,返回表中符合筛选条件的行,然后交给CALCULATE的第一个参数执行聚合运算。,3.6 常用的DAX函数,1、FILTER函数,应用示例: 计算每年销往杭州的U盘的销售金额是多少?(依然用本章第一节的数据模型,下同) FILTER应用 杭州U盘 销售额 = CALCULATE( 销售金额, FILTER( 订单表, 订单表产品名称=U盘&订单表客户城市=杭州市 ) ),3.6 常用的DAX函数,2、ALL函数,1.单独用于创建表,参数为一个表,相当于复
46、制表。 比如点击“新表”,输入: = ALL(产品表),3.6 常用的DAX函数,2、ALL函数,2.单独用于创建表,参数为一列,返回该列的不重复列表。 比如点击“新表”,输入: = ALL(产品表产品类别),3.6 常用的DAX函数,2、ALL函数,3.作为度量值中的参数,清除外部上下文。 拿前面介绍FILTER的示例,如果在FILTER的第一个参数表上套上一个ALL函数,变成: ALL应用 杭州U盘 销售额 = CALCULATE( 销售金额, FILTER( ALL(订单表), 订单表产品名称=U盘&订单表客户城市=杭州市 ) ),3.6 常用的DAX函数,3、VALUES函数,1. 返
47、回某列的不重复列表,常用于通过事实表构建维度表。 如果模型中没有发货地点这个单独的维度表,可以从订单表中提取这个维度,新建表,输入: =VALUES(订单表发货地),3.6 常用的DAX函数,3、VALUES函数,2. 保持外部上下文筛选。 这个功能正好与ALL相反,ALL函数是忽略外部上下文的筛选,而VALUES可以保持上下文的筛选。 产品数量4 VALUES = CALCULATE( 产品数量, ALL(产品表), 产品表产品类别=手机配件, VALUES(产品表产品名称) ),在CALCULATE内部添加了VALUES(产品表产品名称)以后,计算结果又恢复了产品名称的筛选,这是VALUE
48、S非常重要的应用。 利用ALL和VALUES,可以更加灵活的操纵上下文,需要筛选,还是不需要筛选,你可以在度量值内部灵活的指定。,3.6 常用的DAX函数,3、VALUES函数,3. 查找文本型的数据 这个应用也很常用,看这个例子,从产品表中找出零售价为199元的产品名称是什么? 新建度量值如下: VALUES应用 查找文本 = CALCULATE(VALUES(产品表产品名称),产品表零售价=199),VALUES返回的是只有一列的表,如果被上下文筛选为也只有一行,那么就可以正常显示为一个值,3.6 常用的DAX函数,4、HASONEVALUE函数,它判断该列是否被过滤为仅有 一个值,如果是一个值,返回TRUE,如果没有一个值或者有多个值,则返回FALSE。 一般作为IF函数的第一个参数使用,判断交叉筛选后是否为一个值。,HASONEVALUE应用 = IF( HASONEVALUE(产品表产品名称), CALCULATE( VALUES(产品表产品名称), 产品表产品类别=手机配件 ) ),当外部没有筛选器时,默认返回空值,,3.6 常用的DAX函数,5、时间智能函数,返回表的时间智能函数,返回值的时间智能函数,3.6 常用的DAX函数,4个相对复杂的时间智能函数,3.6 常用的DAX函数,8个关于年度的时间智能函数的特殊