如何修改 DAX 表达式以填充 运行 总 Power BI 中的空白

How to modify DAX expression to fill up blanks in running total Power BI

目标是用以前的值填充空白。

感谢 @Alexis Olson 我能够在开发年实现这一目标。 Post 可以在这里找到:

但现在 development month 我需要同样的东西,这就是我卡住的地方。

我做了什么:

--创建了检索所有开发月份的计算 table 'Dev Months'。 --试图通过操纵 Dem Month

来修改表达式
     Accident Month Losses1 = 
VAR CurrDevMonth = MAX('Dev Months'[DevMonth])
VAR MaxMonth = CALCULATE(MAX(fact_Losses[AccidentMonth]), ALLSELECTED(fact_Losses))
VAR CurentMonth = MAX(fact_Losses[AccidentMonth])
VAR CurentYear = MAX(fact_Losses[AccidentYear])
RETURN


IF(
    MONTH(
        EOMONTH(
            DATE(CurentYear - 1,12,31),
            CurrDevMonth)
     ) > MaxMonth,
    BLANK(),
    CALCULATE( 
        SUM(fact_Losses[PaymentAmount]),
        FILTER(ALL(fact_Losses[DevMonth]), fact_Losses[DevMonth] <= CurrDevMonth)
    )
)

--尝试使用 AccidentDate 并将其分解为 YearMonth --试图将 Year-Month 转换为 DATE 仍然没有成功

数据如下所示:

当我使用矩阵显示数据时,我有空白。

列:Month-Year、

行:开发月份。随着时间的推移可以超过12。

值:运行 总计

如果有空白(无丢失),则应根据开发月份用以前的数字填充。

运行 Dax 总表达量:

Accident Month Losses = 

    CALCULATE( 
    [Total Loss],
    FILTER(ALL(fact_Losses[DevMonth]),fact_Losses[DevMonth] <= MAX(fact_Losses[DevMonth])
    ))

需要这样:

.pbix 可以在这里找到: https://www.dropbox.com/s/zujp6p9lbyqfez7/Test_LossTriangle.pbix?dl=0

请帮忙

所以这里的问题是 MAX(fact_Losses[DevMonth]) 对于那些缺失的单元格来说是空的,因为没有相应的交易。

您可以修复我删除由 dim_Date 强加的过滤器上下文。

Accident Month Losses =
VAR CurrDevMonth =
    CALCULATE ( MAX ( fact_Losses[DevMonth] ), ALL ( dim_Date ) )
VAR RunningLoss =
    CALCULATE (
        [Total Loss],
        FILTER ( ALL ( fact_Losses[DevMonth] ), fact_Losses[DevMonth] <= CurrDevMonth )
    )
RETURN
    RunningLoss

到目前为止我所做的就是将 MAX 放在 CALCULATE 中,这样我就可以删除 dim_Date 过滤器上下文并更容易地根据变量来放置东西了解发生了什么。

现在的问题是整个table是满的,而不是上三角。要解决此问题,如果当前月份向前滚动 DevMonth 个月数大于最大月份,我们可以告诉它 return 空白。

Accident Month Losses =
VAR CurrDevMonth =
    CALCULATE ( MAX ( fact_Losses[DevMonth] ), ALL ( dim_Date ) )
VAR RunningLoss =
    CALCULATE (
        [Total Loss],
        FILTER ( ALL ( fact_Losses[DevMonth] ), fact_Losses[DevMonth] <= CurrDevMonth )
    )
VAR MaxYearMonth =
    CALCULATE (
        EOMONTH ( MAX ( fact_Losses[AccidentDate] ), 0 ),
        ALLSELECTED ( fact_Losses )
    )
VAR CurrYearMonth = MAX ( dim_Date[Date] )

RETURN
    IF (
        EOMONTH ( CurrYearMonth, CurrDevMonth - 1 ) > MaxYearMonth,
        BLANK (),
        RunningLoss
    )

这也会删除一些小计,但如果您在 IF 条件中添加几个条件,则可以恢复这些小计。

    IF (
        EOMONTH ( CurrYearMonth, CurrDevMonth - 1 ) > MaxYearMonth
            && ISFILTERED( dim_Date[Year Month] )
            && ISFILTERED( fact_Losses[DevMonth] ),
        BLANK (),
        RunningLoss
    )

另一种方法是使用 DevMonth 列的所有可能值创建一个断开连接的 table,您可以利用 GENERATESERIES。 创建后将该字段用作矩阵的 header,更新后的度量将是:

CALCULATE ( [Total Loss], FILTER ( ALL ( fact_Losses[DevMonth] ), fact_Losses[DevMonth] <= MAX ( NewTable[DevMonth] ) )