计算月级别的上个月值

时间:2021-02-12 15:25:59

标签: powerbi dax

我想在 Power BI 中计算上个月的值,因为我知道我有我的销售表处于月级别而不是日级别(允许将该列标记为日期列)。

两张桌子:

  1. 一个用于销售(没有连续的日期)
  2. 一个标记为时间表(具有连续日期)

日期列上的表格之间的链接。

我有一个这样的公式:

Sales Last Month = CALCULATE(SUM(sales[sales]), PREVIOUSMONTH(time[dateKey]))

它只是不起作用,有什么建议吗?

添加 2 个屏幕截图。

table in power bi

report in power bi - a filter on the date_key is applied

2 个答案:

答案 0 :(得分:0)

原因如下:在报表视觉中,您从 sales 表中获取列(年、月、第一天...等)。 PREVIOUSMONTH 的工作原理是这样的 - 它从上下文中获取第一个日期(来自作为第一个参数提供的日期列)并返回一个包含上个月所有日期的表。所以理论上,这应该可行。

但是,由于您的视觉对象仅包含销售表中的列,并且您很可能在日期表和销售之间存在单向一对多关系,因此在上下文中没有 time[date]。因此,PREVIOUSMONTH 不会返回任何内容!

为了解决您的问题,我建议您在时间表中添加年份和月份列,并在您的视觉对象中使用它们。

如果我做对了,请告诉我。

编辑

为了扩展上下文中没有 time[date] 的原因,我将解释单向 one-to-many 关系的工作原理。

在这些情况下,关系的 one 端总是有一个表(让我们称它为 filtering table),而关系的 many 端总是有另一个表(让我们称之为filtered table)。

当您从 filtering table 中选择(通过切片器/过滤器/交叉突出显示)值时,filtered table 中的行仅限于与the filter context。当您计算视觉对象(例如表格)中的度量时,也会发生同样的情况。显示在 filtering table 边表中 row context 过滤器行的各个行 (filtering table) 中的值。

然而,它不能反过来工作,因为它是一种 many 关系。这适用于 single direction,但这也有其自身的含义。

这就是我建议将 bi-direcional relationship 表中的列放入视觉对象的原因,因为这会引入过滤 time 以使 row context 函数起作用。

答案 1 :(得分:0)

您正在定义一个计算列,因此当前行上有一个行上下文

CALCULATE 导致上下文转换,将当前行中的每一列转换为相应的过滤上下文

因此,要使其正常工作,您必须删除所有不需要的过滤器。你可以从这里开始

Sales Last Month =
CALCULATE (
    SUM ( sales[sales] ),
    PREVIOUSMONTH ( time[dateKey] ),
    REMOVEFILTERS ( sales )
)
相关问题