合计当前月份 + 2 AND 下个月 + 1 和之后的月份

Posted

技术标签:

【中文标题】合计当前月份 + 2 AND 下个月 + 1 和之后的月份【英文标题】:Sum Current Month + 2 AND Next Month + 1 and Month After that 【发布时间】:2019-08-23 03:34:24 【问题描述】:

我需要在 DAX 中为 PowerBI 复制一个指标,但我不太确定如何去做。

基本是这样的:

事实表:机会

维度:创建日期、关闭日期

度量是这样的,我只是举个例子,因为我真的不知道如何解释它。

总和:

2 月创建,2 月、3 月、4 月关闭日期

创建于 3 月,截止日期为 3 月、4 月

在 APR 中创建并在 APR 中关闭

表/矩阵中的每个月都会发生这种情况。

似乎我需要一些变量,例如

测量 =

VAR Month1 = SUM(ClosedOpps) 其中 ClosedDate 在 CurrentMonth 和 CurrentMonth + 2 之间

VAR Month2 = SUM(CLosedOpps) 其中 ClosedDate 介于 CurrentMonth + 1 和 CurrentMonth + 2 之间

VAR Month3 = SUM(ClosedOpps) 其中 ClosedDate = CurrentMonth + 2

返回 Month1 + Month2 + Month3

我的理解是,当我将 MonthYear 列拖到视觉对象中时,关闭日期过滤器将是表/矩阵视觉对象

编辑:

这是他们在 Excel 中所做工作的简化副本

所以左边的数据是事实表。您可以查看 Opps 的创建时间和关闭时间。我添加了 Created MonthYear 和 Closed MonthYear。 Pivot 是他们现在在 Excel 中所拥有的。顶部(列)的日期是创建年月,行的日期是关闭年月。

我需要能够对 I3:K5 中的数字求和,在示例中总计为 5500。

更新:

所以我在建议的日期维度表中添加了它,复制了它(一个用于打开日期,一个用于关闭日期)我添加了一个列 DateDIM_KEY 到每个列,它只是一个数字索引。事实表有这些键,它们是从相同的日期范围(2013 年到 2030 年)加载的。事实表中的 ActualValue 列是我们要求和的列。

这是更新后的事实表示例。我直接从这些日期的日期维度中提取了 DateDIM_KEY 值。

【问题讨论】:

您能否提供一个数据样本,这样我们就不会猜测了? 查看更新后的屏幕截图 【参考方案1】:

您需要一个好的日期维度。你需要让它为 OpenDate 和 CloseDate 进行角色扮演。那里有很多不错的日期维度。我喜欢mine。

假设您将 'OpenDate'[Month] 放在轴标签上。

Opportunity Value = SUM ( 'Opportunity'[Value] )
MyMeasure iterator =
// start of the month on the current row of a pivot/axis label of a chart
VAR CurrentMonthStart = MIN ( 'OpenDate'[Date] )
// End of the month 2 months out
VAR ThreeMonthsOutEnd = EOMONTH ( CurrentMonthStart, 2 )
// This represents one row per month. You could also use a MonthAndYear type field.
// We will walk through the three open months we care about, and in each will sum
// the value for the opportunities opened in that month, with additional filters.
VAR NextThreeOpenMonths =
  CALCULATETABLE (
    VALUES ( 'OpenDate'[MonthIndex] ),
    ALL ( 'OpenDate' ),
    DATESBETWEEN ( 'OpenDate'[Date], CurrentMonthStart, ThreeMonthsOutEnd )
  )
RETURN
  // Iterate each OpenMonth
  SUMX (
    NextThreeOpenMonths,
    // On each step of the iteration, grab the start of the currently iterated month
    VAR IterMonthStart = CALCULATE ( MIN ( 'OpenDate'[Date] ) )
    RETURN
      CALCULATE (
        [Opportunity Value],
        // There is date context from visuals we want to ignore:
        ALLEXCEPT ( 'OpenDate', 'OpenDate'[MonthIndex] ),
        // filter CloseDate to be between the start of the currently iterated
        // open month and the originally calculated ThreeMonthsOutEnd. The latter
        // is static within the scope of the iteration.
        DATESBETWEEN ( 'CloseDate'[Date], IterMonthStart, ThreeMonthsOutEnd )
      )
  )

另外,在编写之前的迭代方法时,我意识到我们可以在单个 setfilter 中完成这项工作:

MyMeasure set =
// MonthIndex is in my date dimension - super useful for arithmetic on dates.
// Read the readme.
VAR C = SELECTEDVALUE ( 'OpenDate'[MonthIndex] ) // want a short name below
// Table literal syntax - two column table, where each parenthesized expression
// forms a row. If it were much more, I'd do something clever with generate, but
// six cases are easy to write by hand.
VAR MonthFilters = 
  (C, C),
  (C, C+1),
  (C, C+2),
  (C+1, C+1),
  (C+1, C+2),
  (C+2, C+2)

RETURN
  CALCULATE (
    [Opportunity Value],
    TREATAS ( MonthFilters, 'OpenDate'[MonthIndex], 'CloseDate'[MonthIndex] )
  )

我更喜欢后者,但直到编写了迭代版本后才想到它,所以我要离开两者。基于集合的性能应该更好。

编辑:我忘记了一些截屏:

这是角色扮演日期dim的关系图:

以下是这两种措施的视觉效果:

【讨论】:

这看起来不错,将尝试在我的报告中实施,看看这是否有效。 这需要大量修改。我现在的问题是,我们从日期仓库加载。我们的事实表具有日期键,而不是日期字段,它们位于维度表中。虽然现在我可以引入这些列并将它们添加到事实表中。这看起来像一个非常好的约会 Dim 表。你应该让它可用是 SQL! 我有一个需要大量清理的 SQL 版本。这适用于日期键。您可以轻松地将日期键导出或加入我共享的日期维度。获得密钥后,您可以按原样使用维度。您不应该尝试将其他暗淡的列放入事实中 幸运的是,DateDIM_KEY 只是一个数字索引。所以我将它添加到您的 DateDim 中,但是我没有得到任何返回值。我只尝试实现基于集合的。会尝试另一个。 除了TREATAS 之外,您可能还需要在CALCULATE 中添加ALL ( 'OpenDate' ), ALL ( 'CloseDate' ),具体取决于您的视觉对象的配置方式。不过,很高兴它正在工作。【参考方案2】:

最好的办法是添加一个自定义列(在编辑查询下),其中包含每月的日期差异。现在,您可以在 LeadTimeInMonth 列之后为您的场景进行过滤。如果您将字段拖放到视觉对象中,则可以按此列进行过滤。

Date.Month([ClosedDAte])-Date.Month([OpenDate])

我不确定您真正想要评估什么,但如果您需要确切地需要 ClosedDate between CurrentMonth and CurrentMonth + 2,您可以先从 ClosedDate 评估月份,然后是今天的月份,然后过滤结果。

【讨论】:

您需要更新您的差分公式以涵盖多年。想象一下 2018 年 12 月开盘和 2019 年 1 月关盘。那是 1-12=-11。如果负数,您可以添加 12 以在几个月内恢复到适当的交货时间。或者您可以利用月份的索引列,或者如果您从数据库中采购,您可以使用它的日期差分功能。你也可以在 M 持续时间类型中弄出一个月。

以上是关于合计当前月份 + 2 AND 下个月 + 1 和之后的月份的主要内容,如果未能解决你的问题,请参考以下文章

获取下个月的月份

PHP下获取上个月、下个月、本月的日期

csharp 下个月更高的月份

Excel从列表中的选定月份获取下个月?

Python之计算当前月份的日期范围(calendardatetime)

获取下个月的今天