在某些场景中,我们需要告诉用户,报表中的数据是截止到昨天?截止到今天上午?2小时之前?还是10分钟以前的,这就需要在报表中加入如下的内容:
今天就和大家来讲一下如何实现以上的功能。
我们很容易想到,在DAX语言中有一个NOW函数,用来获取当前的日期和时间:
我们来测试一下,输入公式,得到数据:
用卡片图呈现出来:
点击刷新,可以看到每次刷新数据,都会更新一个最新的时间。
将报表发布到云端,再来查看一下。
没有问题。
但是!如果到云端进行刷新,就会发现时间变为了8点多,跟发布的时间很明显是不一致的,为什么会这样呢?
因为powerbi本地刷新和云端刷新是不同的,本地刷新,NOW返回的是当前的系统时间,也就是UTC/GMT 08:00时间,而云端刷新的时间是按照UTC时间来的,所以两者差了8个小时。
所以如果想在云端刷新时显示正确的当地时间,应当在原来的时间上 8小时,但是这样一来,又会出问题,那就是如果修改本地文件并再次发布时,时间就会比当前早8个小时。
也就是说,使用NOW无法同时满足本地发布和云端刷新的需要。
那应当怎么办呢?
这时候我们该用到UTCNOW函数了,顾名思义,这表示的是UTC时间的当前时间,这样只要写出如下的表达式,就能正确得到本地的准确时间了:
代码语言:javascript复制当前时间 = UTCNOW() "08:00:00"
再次发布到云端,刷新看一下:
这样,我们就可以同时在本地和云端分别刷新都得到正确的刷新时间了。
你学会了吗?
这里我们需要注意,以上两张gif中,点击网页端报表页面的刷新按钮,仅仅是将数据刷新到数据源中的最新,而不会真的更新数据,因为一旦报表发布后,只要不在数据源中点击立即刷新,报表中的数据是不会变的。
但,事实真的是这样的吗?且看下图:
我们可以看到,在这个gif中,我们点击报表页面的刷新按钮,当前时间是一直在变的,一直显示当前的本地时间,这个是怎么做到的呢?
还有另外一个问题,就是我们事先知道当地的时区,所以才会在UTC上 8小时,如果恰好不知道时区呢?有没有不需要知道时区就通用的公式呢?办法肯定是有的。