在《Power Pivot Alchemy》Page17,作者提到可以在DAX中用LASTDATE获取最新日期:
[LastRefreshed] = LASTDATE(Sales[TransactionDate])
其中的参数是一个日期列。我照猫画虎,检查公式没有错误,但是拖到值区域,就出现如下提示:
好吧,我知道怎么获取唯一值,于是用了下面的公式:
=LASTDATE(DISTINCT('学习报表-系统'[完成时间]))
但是还是同样的错误,那我再换:
=LASTDATE(VALUES('学习报表-系统'[完成时间]))
没用,还是一样的错误。
试试看用最传统的MAX大法呢:
=MAX('学习报表-系统'[完成时间])
这次一次成功。
现在回头来看错误提示,Excel告诉我是因为引用的日期列中有重复日期,但是我后来用DISTINCT和VALUES都去除重复了呀,这也不行?那我试试看新建一个没有任何重复的日期列在来测试看。
这个测试数据虽然没有重复值,但是有重复日期,所以测试也是失败的。
那我试试看日期也不重复呢:
这次成功了,结果如下:
那日期不重复,时间重复呢?
刷新,一切正常:
查阅微软的官方说明,也并没有明确指出LASTDATE这个函数要求引用的日期列不得有重复日期,但是在页面末尾给出的例子中,还是暗示出了这个限制:
=LASTDATE('InternetSales_USD'[SaleDateKey])
这个SaleDateKey我理解就是日期表的主键,主键当然不能重复。
所以,结论是:
1.当要从日期重复的列中获取最新日期,用MAX()函数;
2.当确定日期列中的日期是不重复的,则可以用LASTDATE()函数;
3.为什么有了MAX()函数之后,还要有LASTDATE()这个专门的函数呢?不得而知。