创建一个 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]
字段。
再次非常感谢。
我正在努力使用 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]
字段。
再次非常感谢。