如何在运行汇总矩阵Power BI

时间:2018-12-04 18:52:18

标签: powerbi dax powerbi-desktop

我正在Power BI的Loss Triangle中工作,其中AccidentYear是行,DevYear是列。

表中的值是按Running Total通过度量创建的:

Running Total Loss = 
    CALCULATE( 
    SUM(fact_Losses[PaymentAmount]),
    FILTER(ALL(fact_Losses[DevYear]),fact_Losses[DevYear]<=MAX(fact_Losses[DevYear]))
    )

链接以获取原始数据:

https://www.dropbox.com/s/dvb6cu1k4vmzkur/ClaimsLloysddd.xlsx?dl=0

运行总累积数据如下:

AccidentYear    DevYear Running Total Loss
2012            12          164714.11
2012            24          167727.65
2012            36          172888.65
2013            12          2314247.18
2013            24          4074094.91
2013            36          5247246.06
2013            48          5576930.29
2013            60          6487155.06
2013            72          6899512.68
2014            12          3367220.82
2014            24          4831946.69
2014            36          5741213.36
2014            48          6750204.17
2014            60          8384764.91
2015            12          7624575.21
2015            24          9935018.26
2015            36          11767207.67
2015            48          14653278.99
2016            12          8531229.05
2016            24          11768128.83
2016            36          17178123.28
2017            12          7390158.93
2017            24          12695778.03
2018            12          13136428.25

然后,我正在使用AccidentYear是行而DevYear是列的矩阵可视化。

enter image description here

2012年的发展年仅进行到36年。 但是我仍然需要显示最后一个数字,在其余的空单元格中为172,888.65

我尝试利用ISBLANK(),但到目前为止还没有成功。

理想的结果应如下所示:

enter image description here

更新: pbix文件可以在这里找到:

https://www.dropbox.com/s/wl1ot9ejgyv8yi3/Loss%20Triangle%20United%20Specialty.pbix?dl=0

2 个答案:

答案 0 :(得分:3)

由于该表中不存在与这些单元格中的AccidentYearDevYear都匹配的行,因此您无法对度量本身进行任何显示。

实际上,如果将度量设置为恒定值1,则矩阵将如下所示:

Constant Measure

该度量将不会在没有任何数据的单元格中进行评估。


@Saaru的建议是一个非常简单的解决方法,但这是另一个选择。

创建一个用于矩阵列的独立表:

DevYears = VALUES(fact_Losses[DevYear])

如果将其用于矩阵列并稍稍更改度量,

RunningTotalLoss = 
VAR CurrDevYear = MAX('DevYears'[DevYear])
RETURN
CALCULATE( 
    SUM(fact_Losses[PaymentAmount]),
    FILTER(ALL(fact_Losses[DevYear]), fact_Losses[DevYear] <= CurrDevYear)
)

那么您将拥有一张完整的桌子。

Full Table

这不是您所想的上三角,但是您可以使用IF添加该逻辑:

RunningTotalLoss = 
VAR CurrDevYear = MAX(DevYears[DevYear])
VAR MaxYear = CALCULATE(MAX(fact_Losses[AccidentYear]), ALLSELECTED(fact_Losses))
VAR CurentYear = MAX(fact_Losses[AccidentYear])
RETURN
IF(
    YEAR(
        EOMONTH(
            DATE(CurentYear - 1, 12, 31),
            CurrDevYear
        )
    ) > MaxYear,
    BLANK(),
    CALCULATE( 
        SUM(fact_Losses[PaymentAmount]),
        FILTER(ALL(fact_Losses[DevYear]), fact_Losses[DevYear] <= CurrDevYear)
    )
)

答案 1 :(得分:2)

一种简单的解决方法是将以下行添加到原始数据:

AccidentYear DevYear PaymentAmount
2012         48      0
2012         60      0
2012         72      0

您可以执行以下操作:转到Enter Data,在上方添加表格并命名(例如)appendage。然后转到Edit Queries,并使用命令appendage将表fact_Losses附加到表Append Queries。现在点击Close & Apply,您将拥有所需的表格:

enter image description here

我承认这不是一个不错的,可扩展的解决方案,所以我希望有人能带来更多花哨的东西