微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PowerBI 中每个 ID 连续几个月的 DAX/M 计数

如何解决PowerBI 中每个 ID 连续几个月的 DAX/M 计数

我需要帮助找到计算连续月数的方法

  • 对于每个“ID”(文本列)
  • 将“状态”列设为“缺失”或“暂停”

这是我的表格的样子(最后两列是我想看到的输出):

ID 日期(01-Month-Year) 状态 连续几个月“失踪” 连续几个月“暂停”
ID40 2019 6 01/06/2019 失踪 0 -
ID40 2019 7 01/07/2019 失踪 2 -
ID40 2019 8 01/08/2019 失踪 3 -
ID40 2019 11 01/11/2019 失踪 0 -
ID40 2019 12 01/12/2019 失踪 2 -
ID40 2020 9 01/09/2020 失踪 0 -
ID499 2019 1 01/01/2019 暂停 - 0
ID499 2019 2 01/02/2019 暂停 - 2
ID499 2019 3 01/03/2019 暂停 - 3
ID499 2020 9 01/09/2020 暂停 - 0
ID499 2020 10 01/10/2020 暂停 - 2
ID499 2020 8 01/08/2020 失踪 0 -
ID499 2020 9 01/09/2020 失踪 2 -
ID499 2020 10 01/10/2020 失踪 3 -
ID499 2020 11 01/11/2020 失踪 4 -
ID499 2020 12 01/12/2020 失踪 5 -

除了在“M”中合并嵌套查询之外,还有什么方法可以做到这一点?不幸的是,我已经尝试过了,但是 PowerBI 在处理数据时遇到了问题。

提前谢谢大家!

解决方法

一个可能的解决方案是构建一个表,其中包含自表中第一年以来的年和月,并从中删除出现在表中的年月。然后计算当前年月和上一个不存在的年月之间的月差。

这是一个可能的计算列,它使用 EXCEPT 函数构建缺少年月的表。为了简化跨年月差的计算,它还准备了一个 YearMonthNumber 值,其中包含从第一年开始的渐进月数

由于在示例表中有单独的状态列,我添加了一个 IF 来相应地拆分列

我还添加了一个检查以返回 0 而不是 1,以匹配示例数据

Consecutive Months Missing = 
IF (
    T[Status] = "Missing",VAR FirstYear =
        MIN ( T[Year] )
    VAR CurrentYear = T[Year]
    VAR CurrentMonth = T[Month]
    VAR CurrentYearMonthNumber = ( CurrentYear - FirstYear ) * 12 + CurrentMonth
    VAR YearMonths =
        GENERATE (
            SELECTCOLUMNS ( GENERATESERIES ( FirstYear,CurrentYear ),"Year",[Value] ),SELECTCOLUMNS (
                GENERATESERIES ( 1,12,1 ),"Month",[Value],"YearMonthNumber",( [Year] - FirstYear ) * 12 + [Value]
            )
        )
    VAR CurrentIDAndStatusYearMonths =
        CALCULATETABLE (
            ADDCOLUMNS (
                SUMMARIZE ( T,T[Year],T[Month] ),( T[Year] - FirstYear ) * 12 + T[Month]
            ),ALLEXCEPT ( T,T[ID],T[Status] )
        )
    VAR MissingYearMonths =
        EXCEPT ( YearMonths,CurrentIDAndStatusYearMonths )
    VAR FirstMissingYearMonthNumber =
        MAXX (
            FILTER ( MissingYearMonths,[YearMonthNumber] < CurrentYearMonthNumber ),[YearMonthNumber]
        )
    VAR Result = CurrentYearMonthNumber - FirstMissingYearMonthNumber
    RETURN
        IF ( Result = 1,Result )
)

Consecutive Months On Hold = 
IF (
    T[Status] = "On Hold",Result )
)

这是放在表格中的结果表格

table visual

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。