如何在Power BI中提取每月最后一日最晚时段的分区域设备库存数据
解决Power BI中提取每月最后一日最晚时段库存数据的DAX方案
需求回顾
生成新表,展示每个区域(或每个PhoneID)每年每月最后一日23:00:00时段的库存数量:
- 按区域汇总时,求和该区域内所有PhoneID的库存数量
- 可单独展示每个PhoneID的对应库存数据
问题分析
你之前的公式中直接使用MAX(Data[dateonly])会取整个数据集的最大日期,而非每个区域/年月分组下的最后日期,因此仅返回最新月份的数据。需要按分组计算每个组的最后日期,再筛选对应时段的数据。
解决方案
前提准备
确保数据集的dateOnly列设置为日期类型,time列设置为时间类型,避免文本格式导致的比较错误。
方案1:按区域+年月汇总(区域库存总和)
MonthlyLastDayInventory_Region = VAR LastDayPerGroup = ADDCOLUMNS( SUMMARIZE(Data, Data[Region], Data[year], Data[MonthYear]), "@LastDate", CALCULATE(MAX(Data[dateOnly]), ALLEXCEPT(Data, Data[Region], Data[year], Data[MonthYear])) ) RETURN SUMMARIZE( FILTER( Data, (Data[Region] & Data[year] & Data[MonthYear] IN SELECTCOLUMNS(LastDayPerGroup, "Key", [Region] & [year] & [MonthYear])) && Data[dateOnly] = LOOKUPVALUE(LastDayPerGroup[@LastDate], LastDayPerGroup[Region], Data[Region], LastDayPerGroup[year], Data[year], LastDayPerGroup[MonthYear], Data[MonthYear]) && Data[time] = TIME(23,0,0) ), Data[Region], Data[year], Data[MonthYear], Data[dateOnly], Data[time], "TotalQuantity", SUM(Data[Quantity]) )
方案2:按PhoneID+区域+年月单独展示(单设备库存)
MonthlyLastDayInventory_PhoneID = VAR LastDayPerGroup = ADDCOLUMNS( SUMMARIZE(Data, Data[PhoneID], Data[Region], Data[year], Data[MonthYear]), "@LastDate", CALCULATE(MAX(Data[dateOnly]), ALLEXCEPT(Data, Data[PhoneID], Data[Region], Data[year], Data[MonthYear])) ) RETURN SUMMARIZE( FILTER( Data, (Data[PhoneID] & Data[Region] & Data[year] & Data[MonthYear] IN SELECTCOLUMNS(LastDayPerGroup, "Key", [PhoneID] & [Region] & [year] & [MonthYear])) && Data[dateOnly] = LOOKUPVALUE(LastDayPerGroup[@LastDate], LastDayPerGroup[PhoneID], Data[PhoneID], LastDayPerGroup[Region], Data[Region], LastDayPerGroup[year], Data[year], LastDayPerGroup[MonthYear], Data[MonthYear]) && Data[time] = TIME(23,0,0) ), Data[PhoneID], Data[Region], Data[year], Data[MonthYear], Data[dateOnly], Data[time], "Quantity", SUM(Data[Quantity]) )
思路说明
- 计算分组最后日期:通过
SUMMARIZE定义分组维度(区域+年月/PhoneID+区域+年月),再用ADDCOLUMNS结合CALCULATE+ALLEXCEPT计算每个分组下的最后日期 - 筛选目标数据:用
FILTER匹配分组、最后日期、23:00:00时段的数据 - 聚合结果:用
SUMMARIZE整理输出字段,并计算库存总和
注意事项
如果你的time字段是文本格式(而非时间类型),请将公式中的TIME(23,0,0)替换为对应文本值,例如"23:00:00"
内容的提问来源于stack exchange,提问作者MVKXXX
相关产品推荐
相关产品推荐

