《PowerBI数据分析与数据可视化第4章数据分析表达式.pptx》由会员分享,可在线阅读,更多相关《PowerBI数据分析与数据可视化第4章数据分析表达式.pptx(44页珍藏版)》请在优知文库上搜索。
1、第4章数据分析表达式 数据分析表达式(Data Analysis Expressions,DAX)是一个函数和运算符库,这些函数和运算符可用便在Microsoft SQL Server Analysis Services、Excel中的Power Pivot以及Power BI中创建公式和表达式。 本章主要内容:uDAX基础uDAX函数4.1 DAX基础 DAX也称公式语言,它与Java、Python、C+等计算机程序设计语言不同,它通过公式来完成计算。DAX与Excel的公式非常相似,而且大部分函数都是通用的。 本节主要内容:u语法规则u运算符u数据类型u上下文4.1.1 语法规则 语法规则
2、是DAX公式的编写规则。一个DAX公式通常包含度量值、函数、运算符、列引用等组成,如图所示。 度量值u度量值类似于程序设计语言中的全局变量,是一个标量,通常用于表示单个的值。例如,求和、求平均值、求最大值等结果为单个值,可定义为度量值。度量值可在报表任意位置使用。u在Power BI Desktop中,可用公式来创建度量值、列和表,所以等号左侧可以是新建的度量值、列或表的名称。用公式创建的列和表可分别称为计算列和计算表。 等号u等号表示公式的开始,其后是完成各种计算的表达式。 函数uPower BI Desktop提供了大量的内置函数,这些函数通常用于在数据表中返回单个值,或者返回包含单列或多
3、列的表。 运算符u运算符完成相应计算。 列引用u在公式中除了列引用,还涉及度量值和表的引用。u列和度量值在引用时,名称必须放在方括号中。在引用表时,表名称包含空格或其他特殊符号时,必须将名称放在单引号中,否则可以直接使用名称。u引用列时,如果列不属于当前数据表,则必须用数据表名称限定列,例如,“销售数据销量”或者“销售数据销量”。使用数据表名称限定列名也称为完全限定,建议在公式中都使用完全限定,避免产生误解。 DAX公式与Excel公式类似,两者主要区别如下。u Excel公式可以直接引用单个的单元格或某个范围的多个单元格。Power BI公式只能直接引用完整的数据表或数据列。通过筛选器和函数
4、,可获得列的一部分、列中的唯一值或者表的一部分的引用。 u DAX公式与Excel支持的数据类型并非完全相同。通常,DAX 提供的数据类型比Excel 多,在导入数据时DAX会对某些数据执行隐式类型转换。 DAX公式还具有下列特点。u DAX公式不能修改表中原有的数据,只能通过新建列操作为表添加数据。 u 可通过DAX公式创建计算列、度量值和表,但不能创建计算行。u 在DAX公式中,不限制函数的嵌套调用。 u DAX提供了返回表的函数。4.1.2运算符 DAX支持4种运算符:算术运算符、比较运算符、文本串联运算符和逻辑运算符。1.算术运算符 算术运算符用于执行算术运算,运算结果为数值。符号说明
5、举例+ +加法运算2+3- -减法运算或负数符号2-3* *乘法运算2*3/ /除法运算2/3 求幂232.比较运算符 比较运算符用于比较操作数关系,运算结果为逻辑值True或False。符号说明举例= =等于语文=60大于语文60小于语文=大于或等于语文=60=小于或等于语文=60不等于语文603.文本串联运算符 文本串联运算符只有一个:&,用于将两个字符串连接成一个字符串。例如,abc & 123,结果为abc1234.逻辑运算符 逻辑运算符用于执行逻辑运算,运算结果为逻辑值True或False。符号说明举例&逻辑与,两个操作数都为True时,运算结果为True,否则为False语文=60
6、 & 数学60|逻辑或,两个操作数都为False时,运算结果为False,否则为True语文60 | 数学604.1.3数据类型1.数字类型 Power BI Desktop支持三种数字类型:小数、定点小数和整数。u小数:表示 64 位(8字节)浮点数。可以处理从-1.79E+308到-2.23E -308的负数、0,以及从2.23E-308到1.79E+308的正数。u定点小数:小数点位置固定,小数点后固定有四位有效数字数,最多19位有效数字。 它可以表示的值范围为-922,337,203,685,477.5807到+922,337,203,685,477.5807。 u整数:表示64位(8
7、字节)整数值。最多允许19位有效数字,取值范围从-,223,372,036,854,775,808到9,223,372,036,854,775,807。 2.日期时间类型 Power BI Desktop 支持查询视图中的五种日期时间数据类型,以及报表视图和模型中的三种日期时间数据类型。u日期/时间:表示日期和时间值。日期/时间值以小数类型进行存储,可以在这两种类型之间进行转换。日期的时间部分存储为1/300 秒(3.33 ms)的整数倍的分数。支持1900年和9999年之间的日期。u日期:仅表示日期,没有时间部分。 u时间:仅表示时间,没有日期部分。u日期/时间/时区:表示UTC日期/时间。
8、数据加载后,会被转换为日期/时间类型。u持续时间:表示时间的长度。 数据加载后,会被转换为十进制数类型。可将其与日期/时间字段执行加法和减法运算。3.文本类型 文本类型为Unicode字符串,其最大字符串长度为268,435,456个Unicode字符或536,870,912字节。4.True/False类型 True/False类型表示逻辑值的True或False。5.空值/Null类型 空值/Null类型可在DAX中表示和替代SQL中的Null。可用BLANK函数创建空值,也可用ISBLANK逻辑函数测试空值。4.1.4上下文 上下文(Context)在众多高级程序设计语言中使用,它代表了
9、变量、函数、程序的运行环境。上下文也是DAX的一个重要概念。在DAX中,上下文是公式的计算环境。DAX公式中有两种上下文:行上下文和筛选上下文。1.行上下文 行上下文可以理解为当前记录(当前行)。从数据源获取的各种数据后,Power BI Desktop将其以关系表(二维表)的形式存储。在计算函数时,通常都会应用某一行中某个列的数据,此时的行就是当前计算的行上下文。2.筛选上下文 筛选上下文可以理解为作用于表的筛选条件(筛选器),函数应用筛选出的数据(单个或多个值)完成计算。4.2DAX函数 函数是通过使用特定值、调用参数,并按特定顺序或结构来执行计算的预定义公式。 函数参数可以是其他函数、另
10、一个公式、表达式、列引用、数字、文本、逻辑值(如True或False)或者常量。 本节主要内容:uDAX函数概述u聚合函数u逻辑函数u数学函数u文本函数u信息函数u日期和时间函数u时间智能函数u筛选器函数4.2.1DAX函数概述 DAX中的函数按类型可分为:日期和时间函数、时间智能函数、信息函数、逻辑函数、数学函数、统计函数、文本函数等。 DAX函数具有下列特点。uDAX函数始终引用整列或整个表。如果仅想使用表或列中的某个特定值,则需为公式添加筛选器。u在需要逐行自定义计算时,DAX允许将当前行的值或关联值作为参数。 uDAX函数可返回计算表,计算表可作为其他函数的参数。uDAX提供了各种时间
11、智能函数。这些函数可用于定义或选择日期范围,以便执行动态计算。 DAX对内置函数的参数名称进行了规范化参数 说明 expression expression 表示返回单个标量值的DAX表达式,表达式根据上下文确定计算次数。valuevalue表示返回单个标量值的DAX表达式,其中,表达式将在执行所有其他操作之前仅计算一次。 table table 表示返回数据表的DAX表达式。tableName tableName 使用标准DAX语法的表名称,不能是表达式。 columnName columnName 使用标准DAX语法的列名称,通常是完全限定的名称,不能是表达式。name name 一个字符
12、串常量,用于提供新对象的名称。 order order 用于确定排序顺序的枚举常量。ties ties 用于确定如何处理等同值的枚举常量。4.2.2聚合函数 AVERAGE()u计算列中所有数字的平均值。如果列中包含文本,则不执行计算,函数返回空值。列中包含空单元或逻辑值时,则忽略这些值,不对行进行计数。值为0纳入计算,对行计数。例如:u= AVERAGE(成绩数据语文) AVERAGEA()u计算列中所有值的平均值。列中的非数字值处理规则为:计算结果为True的值作为1计数,计算结果为False的值、包含非数字文本的值、空文本 () 和空单元均作为0计数。例如:u= AVERAGEA(成绩数
13、据语文) AVERAGEX(,)u计算表中表达式计算结果的平均值。例如:u= AVERAGEX(成绩数据,语文+数学+外语) COUNT()u 对列中的数字和日期进行计数。如果单元包含不能转换成数字的文本,则不对该行进行计数。如果列中没有可计数的单元,函数返回空值。例如:u = COUNT(成绩数据语文) COUNTA()u对列中非空单元进行计数。例如:u= COUNTA(成绩数据语文) COUNTAX(,)u对表中的每一行计算表达式,返回表达式计算结果不为空的数目。例如:u= COUNTAX(成绩数据,专业代码) COUNTROWS()u计算指定表的行数。例如:u= COUNTROWS (成
14、绩数据) MAX()u返回数值列中的最大值。例如:u= MAX(语文) MIN()u返回数值列中的最小值。例如:u= MIN(语文) RANK.EQ(, , )u计算value在列columnName中的排名。order指定排名方式,可省略。order为0(默认)时,列中最大值排名为1;order为1时,列中最小值排名为1。u例如,创建语文成绩的排名列。u= RANK.EQ(成绩数据语文,成绩数据语文) RANKX(, , , , )u计算表table中表达式expression计算结果在value中的排名。参数order与RANK.EQ()函数中一致。参数ties为skip(默认)时,相同排
15、名要计数,例如,有5个值排名第10,则下一个排名为15(10+5)。参数ties为Dense时,相同排名只计数1次,例如,有5个值排名第10,则下一个排名为11。u例如:u= RANKX (成绩数据,成绩数据外语+成绩数据数学+成绩数据语文) SUM()u对列中的数值进行求和。例如:u= SUM (销售数据销量) SUMMARIZE(, , , , )u对表table中的数据按分组列groupBy_columnName计算表达式expression,计算结果作为列name的值,返回的表包含分组列和计算结果列。可以有多个分组列。计算表达式expression也可有多个,每个表达式一个名称name
16、。4.2.3 逻辑函数 AND(,)u对两个逻辑值计算逻辑与。例如:u= AND(AVERAGE(成绩数据语文)60,AVERAGE(成绩数据数学)60) NOT()u对逻辑值取反。例如:u= NOT(AVERAGE(成绩数据语文)60) OR(,)u对两个逻辑值计算逻辑或。例如:u= OR(AVERAGE(成绩数据语文)60,AVERAGE(成绩数据数学)60) TRUE()u返回逻辑值True。例如:u= TRUE() FALSE()u返回逻辑值False。例如:u= FALSE () IF(logical_test, value_if_false)u如果条件logical_test为True,则返回值value_if_true;否则返回值value_if_false。例如:u= IF(成绩 55,合格,不合格) IFERROR(value, value_if_error)u在计算value发生错误时,函数返回value_if_error的值,否则返回value的值。例如:u= IFERROR (成绩 55,出错) SWITCH(, , , , , )u计算表达式expressio