引用@PowerQuery的例子并给予个人理解
X1= SUMX(FILTER('Data','Data'[订单日期]>EARLIER('Data'[订单日期])),[金额])---WRONG
X2=CALCULATE(SUM(Data[金额]),FILTER(Data,SUMX(FILTER('Data','Data'[订单日期]>EARLIER('Data'[订单日期])),[金额])))---RIGHT
X1报错原因:表被扫描前没有创建行上下文。当EARLIER/EARLIEST函数被用于新建列中,会自动创建行上下文,这是由于计算列是在现有的表上新建一个列,和表中已存的列一样,可以作为表格的行、列;图标的轴及切片器的字段使用等等,也可以使用计算列与其他表格建立关系。而当EARLIER/EARLIEST函数被用于新建度量值中,度量值如果不放到上下文环境中,它是一个孤立的公式,因此想在度量值中使用,需要人为在扫描表前创建行上下文。
解决方法:利用FLITER或者其他迭代函数在表被扫描前创建行上下文。(当定义计算列时,DAX 从表的第一行开始迭代;它创建了一个包含该行的行上下文并计算表达式。然后它移到