首页 文章

DAX按日期排名

提问于
浏览
0

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

enter image description here

我想要做的是按时间顺序对付款日期进行排名,并仅选择要显示的最高日期 . 在上面的示例中,Grand Total不会更改,但Townville行不会显示不同的学生计数 .

这是一个非常具体的要求,我在DAX中做一个简单的方法 - 我已经尝试过使用 RANKXMAX ,但我没有接近解决这个问题 .

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

1 回答

  • 1

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

    该列的代码如下:

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

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

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

    Update for Multiple tables

    要设置表之间的关系,请转到Power Pivot窗口的Home选项卡中提供的模型的“Diagram View” .

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

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

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

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

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

相关问题