我想在 Power BI 中计算上个月的值,因为我知道我有我的销售表处于月级别而不是日级别(允许将该列标记为日期列)。
两张桌子:
日期列上的表格之间的链接。
我有一个这样的公式:
Sales Last Month = CALCULATE(SUM(sales[sales]), PREVIOUSMONTH(time[dateKey]))
它只是不起作用,有什么建议吗?
添加 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 )
)