参考n号,循环条件n次。 powerbi中另一个表的行数

时间:2018-12-20 14:11:21

标签: powerbi dax powerbi-desktop

我有一个参考时间表TimeTable和另一个数据表Datatable,如图所示。 enter image description here

我正在尝试使用以下代码将Ref_Time作为DataTable中的自定义列。作为解决方法,我在这里将时间硬编码。我该如何消除这一点。考虑到TimeTable中的行数可能会有所不同。

Ref_Time = IF(
            TIMEVALUE(DataTable[endTime]) >= TIMEVALUE("5:35:00 AM") , "6:00:00 AM",
            IF(
                TIMEVALUE(DataTable[endTime]) >= TIMEVALUE("5:30:00 AM") && TIMEVALUE(DataTable[endTime]) < TIMEVALUE("5:35:00 AM"), "5:30:00 AM",
                IF(
                    TIMEVALUE(DataTable[endTime]) >= TIMEVALUE("5:25:00 AM") && TIMEVALUE(DataTable[endTime]) < TIMEVALUE("5:30:00 AM"), "5:25:00 AM",
                    IF(
                        TIMEVALUE(DataTable[endTime]) >= TIMEVALUE("5:20:00 AM") && TIMEVALUE(DataTable[endTime]) < TIMEVALUE("5:25:00 AM"), "5:20:00 AM",
                        IF(
                            TIMEVALUE(DataTable[endTime]) >= TIMEVALUE("5:15:00 AM") && TIMEVALUE(DataTable[endTime]) < TIMEVALUE("5:20:00 AM"), "5:15:00 AM",
                            IF(
                                TIMEVALUE(DataTable[endTime]) >= TIMEVALUE("5:10:00 AM") && TIMEVALUE(DataTable[endTime]) < TIMEVALUE("5:15:00 AM"), "5:10:00 AM",
                                IF(
                                    TIMEVALUE(DataTable[endTime]) >= TIMEVALUE("5:05:00 AM") && TIMEVALUE(DataTable[endTime]) < TIMEVALUE("5:10:00 AM"), "5:05:00 AM",
                                    IF(
                                        TIMEVALUE(DataTable[endTime]) >= TIMEVALUE("5:00:00 AM") && TIMEVALUE(DataTable[endTime]) < TIMEVALUE("5:05:00 AM"), "5:00:00 AM",
                                        IF(
                                            TIMEVALUE(DataTable[endTime]) >= TIMEVALUE("4:55:00 AM") && TIMEVALUE(DataTable[endTime]) < TIMEVALUE("5:00:00 AM"), "4:55:00 AM",
                                            IF(
                                                TIMEVALUE(DataTable[endTime]) >= TIMEVALUE("2:00:00 AM") && TIMEVALUE(DataTable[endTime]) < TIMEVALUE("4:55:00 AM"), "2:00:00 AM",
                                                IF(
                                                    TIMEVALUE(DataTable[endTime]) < TIMEVALUE("2:00:00 AM") , "1:00:00 AM"
                                                )
                                            )
                                        )
                                    )
                                )
                            )
                        )
                    )
                )
            )
        )

1 个答案:

答案 0 :(得分:0)

这应该更容易阅读,并且应该执行您需要的操作:

Ref_Time =
SWITCH (
    TRUE (),
    TIMEVALUE ( DataTable[endTime] ) >= TIMEVALUE ( "5:35:00 AM" ), "6:00:00 AM",
    AND (
        TIMEVALUE ( DataTable[endTime] ) >= TIMEVALUE ( "5:30:00 AM" ),
        TIMEVALUE ( DataTable[endTime] ) < TIMEVALUE ( "5:35:00 AM" )
    ), "5:30:00 AM",
    AND (
        TIMEVALUE ( DataTable[endTime] ) >= TIMEVALUE ( "5:25:00 AM" ),
        TIMEVALUE ( DataTable[endTime] ) < TIMEVALUE ( "5:30:00 AM" )
    ), "5:25:00 AM",
    AND (
        TIMEVALUE ( DataTable[endTime] ) >= TIMEVALUE ( "5:20:00 AM" ),
        TIMEVALUE ( DataTable[endTime] ) < TIMEVALUE ( "5:25:00 AM" )
    ), "5:20:00 AM",
    AND (
        TIMEVALUE ( DataTable[endTime] ) >= TIMEVALUE ( "5:15:00 AM" ),
        TIMEVALUE ( DataTable[endTime] ) < TIMEVALUE ( "5:20:00 AM" )
    ), "5:15:00 AM",
    AND (
        TIMEVALUE ( DataTable[endTime] ) >= TIMEVALUE ( "5:10:00 AM" ),
        TIMEVALUE ( DataTable[endTime] ) < TIMEVALUE ( "5:15:00 AM" )
    ), "5:10:00 AM",
    AND (
        TIMEVALUE ( DataTable[endTime] ) >= TIMEVALUE ( "5:05:00 AM" ),
        TIMEVALUE ( DataTable[endTime] ) < TIMEVALUE ( "5:10:00 AM" )
    ), "5:05:00 AM",
    AND (
        TIMEVALUE ( DataTable[endTime] ) >= TIMEVALUE ( "5:00:00 AM" ),
        TIMEVALUE ( DataTable[endTime] ) < TIMEVALUE ( "5:05:00 AM" )
    ), "5:00:00 AM",
    AND (
        TIMEVALUE ( DataTable[endTime] ) >= TIMEVALUE ( "4:55:00 AM" ),
        TIMEVALUE ( DataTable[endTime] ) < TIMEVALUE ( "5:00:00 AM" )
    ), "4:55:00 AM",
    AND (
        TIMEVALUE ( DataTable[endTime] ) >= TIMEVALUE ( "2:00:00 AM" ),
        TIMEVALUE ( DataTable[endTime] ) < TIMEVALUE ( "4:55:00 AM" )
    ), "2:00:00 AM",
    TIMEVALUE ( DataTable[endTime] ) < TIMEVALUE ( "2:00:00 AM" ), "1:00:00 AM"
)