隐藏

PowerBI函数COUNT系列

发布:2024/9/25 20:52:52作者:管理员 来源:本站 浏览次数:25

PowerBI中使用的最多的聚合函数就是求和和计数,求和SUM和SUMX前面已经写了,这一篇主要介绍几个计数的函数。包括COUNT、COUNTX、COUNTA、COUNTAX、COUNTBLANK、COUNTROWS、DISTINCTCOUNT,看上去有点多,实际上用法都差不多,最常用的就是COUNTA、COUNTAX和DISTINCTCOUNT这三个函数,下面分别举例说明一下。


【COUNT和COUNTA】


在Excel中,COUNT和COUNTA两个函数的差异还是挺大的,COUNT只对数值类型进行计数,COUNTA则对所有非空字符进行计数。但是在PowerBI中,这两个实际使用效果基本一样,所有一般情况下随便选择其中一个函数使用就行。


COUNT



   COUNT(<column>)



   包含的类型有三类:数字、字符串和日期,这基本上就是表格中常用的数据格式了;


   空白值跳过,不支持TRUE/FALSE值,如果包含TRUE/FALSE只能使用COUNTA计数;


下面计算销售数据的订单数,因为每一条数据算一个订单,没有订单号的字段,就使用产品id列就行计数,效果是一样的,DAX写法和结果如下↓


   订单数COUNT = COUNT([产品id])


COUNTA



COUNTA(<column>)


如果需要计算包含逻辑值、特殊符号,就使用COUNTA。一般情况下作用和COUNTA一样,还是计算销售数据的订单数,使用COUNTA的DAX写法和结果如下,和上面的结果是一样的↓


   订单数COUNTA = COUNTA([产品id])


【COUNTX和COUNTAX】


   COUNTX(<table>,<expression>)


   COUNTAX(<table>,<expression>)


这两个作用上面已经讲了,就只用COUNTAX进行解释说明了。和SUMX函数一样,有table和expression两个参数,table主要是通过FILTER和RELATED函数根据条件筛选出一张新的表格出来,expression表达式则对新表格里面的某一列进行计数,最后返回一个整数。


先筛选出销售表里面产品id=1即科罗娜的数据形成一张新的隐形逻辑表格,然后对这个表格里面的订单进行计数,结果就只有科罗娜的销售订单数,DAX语句和结果如下↓


   订单数COUNTAX =


   COUNTAX(


   FILTER('模拟销售数据',


   [产品id]="1"),


   [产品id])


再来一个使用RELATED的函数,今年一月份,除了酒类的各产品销售订单数,DAX语句和结果如下↓


   1月订单数 =


   COUNTAX(


   FILTER('模拟销售数据',


   RELATED('日期表'[年月])="2021-01"&&RELATED('产品表'[品类])<>"酒类"),


   '模拟销售数据'[产品id])



【COUNTBLANK】



COUNTBLANK(<column>)


用法和COUNT一样,只有一个列的参数。只对空白单元格计数,返回空白单元格的数量。因为之前的销售数据没有空值,所以简单的模拟了20行数据,其中有4行日期是空值的订单,就计算日期为空值的数量,DAX写法如下↓


   空值数 = COUNTBLANK([日期])


【COUNTROWS】



COUNTROWS([<table>])


这个函数是基于计算基表中的行数,所有唯一的参数是一个表,也可以用于计算通过筛选表或者将上下文应用于表而得出的行数。


对销售数据表进行行计数,结果和之前COUNT函数时一样的,DAX写法和结果如下↓


   COUNTROW行数 = COUNTROWS('模拟销售数据')


因为COUNTROW是对表格进行行计数的,所以传入的参数也可以是一个进行了筛选的表格,下面是筛选销售数据产品不是科罗娜的行计数,DAX写法和结果如下↓


   COUNTROW筛选行 =


   COUNTROWS(


   FILTER('模拟销售数据',


   '模拟销售数据'[产品id]<>"1"))


【DISTINCTCOUNT】



DISTINCTCOUNT(<column>)


这个函数用法很简单,只需要对写某一列的字段名就行,但实际应用中非常实用。一般用来计算去重用户数、去重订单数、去重商品数等等,只要需要计算非重复值的数据,都能用上。下面就计算每个产品购买的用户数,DAX写法和结果如下↓



购买用户数 = DISTINCTCOUNT([用户id])


从结果也可以发现,总共有9999个用户,因为有购买多个产品的情况,所以每个产品聚合出来的用户合计会大于9999,这种展示方式也是很合理的。


End