Power BI-比较期间内的指标

时间:2020-11-05 13:33:03

标签: time powerbi measure related-content

我目前正在使用PowerBI脚本,这让我头疼。我介绍了一个度量,它显示了公司中每个公司的销售额。基本上看起来像这样。

MarketShare = 
DIVIDE(
  CALCULATE(
    SUM('Monthly Reports'[Active Certificates])
  ), 
  CALCULATE(
    SUM('Monthly Reports'[Active Certificates]),
    ALL('Monthly Reports'[Institute])
  )
)

这是一个漂亮的矩阵,向我显示了每个公司与总销售额相比的市场份额。 enter image description here

现在,我应该在下面的矩阵中(或相同,甚至更好)显示每个公司每月的市场份额变化。因此,7月应该显示一个空白单元格,因为它之前没有数据。对于第一行中的每个条目,八月应该显示在第一行+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])
    )
  )
)

我现在得到奇怪的结果。如果我选择按日期过滤并添加整个日期,则会显示下表,该表格会显示中间日期的正确差异,但不会显示最终日期: enter image description here

当我按日期层次结构和月份进行过滤时(如上表所示),我再次得到完全相同的结果。

enter image description here

谢谢, 温琴兹

2 个答案:

答案 0 :(得分:0)

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

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

您的第一个度量应类似于:

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

答案 1 :(得分:0)

我解决了计算问题,找到了一种错误显示日期层次的解决方法。 有时候,如果您不熟悉一种编程语言,那么一个问题的答案就会像人们期望的那样简单。

完成的工作代码:

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” 格式化日期。这显示相同。我希望我不再需要进一步的日期,因为我需要再次回到这一点。

所以我的结果看起来非常完美。 enter image description here