合计当前月份 + 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 和之后的月份的主要内容,如果未能解决你的问题,请参考以下文章