Power BI - 比较一段时间内的度量
Power BI - Compare Measures over Period
我目前正在处理 PowerBI 脚本,这让我很头疼。我介绍了一个衡量标准,它显示了公司中每个公司的销售额。基本上是这样的。
MarketShare =
DIVIDE(
CALCULATE(
SUM('Monthly Reports'[Active Certificates])
),
CALCULATE(
SUM('Monthly Reports'[Active Certificates]),
ALL('Monthly Reports'[Institute])
)
)
它的输出是一个漂亮的矩阵,显示了每家公司的市场份额与总销售额的比较。
现在我应该在下面的矩阵中显示(或者相同,甚至更好)每个公司每个月的市场份额变化。因此,July 应该显示一个空白单元格,因为它之前没有数据。八月应该在第一行显示 +0,34 九月 +0,3 ... 等等,第一行的每个条目并继续向下。
我尝试实施一种措施,该措施总是从前一个值中扣除,但到目前为止我还没有成功。
Market Share Prev Period =
(
DIVIDE(
CALCULATE(
SUM('Monthly Reports'[Active Certificates])
),
CALCULATE(
SUM('Monthly Reports'[Active Certificates]),
ALL('Monthly Reports'[Institute])
)
)
)
-
(
DIVIDE(
CALCULATE(
SUM('Monthly Reports'[Active Certificates]),
DATEADD('Monthly Reports'[LoadDate], -1, MONTH)
),
CALCULATE(
SUM('Monthly Reports'[Active Certificates]),
DATEADD('Monthly Reports'[LoadDate], -1, MONTH),
ALL('Monthly Reports'[Institute])
)
)
)
我现在得到奇怪的结果。如果我选择按日期过滤并添加整个日期,则会显示以下 table,它会显示中间日期的正确差异,但不会显示最终日期:
当我按日期层次结构和月份过滤时(就像上面的其他 table 一样),我再次得到完全相同的结果。
谢谢,
文森茨
在您的计算中,您使用了 ALLEXCEPT。
ALLEXCEPT 从第一个参数中指定的扩展 table 中删除过滤器(从此 table 中的所有列中删除),仅保留以下参数中指定的列中的过滤器。这意味着您从矩阵中保留上下文(来自 header 的 7 月)。条件互斥。
您想做相反的事情,从“日期”列中删除过滤器。使用 ALL('TableName'[ColumnName])
您的第一个度量应该如下所示:
Simple =
DIVIDE(CALCULATE ( SUM ( 'Monthly Reports'[Sales] ) )
, CALCULATE (
SUM ( 'Monthly Reports'[Sales] ),
ALL ( 'Monthly Reports'[Company] )
))
我解决了我的计算并找到了错误显示的日期层次结构的解决方法。
如果您不熟悉一种编程语言,有时问题的答案会如预期的那样简单。
完成的工作代码:
Market Share Prev Period =
IF(
CALCULATE(
SUM('Monthly Reports'[Sales]),
PREVIOUSMONTH('Monthly Reports'[SaleDate])
)
<> BLANK()
,
(
DIVIDE(
CALCULATE(
SUM('Monthly Reports'[Sales])
),
CALCULATE(
SUM('Monthly Reports'[Sales]),
ALL('Monthly Reports'[Company])
)
,
0
)
)
-
(
DIVIDE(
CALCULATE(
SUM('Monthly Reports'[Sales]),
PREVIOUSMONTH('Monthly Reports'[SaleDate])
),
CALCULATE(
SUM('Monthly Reports'[Sales]),
PREVIOUSMONTH('Monthly Reports'[SaleDate]),
ALL('Monthly Reports'[Company])
)
,
0
)
),
"-"
)
我想通了,使用 DateAdd(.., -1, Month) 我只改变了阅读的内容,而不是它在哪一列中。所以我总是错过最新的值,因为当然它没有被 -1 操作读取,而且我错过了最旧的报告,因为在关闭之前有 none。
基本上我找到了函数:PREVIOUSMONTH(太简单了,不可能是真的)。
此外,我之前添加了一个 IF 子句来检查我是否在第一列。如果是这样,我正在破坏价值。
我最后留下的唯一问题是,在显示日期层次结构时,我只在矩阵的所有字段中看到破折号。但是,如果我显示整个日期,我可以看到所有正确的值。我的解决方法是使用 "mmmm" 格式化日期。这显示相同。我希望我在任何进一步的步骤中都不需要日期,因为我需要再次回到这里。
所以我的结果看起来非常完美。
我目前正在处理 PowerBI 脚本,这让我很头疼。我介绍了一个衡量标准,它显示了公司中每个公司的销售额。基本上是这样的。
MarketShare =
DIVIDE(
CALCULATE(
SUM('Monthly Reports'[Active Certificates])
),
CALCULATE(
SUM('Monthly Reports'[Active Certificates]),
ALL('Monthly Reports'[Institute])
)
)
它的输出是一个漂亮的矩阵,显示了每家公司的市场份额与总销售额的比较。
现在我应该在下面的矩阵中显示(或者相同,甚至更好)每个公司每个月的市场份额变化。因此,July 应该显示一个空白单元格,因为它之前没有数据。八月应该在第一行显示 +0,34 九月 +0,3 ... 等等,第一行的每个条目并继续向下。 我尝试实施一种措施,该措施总是从前一个值中扣除,但到目前为止我还没有成功。
Market Share Prev Period =
(
DIVIDE(
CALCULATE(
SUM('Monthly Reports'[Active Certificates])
),
CALCULATE(
SUM('Monthly Reports'[Active Certificates]),
ALL('Monthly Reports'[Institute])
)
)
)
-
(
DIVIDE(
CALCULATE(
SUM('Monthly Reports'[Active Certificates]),
DATEADD('Monthly Reports'[LoadDate], -1, MONTH)
),
CALCULATE(
SUM('Monthly Reports'[Active Certificates]),
DATEADD('Monthly Reports'[LoadDate], -1, MONTH),
ALL('Monthly Reports'[Institute])
)
)
)
我现在得到奇怪的结果。如果我选择按日期过滤并添加整个日期,则会显示以下 table,它会显示中间日期的正确差异,但不会显示最终日期:
当我按日期层次结构和月份过滤时(就像上面的其他 table 一样),我再次得到完全相同的结果。
谢谢, 文森茨
在您的计算中,您使用了 ALLEXCEPT。 ALLEXCEPT 从第一个参数中指定的扩展 table 中删除过滤器(从此 table 中的所有列中删除),仅保留以下参数中指定的列中的过滤器。这意味着您从矩阵中保留上下文(来自 header 的 7 月)。条件互斥。
您想做相反的事情,从“日期”列中删除过滤器。使用 ALL('TableName'[ColumnName])
您的第一个度量应该如下所示:
Simple =
DIVIDE(CALCULATE ( SUM ( 'Monthly Reports'[Sales] ) )
, CALCULATE (
SUM ( 'Monthly Reports'[Sales] ),
ALL ( 'Monthly Reports'[Company] )
))
我解决了我的计算并找到了错误显示的日期层次结构的解决方法。 如果您不熟悉一种编程语言,有时问题的答案会如预期的那样简单。
完成的工作代码:
Market Share Prev Period =
IF(
CALCULATE(
SUM('Monthly Reports'[Sales]),
PREVIOUSMONTH('Monthly Reports'[SaleDate])
)
<> BLANK()
,
(
DIVIDE(
CALCULATE(
SUM('Monthly Reports'[Sales])
),
CALCULATE(
SUM('Monthly Reports'[Sales]),
ALL('Monthly Reports'[Company])
)
,
0
)
)
-
(
DIVIDE(
CALCULATE(
SUM('Monthly Reports'[Sales]),
PREVIOUSMONTH('Monthly Reports'[SaleDate])
),
CALCULATE(
SUM('Monthly Reports'[Sales]),
PREVIOUSMONTH('Monthly Reports'[SaleDate]),
ALL('Monthly Reports'[Company])
)
,
0
)
),
"-"
)
我想通了,使用 DateAdd(.., -1, Month) 我只改变了阅读的内容,而不是它在哪一列中。所以我总是错过最新的值,因为当然它没有被 -1 操作读取,而且我错过了最旧的报告,因为在关闭之前有 none。 基本上我找到了函数:PREVIOUSMONTH(太简单了,不可能是真的)。
此外,我之前添加了一个 IF 子句来检查我是否在第一列。如果是这样,我正在破坏价值。
我最后留下的唯一问题是,在显示日期层次结构时,我只在矩阵的所有字段中看到破折号。但是,如果我显示整个日期,我可以看到所有正确的值。我的解决方法是使用 "mmmm" 格式化日期。这显示相同。我希望我在任何进一步的步骤中都不需要日期,因为我需要再次回到这里。
所以我的结果看起来非常完美。