相对于事实表这种随着时间变化的表,还有一些维度表也会随着时间缓慢变化。数据仓库一般称这种随着时间缓慢变化的维度表为缓慢变化维slow change dimesion。实际生活中,比如你户口从老家迁到你所在的城市,比如你原来单身,现在结婚了,对于你的这条数据信息来说,就是随着时间流逝,有了一个缓慢的变化。对于缓慢变化维的设计处理,这个具体问题具体分析。但是对于最新时间下的数据,一般正常大家是一定关心的。本文主要是举例使用DAX或者在Power Query Editor中得到最新数据的方法。
假设在Power BI中合并了多个Customer的数据源。得到一个包含50,000条数据的Query。因为Customer ID在不同的CustomerXXX.csv里面都有出现,所以这个Query里会有多个相同的Customer ID。

如何获取到不同的Customer ID的最新数据呢?
思考:
想要在Power BI Desktop中展示不同Cusotmer ID的最新信息,有很多种方法。可以用DAX也可以在Power Query Editor中处理。
Customer Current := CALCULATE(MIN(Customer[Customer]),FILTER(Customer,Customer[Modified Date] = MAX(Customer[Modified Date])))
Power BI中结果:

以此类推,写出不同的Customer的其他最新数据字段。
简单是简单,但是对于要显示的Customer的所有的最新数据信息字段,每一个都要写一个DAX的表达式。需要显示的最新信息字段少还好,如果多的话,真的有点不想干活了吖~~
2. 选中CustomerGroup的Customer ID字段,右键点击Group by。

得到下面的Group By页面。默认选中Basic,设置如下:

结果如下图所示:

Customer ID已经没有重复数据了。得到的是Customer ID和Customer ID的最后修改时间。
3. 为了得到最新修改时间下的其他Customer的信息,需要通过Customer ID和MaxModifiedDate这两个关键字段来和原来的Cusotmer表进行内连接inner join. (内连接就是要求关联的两个表,你有我有大家有的才能留下,其他的都不要。)
在Home Tab,Merge Queries选项中,选择Merge Quesies as New.(也可以选择直接Merge Queries,个人良好习惯。吃过亏,复杂数据建议新建!)

在Merge页面,创建inner join。用两个字段创建关系,一个关系创建好,按住键盘的Ctrl键,创建第二个关联关系,如下图所示:

展开Customer表里面想要的内容,改Merge1的名字为Customer Current。

展开部分内容,不想保留原来数据表的名字(不勾的话,Category的名字会变成Customer.Category)。

这里修改了字段Customer的名字为Customer Current,其他的以此类推。

到这里,在Power Query Editor里的操作就结束了。在报表展示页面,直接拖拉Customer Current表里的字段就是Customer的最新信息了。

和之前创建DAX的结果是一样的。
三步操作一劳永逸。多少个关于Customer ID的最新信息都可以一步到位。当然如果需要显示的不同Customer ID的最新信息不多,写一个DAX就解决了,也可以。不过也要考虑可扩展性,后面会不会需要显示多个呢?还是要具体问题具体分析。都不难。
好了,最后出一道Power BI的题目玩一下吧。
上面的例子,下面有六个操作内容,选择正确的三个步骤。

答案显而易见:4,5,6
谢谢关注。
