如何修改 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
并将其分解为 Year
和 Month
--试图将 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] ) )
目标是用以前的值填充空白。
感谢 @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
并将其分解为 Year
和 Month
--试图将 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] ) )