我有一张看起来像这样的桌子。我正在尝试找到一种方法来查找每个帐户的状态更改,例如如果当前月份的状态为“已注销”,但上个月为“有效”,则标记应为“新注销”。在Power BI中可行吗?我找到了PREVIOUSMONTH,但它只处理度量值,而不像我一样处理绝对值。
答案 0 :(得分:0)
这似乎是一个琐碎的问题,但是我发现,在PowerBI中不容易解决。 在显示解决方法之前,建议您先解决问题,然后再将数据加载到PowerBI(即,在数据源中)。
如果这不可能,那么您应该这样做:
(推荐)创建T-1数据列==列,该列具有要比较的上一个日期(对于您来说,是上个月或日期):
T-1 date =
VAR __acc_id = TABLE[account_id]
VAR __date = TABLE[date]
RETURN
CALCULATE(MAX(TABLE[date]),FILTER(ALL(TABLE), TABLE[account_id] = __acc_id && TABLE[date] < __date))
计算的过滤器部分“返回”表的一部分,该部分具有与当前行相同的account_id,但日期短于当前行。之后,我们只需选择最大日期,该日期应为前一个日期。 这样,我们为每个帐户找到了最大的先前日期。
如果您知道以前的日期是什么,请随时跳过此步骤。
在创建状态列本身之前,我将创建一个包含先前状态的计算列。该列的计算应如下所示:
t-1 status=
var __acc_id = TABLE[account_id]
var tdate = TABLE[T-1 date] //CREATED IN PREVIOUS STEP OR YOUR PREVIOUS DATE METRIC(LIKE dateadd or previousmonth function)
return
CALCULATE(firstnonblank(TABLE[status]), FILTER(ALL(TABLE), TABLE[account_id]=__acc_id && table[date] = tdate))`
有了前一状态列,我们现在有了当前和前一状态列,它们应该足以使用简单的if语句正确标记“行”。 计算出的列公式可能看起来像这样:
status_label = if(TABLE[status] == "Written off" && TABLE[t-1 status] == "active", "newly written off", "something else").
如果简单的IF还不够,请查看demo
这一系列步骤应该可以解决您的问题,但是我不得不承认,这并不高效。在PowerQuery中解决该问题会更好,但是可惜,我不知道如何解决。任何使用PowerQuery的解决方案都将受到高度赞赏。