首页 文章

使用DAX在日期范围内累计不同日期的计数

提问于
浏览
0

我还是PowerPivot和表格模型的新手,从关系数据库转换是很辛苦的工作 .

我有两个功能支点表:日志和日历 - 它们没有链接 . 日志行具有使用[开始日期]和[结束日期]列指定的日期范围 . 我有按[车辆ID]分组的日志行,我为每个[车辆ID]组添加了一个顺序[行ID] .

日志日期范围相互重叠,我正在尝试编写一个度量,给出日期范围内不同天数的累积计数 .

日志表:

Vehicle ID  Row ID  Start Date   End Date      *Cumulated Logged Days (Expected Result)*
AAA         1       1 Jun 2016   1 June 2016   1
AAA         2       1 Jun 2016   5 June 2016   5
AAA         3       10 Jun 2016  10 June 2016  6
BBB         1       1 Jun 2016   1 June 2016   1
BBB         2       5 Jun 2016   5 June 2016   2
BBB         3       7 Jun 2016   7 June 2016   3

这是我最好的尝试......

Cumulated Logged Days:
=CALCULATE(
    COUNTROWS('Calendar'),
    FILTER(
        ALL(Logbook),
        COUNTROWS(
            FILTER(
                Logbook,
                EARLIER(Logbook[Vehicle ID]) = [Vehicle ID]
                && EARLIER(Logbook[Row ID]) <= [Row ID]
            )
        )
    ),
    FILTER(
        ALL('Calendar'),
        'Calendar'[Date] >= MIN(Logbook[Start Date])
        && 'Calendar'[Date] <= MAX(Logbook[End Date])
    )
)

1 回答

  • 0

    他们说 divide and conquer 和's what I' d在你的情况下 . 基本上,所需的第一个计算是开始日期和结束日期之间的天数 . 一旦你有两个日期之间的差异,你可以累计这些值的总和 . 让我们在DAX中实现它 .

    使用以下表达式在 LogBook 表中创建名为 DaysCount 的计算列:

    DaysCount :=
    IF ( [Start Date] < [End Date], DATEDIFF ( [Start Date], [End Date], DAY ), 1 )
    

    现在创建一个度量来获取累计天数:

    Cumulated Logged Days :=
    VAR currentVehicle =
        LASTNONBLANK ( LogBook[Vehicle ID], 0 )
    RETURN
        CALCULATE (
            SUM ( LogBook[DaysCount] ),
            FILTER (
                ALL ( LogBook ),
                LogBook[Row ID] <= MAX ( LogBook[Row ID] )
                    && currentVehicle = LogBook[Vehicle ID]
            )
        )
    

    Excel 2016支持 UPDATE DATEDIFF 功能,因此如果您使用的是其他版本, DaysCount 计算列将无法正常工作

    DaysCount计算列的替代方案(在Excel 2013中测试):

    =IF([Start Date]<[End Date], 1 * ([End Date]-[Start Date]),1)
    

    对于变量的支持也包含在DAX 2015(Excel 2016)中,因此如果您有早期版本,则必须将此表达式用于 Cumulated Logged Days 度量 .

    Cumulated Logged Days :=
    CALCULATE (
        SUM ( LogBook[DaysCount] ),
        FILTER (
            ALL ( LogBook ),
            COUNTROWS (
                FILTER ( LogBook, EARLIER ( LogBook[Vehicle ID] ) = LogBook[Vehicle ID] )
            )
                && LogBook[Row ID] <= MAX ( LogBook[Row ID] )
        )
    )
    

    Excel 2013数据透视表中的最终结果 .

    enter image description here

    如果这有帮助,请告诉我 .

相关问题