- DEFINE
var a=FILTER('表1',
var t='表1'[时间] var g='表1'[商品] var kc= CALCULATE(sum('表1'[数量]),'表1'[商品]=g,'表1'[时间]<=t,'表1'[出入库]="入库",ALL('表1'[数量]))-CALCULATE(sum('表1'[数量]),'表1'[商品]=g,'表1'[时间]<=t,'表1'[出入库]="出库",ALL('表1'[数量]))
return kc=0||'表1'[时间]=CALCULATE(MAX('表1'[时间]),ALLEXCEPT('表1','表1'[商品])))//计算商品库存=0或者商品最后记录(结束时间)
var b=ADDCOLUMNS('表1',"库存",var t='表1'[时间] var g='表1'[商品]
return CALCULATE(sum('表1'[数量]),'表1'[商品]=g,'表1'[时间]<=t,'表1'[出入库]="入库",ALL('表1'[数量]))-CALCULATE(sum('表1'[数量]),'表1'[商品]=g,'表1'[时间]1),"最近日期",var g='表1'[商品] var t='表1'[时间] return CALCULATE(MIN('表1'[时间]),FILTER('表1','表1'[商品]=g&&'表1'[时间]>t))),"商品",'表1'[商品],"时间",[最近日期])//迭代计算d表产品序号>1时之后一个时间(中间的开始时间)
var f=UNION(c,CALCULATETABLE('表1',treatas(e,'表1'[商品],'表1'[时间])))//开始时间
var g=SELECTCOLUMNS(ADDCOLUMNS(f,"结束时间",var g='表1'[商品] var t='表1'[时间] return CALCULATE(MIN('表1'[时间]),FILTER(a,'表1'[商品]=g&&'表1'[时间]>t))),"商品",'表1'[商品],"开始时间",'表1'[时间],"结束时间",[结束时间])//合并开始时间、结束时间
var h=ADDCOLUMNS(g,"最大库存",var g=[商品] var st=[开始时间] var et=[结束时间] return MAXX(FILTER(b,'表1'[商品]=g&&'表1'[时间]>=st&&'表1'[时间]<=et),[库存]))//计算期间最大库存
EVALUATE
h
复制代码 这种不适合用DAX来搞吧,清洗的事情还是交给M。
查询结果
|