【问题标题】:Power BI Rolling Total Previous Month DAXPower BI 上个月滚动总计 DAX
【发布时间】:2018-04-13 00:15:50
【问题描述】:

我正在使用 POWER BI 并尝试计算上个月滚动总计的 DAX 表达式。我有一个过滤器,我选择某个月份,我想计算上个月的滚动总数。

以下是计算所选日期范围内滚动总计的完美方法。

如何计算前几个月的滚动总数?

Rolling_Total_Current_Month = CALCULATE(
        SUM(SalesInvoice[Sales])
        ,FILTER(ALLSELECTED(SalesInvoice), (SalesInvoice[Date]) <= MAX(SalesInvoice[Date])))

这是我的数据样本,我每天都有多个类别的销售额,(实际上我还有几列详细信息,但这被简化了)

Date    Day Amount  Category
1/1/2016    1   100 A
1/1/2016    1   120 B
1/1/2016    1   90  C
1/2/2016    2   500 A
1/2/2016    2   321 B
1/2/2016    2   143 C

到目前为止,我已经提出了一个求解滚动总数的方程式,但是当我尝试切片并查看单个类别的滚动总数时,它不适用于上个月。我只保留上个月的原始滚动总数。

这是适用于上个月滚动总数的公式。但是一旦根据类别进行切片,就不会重新计算上个月的滚动总数。

PREVIOUS_MONTH_ROLLING_TOTAL = 
CALCULATE(
    [Current Sales]
    ,FILTER(
        ALL( Orders )
        ,Orders[MonthNumber] = MAX( Orders[MonthNumber] ) - 1
            && Orders[Day] <= MAX( Orders[Day] )
    )
)

【问题讨论】:

    标签: powerbi dax


    【解决方案1】:

    我已经解决了如何获得前几个月的滚动总数。 你必须做三件事。首先在您的数据表中创建一个月数列(用作减去 1 个月的整数)。您还必须创建一个 days 列。

    然后为 Current Sales 或任何您的值创建一个度量。

    为当月销售额创建一个度量

    Current Sales = SUM(Orders[Amount])
    

    那么这个等式。

    PREVIOUS_MONTH_ROLLING_TOTAL = 
    CALCULATE(
        [Current Sales]
        ,FILTER(
            ALL( Orders )
            ,Orders[MonthNumber] = MAX( Orders[MonthNumber] ) - 1
                && Orders[Day] <= MAX( Orders[Day] )
        )
    )
    

    这个等式的想法是能够在图表上显示前几个月的滚动总计,X轴为“DAY”(所以1-31)然后您可以查看当前月份,上个月,同一时期最后年份都在同一个图表或表格上。

    【讨论】:

    • 如果你有多年的数据,这将把每年的上个月相加,所以你会得到多年数据的总和。
    • 嗯。我有,但不是,我检查了一堆。但是,什么不做,我不明白。让我使用切片器对不同细节的数据进行切片。它只是保留原来的滚动号码。
    • 我想我误解了你如何定义MonthNumber。我以为这只是一年中的一个月。
    • 是的,你是对的。我不应该把它称为月号和更多的月排名,因为它是 0 - 随便
    【解决方案2】:

    尝试以下方法:

    Rolling_Total_Previous_Month =
        VAR CurrentMonth = MAX(SalesInvoice[Date])
        VAR PreviousMonth = EOMONTH(CurrentMonth,-1)
        RETURN CALCULATE(SUM(SalesInvoice[Sales]), SalesInvoice[Date] <= PreviousMonth)
    

    【讨论】:

      【解决方案3】:

      首先,我在一个名为 Orders 的表中有这样的数据-

      Date            Amount
      12/12/2017      100
      12/12/2017      200
      12/12/2017      300
      1/1/2018        400
      1/1/2018        500
      

      我首先使用以下公式创建了一个名为 Year & Month 的计算列:-

      Year = YEAR(Orders[Date])
      Month = FORMAT(Orders[Date],"mmmm")
      

      然后我创建一个名为 Month Number 的列,当表中涉及一年以上时,它有助于排序以及识别以前的月份。

      MonthNumber = DATEDIFF(Min(Orders[Date]),Orders[Date],MONTH) 
      

      当前月份销售额可以是度量或计算列。在问题中,您通过计算列获得了当月销售额的答案,如果您想进行衡量,那么类似的方法可以在汇总表上使用。

      Current Month Sales = SUm(Orders[Amount])
      

      我还会创建一个名为 Key 的列:-

      Key = Orders[MonthNumber] & Orders[Category]
      

      现在,对于上个月的销售额,我将创建一个度量来查找我们创建的选定 MonthNumber。

      Previous Month Sales = 
               Var SelectedCategory = SELECTEDVALUE(Orders[Category])                                                                                                                                                           
               Var SelectedMonthNumberr = SELECTEDVALUE(Orders[MonthNumber]) - 1                                                                                                                                                
               Var ReqKey = SelectedMonthNumberr & SelectedCategory  
      
         Return 
               IF(ISBLANK(SelectedCategory) <> True(), 
               CALCULATE(SUM(Orders[Amount]),FILTER(ALL(Orders), Orders[Key] = ReqKey)),
               CALCULATE(SUM(Orders[Amount]),FILTER(ALL(Orders), Orders[MonthNumber] = SelectedMonthNumberr)))                                                                                                                                                                    
      

      或你的措施

      PREVIOUS_MONTH_ROLLING_TOTAL = 
      CALCULATE(
          [Current Sales]
          ,FILTER(
              ALL( Orders )
              ,Orders[MonthNumber] = MAX( Orders[MonthNumber] ) - 1
                  && Orders[Day] <= MAX( Orders[Day] )
          )
      )
      

      您可以将另一个过滤项添加为&amp;&amp; Orders[Category] = SELECTEDVALUE(Orders[Category]),但当您没有选择任何类别或在没有类别的表格或视觉对象上时将无法使用。因此,您需要在此处定义一个 if else 逻辑,正如我在度量公式中所引用的那样。

      如果这有帮助,请告诉我。

      【讨论】:

      • 感谢您的帮助。这最终没有奏效,但我的解决方案如下。在我的原始数据表中创建 MonthNumber 列对于它的工作至关重要,由于某种原因我还没有这样做。所以,我给你一半的功劳。哈哈!谢谢
      • @brandog 只是出于好奇,您能否分享您的数据样本和图表以及您的答案。我想弄清楚,为什么这对我有用,但对你却没有用。
      • 我已添加到我的问题中。现在我的问题是基于类别的切片......
      • 谢谢。这将计算每个类别的总计。但它在每个“DAY”或“DATE”中放置相同的累积总和。我需要它来计算从第 1 天到第 30 天的总计。此外,它不允许您选择多个“类别”,一次只能选择一个。不过还是谢谢。
      猜你喜欢
      • 2020-06-12
      • 2022-07-07
      • 2020-08-23
      • 2020-05-14
      • 1970-01-01
      • 2016-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多