本篇文章将简单介绍计算列的使用,以及关于计算列的一些注意事项。
所谓的计算列其实就是指的向基础表中添加新的一列,该列的每一个值都是由我们所定义的计算列公式计算得出,并且每一个值都为标量值。因此,可以把计算列概括为:向基础表中添加一个拥有自定义计算逻辑的新列。
为了更方便理解,我们来看一个简单的例子:假设在Excel的A列中已经存在一些整数用来描述某种指标,若我们想把A列中的各个整数都乘以二,那么我们可以在Excel的B1单元格中写下这个公式:
,然后双击或拖动填充柄就可以得到一个新列,该新列的值为A列中对应值的两倍;在上面这个例子中,新添加的B列可以类比为新添加的计算列,其中的Excel公式可以类比为计算列公式。=A1*2
可见,添加计算列的过程与在Excel中添加新的一列的过程是基本一致的,但两者还是略有区别的。在Excel中,B列每个单元格里的公式严格来说都是不一样的,比如说B1单元格的公式是:
,以此类推。而在DAX中是没有单元格的概念的,最小的单位是列,所以在计算列中的每一个值都是由同一个计算列公式所计算出来的。虽然计算列公式是一样的,但是由于行上下文的存在,所以计算列中的每一个值的结果也是不一样的。(关于计值上下文的内容在后续文章中再介绍)=A1*2
`,而B2单元格的公式则是:
`=A2*2
下面来看一些计算列的例子,所用到的计算列公式与结果如下:
销售金额 = '订单表'[销量]*'订单表'[单价]
销售成本 = '订单表'[销量]*'订单表'[成本]
销售利润 = '订单表'[销售金额]-'订单表'[销售成本]
虽然计算列很好用,但也需要注意一些注意事项:
- 计算列会向表添加一列,该列中的每一个值都必须为标量值
- 所添加的计算列与基础表里的其它物理列在功能上没有任何差别
- 计算列会占用内存,能使用度量值来完成的工作则尽量使用度量值
- 若数据量大且必须使用计算列时,可以先在PowerQuery里计算好,以获得更好的压缩性能
- 在计算列中引用度量值时需要注意行上下文转换所带来的影响
- 计算列的计值环境只存在基础表所提供的行上下文,不受报表视图中的各种筛选器或切片器的影响
DAX系列文章中涉及到的案例文件,均已上传到QQ群:344353627,若有需要,可自行加群获取。