欢迎光临散文网 会员登陆 & 注册

PowerBI之DAX神功:第1卷第10回 将表用作标量值

2021-08-09 21:14 作者:孙兴华zz  | 我要投稿

一、什么是标量?

《The Definitive Guide to DAX》说话很严谨,所以会使用标量值这个词。

标量:不考虑方向的量,比如60元,30克,5升,60Km/h,"孙兴华","sunxinghua"


问:考虑方向的量是什么量?

答:学物理的时候,很多数值既要由大小(单位),又要由方向才能完全确定,而这些叫矢量。对你来说,你没必要在DAX课程中研究这些,凡是你工作中能接触到的,你分不清它是标量还是矢量那就都是标量。凡是能用到矢量的人都懂这些,不懂的就是用不到。


二、DAX中单行单列的表可以用标量值输出

单行单列:就是一个单元格

现在有一张表,表名是'Sheet1':

一共6位UP主,有些UP主只做一家媒体,有些做多家媒体



建立度量值:

媒体数量 = COUNTROWS('Sheet1')


由于我这张表,每个人对应的网站并没有重复,如果你的表是这样的情况:

我们在统计时,就要考虑去重问题,这时就用到了上节课学到的知识:

媒体数量1 = COUNTROWS(Values('Sheet1'[网站]))

媒体数量2 = COUNTROWS(DISTINCT('Sheet1'[网站]))


上节课已经讲过,这两个函数在满足实时参照完整性的情况下,效果是相同的。接下来我只用Values举例就好了,但你知道用DISTINCT效果相同

【2】显示只做一家网站的UP它做的是哪一家网站,实现下图效果

想实现这个功能我们需要先做一个测试:

<1> 先新建一张表,我们只筛选UP主是张三的表格

表 = filter('Sheet1','Sheet1'[UP主]="张三")

【2】对这张表的网站列去重

values表 = values('表'[网站])

现在得到1行1列的表了(不算表头),那我们思考一下,什么时候才能得到1行1列的表?

答:当【媒体数量】=1时


如上图,度量值我们可以写成:【就我这个案例而言以下3个都可以】

返回唯一值 = IF(COUNTROWS('Sheet1')=1,VALUES(Sheet1[网站]))

返回唯一值 = IF(COUNTROWS(VALUES('Sheet1'[网站]))=1,VALUES(Sheet1[网站]))

返回唯一值 = IF([媒体数量]=1,VALUES(Sheet1[网站]))

《孙兴华讲PowerBI火力全开》笔记第16课.02.HASONEVALUE函数【判断是否只有一行数据】

我们将它配合IF语句来使用就可以了:

返回唯一值 = IF(HASONEVALUE(Sheet1[网站]),VALUES(Sheet1[网站]),"不仅一家")

返回唯一值 = IF(HASONEVALUE(Sheet1[网站]),VALUES(Sheet1[网站]))



《孙兴华讲PowerBI火力全开》笔记第16课.03.SELECTEDVALUE函数

SELECTEDVALUE(Sheet1[网站]) 如果这个列是唯一值,我们就返回它,否则返回空

返回唯一值 = SELECTEDVALUE(Sheet1[网站],"不只一家")

返回唯一值 = SELECTEDVALUE(Sheet1[网站])

如果需要显示每个人对应的所有网站怎么办?

《孙兴华讲PowerBI火力全开》笔记25课03.CONCATENATEX【将多个值连接到一起,以文本的形式输出】

所有网站 = CONCATENATEX(VALUES(Sheet1[网站]), Sheet1[网站], ",")


总计栏看着很不舒服,想让它显示为空,安排:

《孙兴华讲PowerBI火力全开》笔记25课04.【案例】CONCATENATEX综合案例

所有网站 = IF(HASONEVALUE('Sheet1'[UP主]),CONCATENATEX(VALUES(Sheet1[网站]), Sheet1[网站], ","))



想让总计不显示的通用方法,就是

IF+HASONEVALUE

《DAX神功》视频版:2021.8.1~2021.12.31连载

https://www.bilibili.com/video/BV1YE411E7p3


PowerBI之DAX神功:第1卷第10回 将表用作标量值的评论 (共 条)

分享到微博请遵守国家法律