我正在尝试根据日期和更改标志来计算3个月的平均值。 例如,我有以下列:
日期-ID项目-说明-销售额-更改(名称更改时显示1)
可以考虑更改列和日期来计算平均值,例如,产品名称在2019年5月进行了更改,因此我希望在5月之后的3个月和5月之前的3个月获得平均值。
该图显示了我正在使用的表:
答案 0 :(得分:0)
如果我理解您的要求正确,请按照以下步骤操作,将您带到所需的输出-
步骤1 转到 Power Query Editor 并创建以下3个自定义列-
start date before = Date.AddMonths([date],-2)
end date after = Date.AddMonths([date],3)
在创建两个自定义列后,将数据类型更改为日期,然后点击关闭并应用按钮返回报表。
第2步在表格中的2 测量下创建这些内容。我认为表格名称为 your_table_name (调整您自己)
3_month_average_before =
VAR current_row_chaneg = MIN(your_table_name[change])
VAR current_row_start_date_before = MIN(your_table_name[start date before])
VAR current_row_date = MIN(your_table_name[date])
VAR current_row_desc = MIN(your_table_name[desc.])
RETURN
IF(
current_row_chaneg <> 1,
BLANK(),
CALCULATE(
SUM(your_table_name[sales]),
FILTER(
ALL(your_table_name),
your_table_name[date] >= current_row_start_date_before
&& your_table_name[date] <= current_row_date
&& your_table_name[desc.] <> current_row_desc //--considered different product name for previous 3 month average
)
)
)
3_month_average_after =
VAR current_row_chaneg = MIN(your_table_name[change])
VAR current_row_end_date_after = MIN(your_table_name[end date after])
VAR current_row_date = MIN(your_table_name[date])
VAR current_row_desc = MIN(your_table_name[desc.])
RETURN
IF(
current_row_chaneg <> 1,
BLANK(),
CALCULATE(
SUM(your_table_name[sales]),
FILTER(
ALL(your_table_name),
your_table_name[date] <= current_row_end_date_after
&& your_table_name[date] > current_row_date
&& your_table_name[desc.] = current_row_desc //--considered same product name for after 3 month average
)
)
)
我根据自己的理解运用了逻辑。如果需要,可以在同一过程中调整逻辑。下面是给定样本数据的样本输出-
change =
VAR current_id = your_table_name[id item]
VAR current_desc = your_table_name[desc.]
VAR current_date = your_table_name[date]
VAR current_item_count =
CALCULATE(
COUNTROWS(your_table_name),
FILTER(
ALL(your_table_name),
your_table_name[id item] = current_id
&& your_table_name[desc.] = current_desc
&& your_table_name[date] <=current_date
)
)
VAR previous_item_count =
CALCULATE(
COUNTROWS(your_table_name),
FILTER(
ALL(your_table_name),
your_table_name[id item] = current_id
&& your_table_name[date] <= current_date
&& your_table_name[desc.] <> current_desc
)
)
RETURN IF(current_item_count = 1 && previous_item_count <> 0 , 1, 0)