DAX Previous Month to date total 给出整个上个月的全部总数

DAX Previous Month to date total is giving entire previous month's entire total

我在 Power BI 中使用 DAX 来计算迄今为止上个月的销售总额,以创建 KPI 视觉对象。即,如果今天是 12 月 7 日,那么我想获得从 11 月 1 日到 11 月 7 日的销售总额,并与当月迄今为止进行比较。

CurrentMTD = TOTALMTD(SUM(SALES_VOUCHERS[SaleValue]),DatesTable[Date])

这很好用。 然而,上个月 YTD 给了我整个 11 月的总数。到目前为止我已经尝试了以下方法

PMYTD = totalmtd(sum(SALES_VOUCHERS[SaleValue]),dateadd(DATESMTD(DatesTable[Date]),-1,month))

PMYTD = CALCULATE(sum(SALES_VOUCHERS[SaleValue]),
    DATESBETWEEN(DatesTable[Date],                    
        FIRSTDATE(PREVIOUSMONTH(DatesTable[Date])),   
        LASTDATE(DATEADD(DatesTable[Date],-1,MONTH))))

两个 return 相同的答案,这是整个上个月的总和。 如果我只是将开始日期和结束日期硬编码到上面版本的日期之间,那么我确实会得到想要的结果。但这不是解决方案。

我已将事实 table (Sales_VOUCHERS) 链接到 DatesTable,截至目前,报告页面上没有其他视觉对象。 请协助我遗漏的内容以及如何获得上个月年初至今的总计

如果您在月份级别进行汇总(即您查看的是 2016 年 12 月与 2016 年 11 月的对比),那么您上面的衡量标准将显示整个 12 月与整个 11 月的对比(由于 12 月是部分月份而 11 月不是,这会导致您看到的不匹配)。

如果您过滤到当前日期(例如 12 月 7 日),那么您的 MTD 和上个月 MTD 指标都只会显示相应月份的第 7 天。

假设您不想过滤到天级别(并非不合理),您可以增强您的公式以过滤掉未来的日期。例如:

 PMYTD = totalmtd(
    sum(SALES_VOUCHERS[SaleValue]),
    dateadd(
        FILTER(
            DATESMTD(DatesTable[Date]),
            DatesTable[Date]<TODAY()
        ),
        -1,
        month
    )
)

这表示,如果日期在今天之后,请不要将其传递到 TOTALMTD 计算中(因此它只会计算该月的前 7 天,例如,如果今天是 12 月 8 日 - 即使您正在查看您报告中的完整月份)。

旁注:您还可以编写上个月的度量来重新使用您的 MTD 度量而不是重新定义它。这样,如果您更改了 MTD 计算,先前的 MTD 计算会自动更新。

PMYTD = CALCULATE(
    [CurrentMTD],
    DATEADD(
        FILTER(
            DatesTable[Date],
            DatesTable[Date]<TODAY()
        ),
        -1,
        MONTH
    )
)

有用的资源:

  1. https://www.powerpivotpro.com/2016/01/year-to-date-in-previousprior-year/(涵盖此问题和各种解决方案的文章)
  2. https://community.powerbi.com/t5/Desktop/Compare-MTD-with-previous-period/td-p/24656(关于同一问题的论坛讨论)
  3. http://community.powerbi.com/t5/Desktop/Time-Intelligence-TOTALMTD-vs-DATESMTD-vs-DATEADD/td-p/10088(关于 DATESMTD 与 TOTALMTD 的论坛讨论)