如何在 运行 Total matrix Power BI 中填空
How to fill out blanks in Running Total matrix Power BI
我正在 Power BI 中处理损失三角,其中 AccidentYear
是行,DevYear
是列。
table 中的值 Running Total
由度量创建:
Running Total Loss =
CALCULATE(
SUM(fact_Losses[PaymentAmount]),
FILTER(ALL(fact_Losses[DevYear]),fact_Losses[DevYear]<=MAX(fact_Losses[DevYear]))
)
Link获取原始数据:
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
是列。
2012年发展年只到36岁。
但我仍然需要显示最后一个数字,即其余空单元格中的 172,888.65
。
我尝试使用 ISBLANK()
但到目前为止没有成功。
理想的结果应该是这样的:
更新:
pbix 文件可以在这里找到:
https://www.dropbox.com/s/wl1ot9ejgyv8yi3/Loss%20Triangle%20United%20Specialty.pbix?dl=0
一个简单的方法是将以下行附加到原始数据:
AccidentYear DevYear PaymentAmount
2012 48 0
2012 60 0
2012 72 0
您可以转到 Enter Data
,在 table 上方添加并命名(例如)appendage
。然后转到 Edit Queries
,并使用命令 Append Queries
将 table appendage
附加到 table fact_Losses
。现在点击 Close & Apply
,您将获得想要的 table:
我承认这不是一个很好的、可扩展的解决方案,所以我希望有人能提出更奇特的东西
由于 table 中不存在与这些单元格中的 AccidentYear
和 DevYear
匹配的行,因此您无法对度量本身执行任何操作来显示这些内容。
事实上,如果您将度量设置为常数值 1
,那么您的矩阵将如下所示:
度量值不会在不存在任何数据的单元格中计算。
@Saaru 的建议是一个非常简单的解决方法,但这是另一种选择。
创建一个独立的 table 用于您的矩阵列:
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)
)
那么你就会有一个完整的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)
)
)
我正在 Power BI 中处理损失三角,其中 AccidentYear
是行,DevYear
是列。
table 中的值 Running Total
由度量创建:
Running Total Loss =
CALCULATE(
SUM(fact_Losses[PaymentAmount]),
FILTER(ALL(fact_Losses[DevYear]),fact_Losses[DevYear]<=MAX(fact_Losses[DevYear]))
)
Link获取原始数据:
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
是列。
2012年发展年只到36岁。
但我仍然需要显示最后一个数字,即其余空单元格中的 172,888.65
。
我尝试使用 ISBLANK()
但到目前为止没有成功。
理想的结果应该是这样的:
更新: pbix 文件可以在这里找到:
https://www.dropbox.com/s/wl1ot9ejgyv8yi3/Loss%20Triangle%20United%20Specialty.pbix?dl=0
一个简单的方法是将以下行附加到原始数据:
AccidentYear DevYear PaymentAmount
2012 48 0
2012 60 0
2012 72 0
您可以转到 Enter Data
,在 table 上方添加并命名(例如)appendage
。然后转到 Edit Queries
,并使用命令 Append Queries
将 table appendage
附加到 table fact_Losses
。现在点击 Close & Apply
,您将获得想要的 table:
我承认这不是一个很好的、可扩展的解决方案,所以我希望有人能提出更奇特的东西
由于 table 中不存在与这些单元格中的 AccidentYear
和 DevYear
匹配的行,因此您无法对度量本身执行任何操作来显示这些内容。
事实上,如果您将度量设置为常数值 1
,那么您的矩阵将如下所示:
度量值不会在不存在任何数据的单元格中计算。
@Saaru 的建议是一个非常简单的解决方法,但这是另一种选择。
创建一个独立的 table 用于您的矩阵列:
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)
)
那么你就会有一个完整的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)
)
)