前面也写了几篇关于PowerBI的文章了,也使用了一些DAX函数、语句的操作,但是没有具体说明其含义和用法,我想在之前有个初步感性的理解之上,是时候正式介绍一下DAX的一些基本核心概念和术语了。主要包括度量值、计算列、计算表、变量、函数、数据类型、运算符和上下文。对这些基础的概念有个整体的认识,对后续的使用很有帮助,下面一次介绍并演示一下。
【度量值】
度量值是PowerBI里面使用频率最高的概念,所有的数据、图表、模型都是基于度量值而来的。通常都是通过函数来创建度量值的,比如常见的求和、计数、最大最小值等等,当然还有更多复杂强大的度量值写法,后面会慢慢奉上的。度量值是动态计算公式,其结果会根据上下文更改。度量值的创建方式很简单,通过点击相应的表格或者通过菜单栏进行创建即可,下面演示一下,还是使用我们的销售数据表↓
我们就通过SUM函数和COUNTA函数创建了两个度量值,下面就可以对这两个度量值进行应用了。分别生成一个产品对应金额、数量的表格,和一个产品金额、数量的图表,图表详细使用后续会单独详细介绍的,演示一下↓
【计算列】
主要是用于在表中添加列,例如销售明细表中如果只有'单价'和'数量'列,我们就可以增加一列'总金额'列。
总金额 = [单价]*[数量]
其中这个在日期维度表里面更常用,比如根据日期计算我们需要的月份格式,或者计算周次。这些计算出的新维度是可以直接使用的,写法和结果如下↓
年月 = FORMAT([日期],"YYYY-MM")
年周次 = "W"&WEEKNUM([日期],2)
【计算表】
计算表是通过DAX公式或表达式,得到的一个新的表格,这个新表格不是直接从其他数据源加载得到的,但是计算出来的表格和其他表格具有相同的意义和计算方式。比如我们需要生成一个新的表格,购买用户id是100并且购买科罗娜的表格,和用户id是1000购买荣耀的表格。
科罗娜销售表 =
FILTER('模拟销售数据',
RELATED('产品表'[品牌])="科罗娜"&&'模拟销售数据'[用户id]="id100")
荣耀销售表 =
FILTER('模拟销售数据',
RELATED('产品表'[品牌])="荣耀"&&'模拟销售数据'[用户id]="id1000")
然后,我们需要把上面这两个表格合并成一个表格,需要使用UNION函数,DAX写法如下↓
科罗娜&荣耀表格 = UNION('科罗娜销售表','荣耀销售表')
然后我们的所有表格中就有三个新的表格了,而这三个新的表格,都可以和其他表一样进行自由操作。当然这里只是演示一下计算表的操作,还有更多高级实用的用法,后面会慢慢写的。
【变量】
VAR是VARIABLE的缩写,意思为变量。编程语言中,变量是一个很重要的概念,DAX也是一种语言,所以变量也是很重要的一个概念。通过VAR定义变量,然后通过RETURN返回结果值,作用是可以把需要建立很多度量值的操作在一个DAX表达式里面完成,实际使用中也是非常实用的。下面就简单演示一下月同比的使用方式,一般情况下我们首先需要建立总金额的度量值,然后计算上年同期月份的度量值,最后用本年/上年同期-1得到月同比,如果有很多个指标需要计算月同比,就会写很多个度量值,很麻烦也很乱,所以这种情况我们最后写成一个度量值,DAX写法如下↓
销售数量月同比 = (
VAR LastYearSalesCount=CALCULATE([2019销售数量],DATEADD('日期表'[日期],-1,YEAR))
VAR YOY=DIVIDE([2019销售数量]-LastYearSalesCount,LastYearSalesCount)
RETURN YOY
)
销售金额月同比 = (
VAR LastYearSalesAmount=CALCULATE([2019销售金额(万)],DATEADD('日期表'[日期],-1,YEAR))
VAR YOY=DIVIDE([2019销售金额(万)]-LastYearSalesAmount,LastYearSalesAmount)
RETURN YOY
)
具体的公式函数后面会单独解释,从结果可以看到,因为是使用2019年的数据,所有2019年的月份没有同比上年的数据,只有2020年开始会有同比的数据。
【函数】
函数的概念应该都很清楚了,因为Excel中也是经常使用的,而且PowerBI里面的函数和Excel中很多函数的功能写法都是一样的。但是PowerBI里面的函数还是有自己的特色,主要包括:
- DAX函数时引用完整的表或列,如果想要使用表或列中的特定值,需要向公式中添加筛选器;
- 如果需要逐行自定义计算,需要使用上下文函数来操作;
- DAX 包含的许多函数都将返回表,而不是返回值;
- DAX 函数包含多种时间智能函数。利用这些函数,可以定义或选择日期范围,并基于这些日期或范围执行动态计算。
因为函数涉及很多,也很重要,这里也不会单独说,后面会逐一全部介绍每个函数的功能和使用方式,这是一个大工程,通过函数的各种组合使用可以基本实现我们所有想实现的结果。
和Excel一样的函数有:日期和时间函数、财务函数、信息函数、逻辑函数、数学函数、统计函数、文本函数,PowerBI里面特有的函数有筛选器函数、关系函数、时间智能函数、表操作函数。后面会逐一写来,敬请期待。
【数据类型】
PowerBI里面的数值类型确定和转换一般是在PowerQuery里面完成的,数据导入后,PowerQuery会自动先转化一遍数据类型,这里需要检查一下是否是自己想要的类型。
- 十进制数:表示64 位浮点数, 它是最常见的数字类型;
- 整数:表示64 位整数值;
- 日期/时间类型
- Power BI Desktop支持查询视图中的五种日期/时间数据类型。在加载到模型的过程中,日期/时间/时区和持续时间都将被转换;
- Power BI Desktop 数据模型只支持日期/时间,但它们可以独立地格式化为日期或时间;
- 日期/时间:表示日期和时间值。实际上,日期/时间值是以十进制数类型进行存储的;
- 日期:仅表示日期(没有时间部分);
- 时间:仅表示时间(没有日期部分);
- 日期/时间/时区:表示带时区偏移量的 UTC 日期/时间;
- 持续时间:表示时间的长度。加载到模型中时,它将被转换为十进制数类型;
- 文本类型:字符数据字符串。可以是字符串、数字或文本格式表示的日期;
- 布尔值:为True或False的布尔值;
- 空白:DAX中表示和替代SQL Null的数据类型
DAX和Excel公式对空白的处理方式的区别↓
【运算符】
PowerBI里面主要有四种类型的运算符:算术运算符、比较运算符、文本串联运算符和逻辑运算符。
算术运算符
算术运算符就是加减乘除幂,使用也很简单,如下↓
比较运算符
使用比较运算符对两个值进行比较,结果返回逻辑值TRUE或者FALSE,主要比较运算符号如下↓
文本串联运算符
使用与号 ( & ) 联接或串联两个或多个文本字符串以生成单个文本段。
逻辑运算符
使用逻辑运算符与(&&)和或(||)组合表达式以生成单个结果。
【上下文】
上下文是个非常重要但理解起来又有点困难的概念,所有打算后面单独写一篇来详细介绍。
End