Excel 将连续月份的零值分类到桶中

Excel 将连续月份的零值分类到桶中,excel,powerbi,dax,powerquery,Excel,Powerbi,Dax,Powerquery,我在PowerQuery中构建了一个关于我公司车队利用率的数据模型。我们在数据模型中有许多不同的列。特别是里程、VIN、开始日期和结束日期(见下表示例) 我试图实现的是,如果一个月的里程数等于0,则将其归类为标记为0-30天的桶,如果连续两个月的里程数等于0,则将其归类为31-60天,连续三个月以上的里程数为0,则将其归类为>60天。根据上述示例,该车辆将被归类为“>60天”类别。在使用DAX的数据模型中,有没有一种简单的方法可以做到这一点?如果您有任何后续问题,请告诉我。谢谢大家! 尝试将此列

我在PowerQuery中构建了一个关于我公司车队利用率的数据模型。我们在数据模型中有许多不同的列。特别是里程、VIN、开始日期和结束日期(见下表示例)


我试图实现的是,如果一个月的里程数等于0,则将其归类为标记为0-30天的桶,如果连续两个月的里程数等于0,则将其归类为31-60天,连续三个月以上的里程数为0,则将其归类为>60天。根据上述示例,该车辆将被归类为“>60天”类别。在使用DAX的数据模型中,有没有一种简单的方法可以做到这一点?如果您有任何后续问题,请告诉我。谢谢大家!

尝试将此列作为计算列:

Buckets =
VAR rowDate = 'myTable'[ Start Date ]
VAR previousDate =
    CALCULATE (
        MAX ( 'myTable'[ Start Date ] ),
        FILTER (
            ALLEXCEPT ( myTable, myTable[ VIN ] ),
            'myTable'[ Start Date ] < rowDate
        )
    )
VAR prePreviousDate =
    CALCULATE (
        MAX ( 'myTable'[ Start Date ] ),
        FILTER (
            ALLEXCEPT ( myTable, myTable[ VIN ] ),
            'myTable'[ Start Date ] < previousDate
        )
    )
VAR PreviousMileage =
    CALCULATE (
        MAX ( 'myTable'[Mileage ] ),
        ALLEXCEPT ( 'myTable', 'myTable'[ VIN ] ),
        'myTable'[ Start Date ] = previousDate
    )
VAR PrePreviousMileage =
    CALCULATE (
        MAX ( 'myTable'[Mileage ] ),
        ALLEXCEPT ( 'myTable', 'myTable'[ VIN ] ),
        'myTable'[ Start Date ] = prePreviousDate
    )
RETURN
    SWITCH (
        TRUE (),
        'myTable'[Mileage ] + IF ( ISBLANK ( PreviousMileage ), 1, PreviousMileage )
            + IF ( ISBLANK ( PrePreviousMileage ), 1, PrePreviousMileage )
            = 0, "> 60 Days",
        'myTable'[Mileage ] + IF ( ISBLANK ( PreviousMileage ), 1, PreviousMileage )
            = 0, "31 to 60 Days",
        'myTable'[Mileage ] = 0, "0 to 30 Days",
        "No Days"
    )
bucket=
VAR rowDate='myTable'[开始日期]
以前日期的VAR=
算计(
最大值('myTable'[开始日期]),
滤器(
ALLEXCEPT(myTable,myTable[VIN]),
“myTable”[开始日期]60天”,
“myTable”[里程数]+如果(为空(以前的里程数),1,以前的里程数)
=0,“31至60天”,
“myTable”[里程]=0,“0到30天”,
“没有天”
)
结果是这样的。我为测试添加了一些值


我建议创建两个计算帮助器列,将后续2个月和3个月的差异相加,并根据这些列中是否有零进行分类。您能告诉我们更多关于您要查找的最终结果吗?你需要一张新桌子吗?计算过的列?措施?“它看起来会是什么样子?”MarcoVos我期待着一个经过计算的专栏来做这项工作。此外,最终结果将把符合月份标准的每个VIN放在相应的类别中。例如,从6/1-6/30开始,VIN 123将在0-30天范围内,从7/1-7/31开始,VIN 123将在31-60天范围内,从8/1开始,VIN 123将在>60天范围内(直到收到大于0的里程读数)。此逻辑适用于满足相同标准的任何VIN。让我知道这是否有意义。这非常有效!然而,假设我们给这个问题增加了另一层复杂性。如果有另一个专栏介绍未报告的远程通信单位,该怎么办。如果未报告,则行中将包含条目“NRU”。考虑到这一点,我想从逻辑中排除那些带有非报告单元的行。例如,假设VIN 123为7/1-7/31,远程通信设备未报告,并且标记为。我希望排除将该行保留在“bucket”中为空,然后在8/1-8/31提取并将其分类为0-30天。我尝试将myTable[NRU]“NRU”添加到每个变量的筛选函数中,但它没有达到我的预期。这里有我遗漏的东西吗?有没有一个简单的方法可以做到这一点?如果您需要我正在查看的表格的另一个示例,请告诉我。建议:不要问任何问题,然后在您得到该问题的答案后,说明这只是问题的一半。您可以做的是添加一个有条件的新里程列,即当NRU列具有“NRU”值时为1。在我的回答中,用新的里程栏替换旧的里程栏。对此我深表歉意,这对社区来说还是新鲜事。但总的来说,我成功了。非常感谢你的帮助!非常感谢,别担心。很高兴我能帮忙。
Buckets =
VAR rowDate = 'myTable'[ Start Date ]
VAR previousDate =
    CALCULATE (
        MAX ( 'myTable'[ Start Date ] ),
        FILTER (
            ALLEXCEPT ( myTable, myTable[ VIN ] ),
            'myTable'[ Start Date ] < rowDate
        )
    )
VAR prePreviousDate =
    CALCULATE (
        MAX ( 'myTable'[ Start Date ] ),
        FILTER (
            ALLEXCEPT ( myTable, myTable[ VIN ] ),
            'myTable'[ Start Date ] < previousDate
        )
    )
VAR PreviousMileage =
    CALCULATE (
        MAX ( 'myTable'[Mileage ] ),
        ALLEXCEPT ( 'myTable', 'myTable'[ VIN ] ),
        'myTable'[ Start Date ] = previousDate
    )
VAR PrePreviousMileage =
    CALCULATE (
        MAX ( 'myTable'[Mileage ] ),
        ALLEXCEPT ( 'myTable', 'myTable'[ VIN ] ),
        'myTable'[ Start Date ] = prePreviousDate
    )
RETURN
    SWITCH (
        TRUE (),
        'myTable'[Mileage ] + IF ( ISBLANK ( PreviousMileage ), 1, PreviousMileage )
            + IF ( ISBLANK ( PrePreviousMileage ), 1, PrePreviousMileage )
            = 0, "> 60 Days",
        'myTable'[Mileage ] + IF ( ISBLANK ( PreviousMileage ), 1, PreviousMileage )
            = 0, "31 to 60 Days",
        'myTable'[Mileage ] = 0, "0 to 30 Days",
        "No Days"
    )