- 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'[时间]<=t,'表1'[出入库]="出库",ALL('表1'[数量])))//添加列计算商品库存
- var c=FILTER('表1','表1'[时间]=CALCULATE(MIN('表1'[时间]),ALLEXCEPT('表1','表1'[商品])))//计算商品最早记录
- var d=ADDCOLUMNS(a,"序号",var g='表1'[商品] return RANKX(FILTER(a,'表1'[商品]=g),CALCULATE(MIN('表1'[时间]))))//添加列计算a表出现的不唯一商品
- var e=SELECTCOLUMNS(ADDCOLUMNS(FILTER(d,[序号]>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。 |