【问题标题】:Power BI - Compare Measures over PeriodPower BI - 比较一段时间内的度量
【发布时间】:2020-11-05 13:33:03
【问题描述】:

我目前正在编写一个 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])
    )
  )
)

目前我得到了奇怪的结果。如果我选择按日期过滤并添加显示下表的整个日期,它将显示中间日期的正确差异,但不是最终日期:

当我按日期层次结构和月份过滤时(如上面的另一个表格),我再次得到完全相同的结果。

谢谢, 文森茨

【问题讨论】:

    标签: time powerbi measure related-content


    【解决方案1】:

    在您的计算中,您使用 ALLEXCEPT。 ALLEXCEPT 从第一个参数中指定的扩展表中删除过滤器(从该表中的所有列中删除),仅保留以下参数中指定的列中的过滤器。这意味着您从矩阵中保留上下文(从您的标题中保留七月)。条件是互斥的。

    您想做相反的事情,从“日期”列中删除过滤器。使用 ALL('TableName'[ColumnName])

    您的第一个度量应如下所示:

    Simple =
    DIVIDE(CALCULATE ( SUM ( 'Monthly Reports'[Sales] ) )
        , CALCULATE (
            SUM ( 'Monthly Reports'[Sales] ),
            ALL ( 'Monthly Reports'[Company] )
        ))
    

    【讨论】:

    • 感谢您的帮助!正如您所说,我已经实施了更改,现在我得到了更好的结果。然而,仍然存在两个问题。在列中显示月份名称以及错误的第一列和最后一列。我相应地更改了帖子!
    【解决方案2】:

    我解决了我的计算并找到了错误显示日期层次结构的解决方法。 有时,如果您不熟悉一种编程语言,但问题的答案却比预期的更简单。

    完成的工作代码:

    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 操作读取,而且我错过了最旧的报告,因为在离开之前没有。 基本上我找到了函数:PREVIOUSMONTH(太简单了)。

    此外,我之前添加了一个 IF 子句来检查我是否在第一列。如果是这样,我会冲破价值。

    最后留下的唯一问题是,在显示日期层次结构时,我只在矩阵的所有字段中看到破折号。但是,如果我显示整个日期,我可以看到所有正确的值。我的解决方法是用 "mmmm" 格式化日期。这显示相同。我希望在任何进一步的步骤中都不需要日期,因为我需要再次回到这个问题。

    所以我的结果看起来非常完美。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 2021-10-23
      • 2021-09-08
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      相关资源
      最近更新 更多