PowerBi时间序列持续时间

时间:2018-11-16 14:21:31

标签: powerbi dax

在PowerBI中,我有一个包含3列的简单表:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("TYzBCcAwDAN38dugyk5bdxaT/deICzXN77hDyhSKCkHYwafwbJyaYiUc9I4XaH/1MgHeXQO+bcf7ux0XW3x5Lg==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [id = _t, start = _t, end = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"id", Int64.Type}, {"start", type date}, {"end", type date}})
in
    #"Changed Type"

我可以从中创建以下视觉效果

TimeLine 我的挑战是根据上面选择的过滤器来计算时间序列中的总持续时间(以天为单位)。任何帮助将不胜感激。

我尝试了以下DAX公式,但如上所述却给了我疯狂的结果。

YTDDuration = 
var start_Date=FIRSTDATE(ALLSELECTED('CALENDAR'[Date]))
var end_Date=LASTDATE(ALLSELECTED('CALENDAR'[Date]))
var current_Start=MAX(Table2[start])
var current_end=MAX(Table2[end])
var bigif=IF(current_end>start_Date&&current_Start<end_Date,DATEDIFF(MAX(start_Date,current_Start),MIN(end_Date,current_end),DAY),0)
RETURN
CALCULATE(SUMX(Table2, bigif),FILTER(ALL(Table2), Table2[start] <= max(Table2[end])))

预期输出为:TimeLine

关键是要解决日期差异并合并重叠的日期。

1 个答案:

答案 0 :(得分:0)

您可以遍历日历表并计算该天属于id个时间段之一的天数。

YTDDuration = 
var current_Start = CALCULATE(MIN(Table2[start]), ALL(Table2))
var current_end = MAX(Table2[end])
RETURN
    SUMX(
        FILTER('CALENDAR', 'CALENDAR'[Date] <= current_end),
        MAXX(ALL(Table2), IF([Date] > [start] && [Date] <= [end], 1, 0))
    )

此操作从最短的start日期开始,并为Date中某行中startendTable2之间的每一天加1。如果没有任何行包含那个Date,则最大值超过零,并返回零。如果一个或多个匹配项,您最多可以得到一个,我们将在这一天进行计数。


YTD Duration by end

YTD Duration