Power BI滚动总上个月DAX

时间:2018-04-12 02:39:25

标签: powerbi dax

我在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] )
    )
)

3 个答案:

答案 0 :(得分:1)

首先,我在名为Orders -

的表中有这样的数据
Date            Amount
12/12/2017      100
12/12/2017      200
12/12/2017      300
1/1/2018        400
1/1/2018        500

我首先创建一个名为Year&amp;的计算列。使用公式月: -

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] )
    )
)

您可以添加另一个过滤项目&& Orders[Category] = SELECTEDVALUE(Orders[Category]),但如果您没有选择任何类别,或者在没有类别的表格或视觉效果上,则无效。所以,你需要在我的测量公式中引用if else逻辑。

Summary Tables

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

答案 1 :(得分:1)

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

然后为当前销售或任何您的价值创建一个度量。

为当月销售量创建度量

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轴为&#34; DAY&#34; (所以1-31)然后你可以在同一个图表或表格上查看当月,上个月,去年同期。

答案 2 :(得分:1)

尝试以下几点:

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