在 Power BI 中使用 DAX 计算 运行 平均值
Calculate Running Average Using DAX in Power BI
我在 Table_1
中有以下值:
date sales_amount
04/01/2021 100.00
04/02/2021 300.00
04/05/2021 500.00
我想计算一个 运行 平均值,所以平均值是随着每一天的流逝而计算的,因此我的最终输出如下所示:
date sales_amount running_average
04/01/2021 100.00 100.00
04/02/2021 300.00 200.00
04/05/2021 500.00 300.00
销售人员没有在 04/03
和 04/04
工作,所以我想将他们从我的 运行 平均值中排除。
现在,我的输出看起来像这样,这对我正在做的事情来说是错误的:
date sales_amount running_average
04/01/2021 100.00 100.00
04/02/2021 300.00 200.00
04/05/2021 500.00 180.00
有什么建议吗?
现在,我的 DAX 代码如下所示:
test_new =
VAR LastVisibleDate = MAX('Table_1'[Date])
VAR FirstVisibleDate = MIN('Table_1'[Date])
VAR LastDateWithSales =
CALCULATE(
MAX('Table_1'[Date]),
REMOVEFILTERS()
)
VAR Result =
IF (
FirstVisibleDate <= LastDateWithSales,
CALCULATE(
AVERAGE([Sales_Amount]),
Table_1[Date]
)
)
RETURN
Result
我在最后一个变量中添加了几行:
最后一个变量中的 Table_1[Date] 基本上意味着 FILTER ( ALL ( Table_1[Date] ), TRUE ),这将 return 所有在您的场景中没有用的日期,因为它会给出错误的结果,而是写 Table_1[Date] <= LastVisibleDate
当日期列来自日期 table 并且日期 table 被标记为日期 table 时,您不需要 REMOVEFILTERS,因为当日期 table 被标记为日期 table 每当在日期列上应用过滤器时,引擎会自动添加 REMOVEFILTERS/ALL,但其他 [= 的日期列不会发生这种情况30=]s 因此你需要在最后一个变量中写一个明确的 REMOVEFILTERS
test_new =
VAR LastVisibleDate =
MAX ( 'Table_1'[Date] )
VAR FirstVisibleDate =
MIN ( 'Table_1'[Date] )
VAR LastDateWithSales =
CALCULATE (
MAX ( 'Table_1'[Date] ),
REMOVEFILTERS ()
)
VAR Result =
IF (
FirstVisibleDate <= LastDateWithSales,
CALCULATE (
AVERAGE ( [Sales_Amount] ),
Table_1[Date] <= LastVisibleDate,
REMOVEFILTERS ( Table_1 )
)
)
RETURN
Result
最佳做法是始终使用日期 table 中的日期列。
我在 Table_1
中有以下值:
date sales_amount
04/01/2021 100.00
04/02/2021 300.00
04/05/2021 500.00
我想计算一个 运行 平均值,所以平均值是随着每一天的流逝而计算的,因此我的最终输出如下所示:
date sales_amount running_average
04/01/2021 100.00 100.00
04/02/2021 300.00 200.00
04/05/2021 500.00 300.00
销售人员没有在 04/03
和 04/04
工作,所以我想将他们从我的 运行 平均值中排除。
现在,我的输出看起来像这样,这对我正在做的事情来说是错误的:
date sales_amount running_average
04/01/2021 100.00 100.00
04/02/2021 300.00 200.00
04/05/2021 500.00 180.00
有什么建议吗?
现在,我的 DAX 代码如下所示:
test_new =
VAR LastVisibleDate = MAX('Table_1'[Date])
VAR FirstVisibleDate = MIN('Table_1'[Date])
VAR LastDateWithSales =
CALCULATE(
MAX('Table_1'[Date]),
REMOVEFILTERS()
)
VAR Result =
IF (
FirstVisibleDate <= LastDateWithSales,
CALCULATE(
AVERAGE([Sales_Amount]),
Table_1[Date]
)
)
RETURN
Result
我在最后一个变量中添加了几行:
-
最后一个变量中的
Table_1[Date] 基本上意味着 FILTER ( ALL ( Table_1[Date] ), TRUE ),这将 return 所有在您的场景中没有用的日期,因为它会给出错误的结果,而是写 Table_1[Date] <= LastVisibleDate
当日期列来自日期 table 并且日期 table 被标记为日期 table 时,您不需要 REMOVEFILTERS,因为当日期 table 被标记为日期 table 每当在日期列上应用过滤器时,引擎会自动添加 REMOVEFILTERS/ALL,但其他 [= 的日期列不会发生这种情况30=]s 因此你需要在最后一个变量中写一个明确的 REMOVEFILTERS
test_new =
VAR LastVisibleDate =
MAX ( 'Table_1'[Date] )
VAR FirstVisibleDate =
MIN ( 'Table_1'[Date] )
VAR LastDateWithSales =
CALCULATE (
MAX ( 'Table_1'[Date] ),
REMOVEFILTERS ()
)
VAR Result =
IF (
FirstVisibleDate <= LastDateWithSales,
CALCULATE (
AVERAGE ( [Sales_Amount] ),
Table_1[Date] <= LastVisibleDate,
REMOVEFILTERS ( Table_1 )
)
)
RETURN
Result
最佳做法是始终使用日期 table 中的日期列。