DAX按日期排名

时间:2016-08-04 12:05:03

标签: excel powerpivot powerbi dax ssas-tabular

我在列中列出了不同的ID - 这导致小计的总和不等于总计如下:

enter image description here

我想要做的是按时间顺序对付款日期进行排名,并仅选择要显示的最高日期。在上面的示例中,Grand Total不会发生变化,但Townville排不会显示出明显的学生数。

这是一个非常具体的要求,我假设在DAX中有一个简单的方法 - 我尝试过使用RANKX和{{1}但是我没有接近解决这个问题。

最后一件事 - 排名必须与用户选择的时间过滤器相关联(因此,如果他们选择2015年,它会给第二个记录排名1,而最高记录不会显示。如果他们选择2015年5月它会给出排名第1的最高记录而第二个记录不会显示)

1 个答案:

答案 0 :(得分:1)

我认为这就是你要找的 - 我在PowerPivot模型中添加了一个计算列,根据最后付款日期和学生姓名提供排名。它将对任何学生的最早支付列为1。

该列的代码如下:

=RANKX(FILTER(Table1, [Student Name] = EARLIER([Student Name])), [Last Payment Date])

...假设您的表名为“Table1”!

FILTER是将排名限制为仅属于具有该名称的学生的日期的关键。

多个表的更新

要设置表格之间的关系,请转到模型的“图表视图”,可在Power Pivot窗口的“主页”选项卡中找到。

您可以将字段从一个表拖到另一个表以创建关系。这只有在至少有一个字段是唯一的情况下才有效 - 将模型视为一个维度模型是个好主意,其中一个表格就像一个事实,而其他表格就像维度一样。

从评论中,我会尝试让付款像事实一样,并将其链接到社区和学生表。在这种情况下,您可以使用以下代码:

=RANKX(FILTER(Table1, Related('Students'[Student Name]) = EARLIER('Students'[Student Name])), [Last Payment Date])

此计算列将位于您的Payments Fact表中,并使用查找相关字段。

请注意,在这种特定情况下,只需在用于查找学生姓名的学生ID字段上运行过滤器就会更容易。

相关问题