创建一个 DAX 模式,计算图表 x 轴上日期字段和月份值之间的天数

Creating a DAX pattern that counts days between a date field and a month value on a chart's x-axis

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

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

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

我考虑过使用 LASTDATE(而不是 NOW)来计算任何单个 month/quarter/year 的筛选上下文中的最后日期,但是如果当前月才过半,那么它可能需要将今天的日期视为减去 dtOpened 值的值。

如果您能给我任何帮助或指点,我将不胜感激!

您似乎有一个 table(我们称之为案例)存储您的案例,每个案例一条记录,字段如下: casename, dtOpened, OpenClosedFlag

您应该创建一个日期 table,记录在您的日期范围内的每一天。日期 table 将有一个月结束日期字段,用于标识该月的最后一天(与季度和年份相同)。但这将是一个断开连接的日期 table。不要在日期 table 和您的案例开放日期之间建立关系。

然后使用迭代 averagx 对日期差异进行平均。

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] ) )
)

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

你是个天才,罗里;谢谢

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

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]))
    )

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