0

我正在努力使用 DAX 模式,以便在图表上绘制平均持续时间值。

这是问题所在:我的数据集有一个名为的字段dtOpened,它是一个日期值,描述了某事开始的时间,我希望能够计算自该日期以来的持续时间(以天为单位)。然后,我希望能够在一段时间内创建自该日期以来的平均持续时间。在考虑现在的值时很容易做到,但我希望能够显示一个图表,描述x 轴上不同时间段(月/季度/年)的平均值)。

我面临的问题是,如果我创建一个计算列来查找当前年龄 ( NOW() - [dtOpened]),那么它总是使用该NOW()函数——这对历史时间跨度没有用处。也许我需要一个度量,而不是计算列,但我不知道该怎么做。

我曾考虑过使用LASTDATE( 而不是NOW) 来计算任何单个月/季度/年的过滤器上下文中的最后一个日期,但如果当前月份只有一半,那么它可能需要考虑今天的日期作为从中减去该值的dtOpened值。

我将不胜感激您能给我的任何帮助或指示!

4

2 回答 2

0

看起来您有一个表(我们称之为案例)存储您的案例,每个案例有一条记录,字段如下:casename、dtOpened、OpenClosedFlag

您应该创建一个日期表,每天记录跨越您的日期范围。日期表将有一个月末日期字段,用于标识该月的最后一天(季度和年度相同)。但这将是一个断开连接的日期表。不要在 Date 表上的 Date 和您的案例打开日期之间创建关系。

然后使用迭代平均x 来平均日期差异。

Average Duration (days) :=
CALCULATE (
    AVERAGEX ( Cases, MAX ( DateTable[Month Ending] ) - Cases[dtopened] ),
    FILTER ( Cases, Cases[OpenClosedFlag] = "Open" ),
    FILTER ( Cases, Cases[dtopened] <= MAX ( DateTable[Month Ending] ) )
)

一旦您根据月份绘制度量值,您应该会看到正确表示的平均值。您可以为季度和年度做类似的事情。

于 2016-07-20T09:10:03.047 回答
0

你是个天才,罗里;谢谢。

在我的示例中,我有一个dtClosed字段而不是 Opened/Closed 标志,因此需要进行一项额外的过滤来测试 Case 在时间点是否已关闭。所以我的度量最终看起来像这样:

Average Duration:=CALCULATE(
        AVERAGEX(CasesOnly, MAX(DT[LastDateM]) - CasesOnly[Owner Opened dtOnly]),
        FILTER(CasesOnly, OR(ISBLANK(CasesOnly[Owner Resolution dtOnly]), 
                             CasesOnly[Owner Resolution dtOnly] > MAX(DT[LastDateM]))),
        FILTER(CasesOnly, CasesOnly[Owner Opened dtOnly] <= MAX(DT[LastDateM]))
    )

为了得到图表,我DT[Date]在 x 轴上绘制了该字段。再次非常感谢。

于 2016-07-21T13:22:06.003 回答