PowerBI之DAX神功:第1卷第10回 将表用作标量值
一、什么是标量?
《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
