RANKX使用DAX发布问题

时间:2018-03-22 13:52:59

标签: sql powerbi dax

我正在努力将sql请求转换为dax:

    >;WITH cte
    >AS
    >(
    >       SELECT uc.idU_Email
    >              ,uc.id_Type
    >              ,uc.dRecueil
    >              ,valeur
    >              ,ROW_NUMBER() OVER(PARTITION BY idU_Email,id_Type ORDER BY dRecueil DESC, valeur ASC) AS rang
    >       FROM   vUE uc 
    >       WHERE uc.Id_Type=1  AND uc.dRecueil<=(DATEADD(month, -1, GETDATE())) 
    >)                   
    >SELECT COUNT(idU_Email)
    >    FROM   cte
    >    WHERE  rang = 1 
    >    and valeur = 1

如果我理解的话,相当于DAX中RANKX函数中sql中的rownumber函数。 基本上,为了实现转换,我使用以下表达式创建了一个新的计算列:

Ranking on partition

要恢复它,它会对dRecueil和valeur的每个idU_Email订单进行排名。

因此,唯一要做的就是在日期添加一个条件(比如在我的SQL请求中),但我想我真的不知道如何(或在哪里?),并且在发生错误时发生了错误我尝试过,但我还没有实现解决问题:

Ranking on partition with filter on date

我希望有人能找到解决问题的方法(或者甚至建议我更好地使用相应的SQL请求)。

先谢谢!笑脸快乐

[UPDATE]

我已按照自己的意愿实现了分区并应用了类似的日期过滤器:

RANK_OnDate = IF(vUE[dRecueil] <= DATE(YEAR(TODAY()); MONTH(TODAY())-1; DAY(TODAY()))
            ;RANKX(FILTER(vUE; vUE[idU_Email] = EARLIER(vUE[idU_Email]) && vUE[id_Type] = EARLIER(vUE[id_Type]))
                ;RANKX(ALL(vUE); vUE[dRecueil]; ;ASC) 
                +
                DIVIDE(
                    RANKX(ALL(vUE); vUE[valeur]; ; DESC; Skip)
                    ;COUNTROWS(ALL(vUE)) + 1
                )
            )
        )

但是,实际上,我希望它能够动态过滤...因此我不知道在一个衡量标准中直接使用它是否更好(根据我想明确计算较低/较高等级)对于每个idU_email)。

此外,如果过滤器的日期不合适,我的过滤器只会应用空白但排名保持不变...

我试图在一个小节中直接进行不同的计数,但不能保存遇到的不同问题......你有什么想法吗?

(感谢您的回答):)

1 个答案:

答案 0 :(得分:0)

我认为你非常接近,试试这个

Rank = IF(vUE[dRecueil] <= DATE(YEAR(TODAY()), MONTH(TODAY())-1, DAY(TODAY())),
           RANKX(FILTER(vUE, vUE[idU_Email] = EARLIER(vUE[idU_Email])),
               RANKX(ALL(vUE), vUE[dRecueil], ,ASC) +
               DIVIDE(
                   RANKX(ALL(vUE), vUE[valeur], , DESC, Skip),
                   COUNTROWS(ALL(vUE)) + 1)))