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

时间:2019-01-25 18:21:02

标签: powerbi dax powerbi-desktop

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

感谢@Alexis Olson,我能够在发展年中实现这一目标。 帖子可以在这里找到:

How to fill out blanks in Running Total matrix Power BI

但是现在development month需要相同的东西,这就是我坚持的地方。

我所做的:

-创建计算表'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 仍然没有成功

数据如下:

![![enter image description here

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

列:年月,

行:开发月份。随着时间的发展,可以超过12个。

值:总计

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

运行Total Dax表达式:

Accident Month Losses = 

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

enter image description here

需要这样:

enter image description here

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

请帮助

2 个答案:

答案 0 :(得分:1)

所以这里的问题是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过滤器上下文,并将其放入变量中,以便更轻松地了解内容继续。

现在的问题是整个表已满,而不是上三角。为了解决这个问题,如果当前月份前滚DevMonth个月数大于最大月份,我们可以告诉它返回空白。

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
    )

答案 1 :(得分:0)

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

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