按ORDER_LINE_RELEASE_NO分组提取首末次日期及数量的DAX实现问题
问题分析与解决方案
你的问题核心有两点:
- 数量列的计算未限定分组上下文,导致无法正确提取当前
ORDER_LINE_RELEASE_NO分组内的数值 FIRSTNONBLANK/LASTNONBLANK依赖列的存储顺序,而非你需要的日期排序逻辑,可能导致取数不符合预期
修正后的DAX代码
PURCH_ORD_LINE_UNIQUE = ADDCOLUMNS ( DISTINCT ( PURCH_ORD_LINE_ARCH[ORDER_LINE_RELEASE_NO] ), "FIRST_DATE", CALCULATE ( MIN ( PURCH_ORD_LINE_ARCH[WANTED_DATE_NEW] ), ALLEXCEPT ( PURCH_ORD_LINE_ARCH, PURCH_ORD_LINE_ARCH[ORDER_LINE_RELEASE_NO] ) ), "LAST_DATE", CALCULATE ( MAX ( PURCH_ORD_LINE_ARCH[WANTED_DATE_NEW] ), ALLEXCEPT ( PURCH_ORD_LINE_ARCH, PURCH_ORD_LINE_ARCH[ORDER_LINE_RELEASE_NO] ) ), "ORIGINAL_QTY", CALCULATE ( SELECTCOLUMNS ( TOPN ( 1, PURCH_ORD_LINE_ARCH, PURCH_ORD_LINE_ARCH[WANTED_DATE_NEW], ASC ), "@Qty", PURCH_ORD_LINE_ARCH[BUY_QTY_DUE_NEW] ), ALLEXCEPT ( PURCH_ORD_LINE_ARCH, PURCH_ORD_LINE_ARCH[ORDER_LINE_RELEASE_NO] ) ), "LAST_WANTED_QTY", CALCULATE ( SELECTCOLUMNS ( TOPN ( 1, PURCH_ORD_LINE_ARCH, PURCH_ORD_LINE_ARCH[WANTED_DATE_NEW], DESC ), "@Qty", PURCH_ORD_LINE_ARCH[BUY_QTY_DUE_NEW] ), ALLEXCEPT ( PURCH_ORD_LINE_ARCH, PURCH_ORD_LINE_ARCH[ORDER_LINE_RELEASE_NO] ) ) )
关键改动说明
- 日期部分替换为
MIN/MAX函数:比FIRSTNONBLANK更简洁,明确取分组内的最早/最晚日期,逻辑更清晰 - 数量部分使用
TOPN+SELECTCOLUMNS:通过指定按WANTED_DATE_NEW排序,确保取到对应日期顺序下的首个/最后一个数量值,避免存储顺序带来的误差 - 所有
CALCULATE都添加ALLEXCEPT限定:确保计算上下文仅包含当前ORDER_LINE_RELEASE_NO分组内的数据,这是你之前数量列取数错误的核心原因
内容的提问来源于stack exchange,提问作者Tomas Halmazna
相关产品推荐
相关产品推荐

