首页 文章

计算事件持续时间仅在切片时段内

提问于
浏览
0

我们正在研究PowerBI的报告解决方案,它可以满足我们的需求 . 但是,我们需要能够对事件进行特别报告 . 每个事件都有一个开始日期和结束日期以及总秒数,并进行百分比计算等 . 这非常有效 .

但是,我们的共同要求是指定我们希望考虑数据的开始日期和结束日期 . 许多事件将跨越所需时期的开始和结束,甚至在时间段开始之前开始并超越结束 . 我们需要做的只是考虑那段时间内的事件 .

是否可以使用切片器来定义开始/结束时段,然后仅包括每个事件的切片时段内的秒数?

这将允许我们计算在该时期内所有事件的总时间 .

更新

我的表包含数十万行

事件ID | VehicleID | StatusID | ReasonCodeID |的startDateTime | EndDateTime | TotalDuration

我们需要查看属于选定时间段(开始/结束)的每个事件的部分 . 但事件可以跨越时期 . 如果事件的一部分超出了一段时间,我们想要忽略该部分持续时间 . 如果整个事件超出选定的时间段,那么我们将忽略所有这些事件 .

例如,一个活动从2月1日开始,到7月1日 . 如果切片机的选定日期范围是1月1日到3月1日,那么我想仅包括2月1日到3月1日之间的总持续时间计算时间

2 回答

  • 1

    您要求的是可行的,但它的工作原理在很大程度上取决于表中的数据量 .

    您可以使用DAX度量来计算任何属于给定日期的事件的持续时间总和 . 您可以使用切换的断开连接的日期表来执行此操作(2016年10月的Power BI Desktop版本包含一个内置数据切片器,可让您轻松选择范围) . 有关这方面的更多信息:https://powerbi.microsoft.com/en-us/blog/power-bi-desktop-october-feature-summary/#reportView .

    然后,您将获得一个计算持续时间SUMS的CALCULATE度量,使用FILTER确保有问题的事件落在切片器选择的日期范围内 . 这里有关于这部分问题的更多细节:Optimizing Dax & model for "where date between" type queries

    但是,您要更进一步,因为您不希望SUM在给定日期范围内的整个事件持续时间 - 您只想将给定日期范围内的持续时间相加 .

    为此,您必须根据所选日期范围计算运行时每个行的持续时间 . 您可以使用使用SUMX的度量(请参见下文)执行此操作,但是对于大量记录(数千,数百万),计算将开始减慢 .

    例如,如果您有一个名为Date的断开连接的日期表,并且您的事件表名为Event,则可以使用以下度量:

    Filtered Duration =
    CALCULATE (
        SUMX (
            Event,
            DATEDIFF (
                MAX ( MIN ( 'Date'[Date] ), Event[StartDateTime] ),
                MIN ( MAX ( 'Date'[Date] ), Event[EndDateTime] ),
                SECOND
            )
        ),
        FILTER (
            'Event',
            'Event'[StartDateTime] <= MAX ( 'Date'[Date] )
                && 'Event'[EndDateTime] >= MIN ( 'Date'[Date] )
        )
    )
    

    MIN('Date'[Date]) 在这种情况下,公式对应于断开连接的日期表中所选日期范围内的最早日期 . MAX('Date'[Date]) 对应于最近的日期 .

    最后一部分(FILTER)说“只查看落在所选范围内的日期的事件” . SUMX说“为每一行,做一个DATEDIFF” . DATEDIFF中的MAX表示“选择切片器中第一个日期或事件开始日期的后期” . 这样做的原因是,如果您在日期切片机上选择第15到第20,并且事件从18日开始,则您需要从18日算起 . 但是,如果事件在11日开始,你想从15日算起 . MIN与结束日期相反 .

    如果事件完全在时间范围内,那么它将计算从开始到结束的秒数 . 如果事件结束在所选时间范围之后(例如),则它将计算从事件的确切开始到所选结束日期的午夜的秒数 .

    请注意,因为我使用了日期表,所以您无法选择部分日期作为日期范围 . 您可以将其扩展为包含时间表,但它会变得更复杂(您需要一个单独的开始和结束时间表,然后在上面考虑该逻辑,已经非常复杂,公式)

  • 1

    是否可以使用切片器来定义开始/结束时段,然后仅包括每个事件切片时段内的秒数?

    对的,这是可能的 . 在Power BI Gallery中,有一个自定义可视化,可让您过滤日期范围 .

    您只需将模型中的日期列拖放到 Timeline slicer 即可过滤您的度量 .

    要安装它,请转到图库并在搜索框中搜索 timeline ,下载并将其导入Power BI .

    如果您遇到DAX表达式,请在您的问题中包含SQL代码和示例模型 .

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

相关问题