首页 > 解决方案 > 如何解决我的 Measure 中的问题 - 无法正确迭代并且我得到错误的总数

问题描述

只需使用与产品 ID 相关的 2 个表,尝试查找我们在任何给定日期的库存量的生产成本。在包含生产数据的表中,我创建了一个新列来对每个产品 ID 生产的最新批次进行排名,从 Rank = 1 开始是最新的通过日期,2 是之后的最新日期,依此类推。

因此,如果我们有 1000 件产品 X 库存,最新批次生产 500 件,生产成本为 10,之前批次生产 800 件,生产成本为 100,则需要 rank 1 的全部成本,并且排名 2 中 500 个单位的成本总计为 10+62.5,因此产品 X 当前库存的价值为 62.5。

编辑:上传带有一些数据的 .xlsx 文件,以便您了解 https://gofile.io/d/hRtl7Z

简要概述,其中数据和结果表同时具有仓库数据(仓库 ID、产品 ID 和库存数量)和 NewValueForStock 中 Measure 的最终结果。productiondata 表包含用于计算 NewValueForStock 的生产数据。TLDR;Measure 应该遍历每个产品的生产数据,计算每批次的成本,从排名 1 向上计算,直到生产数量 = 库存数量。

wh 数据和结果表在每一行上都有正确的值,但问题在于观察 power bi 中的结果,好像我想查看每个 WarehouseID 的 NewValueForStock,结果是如 J4 上所见的狗屎,对于 WH ID 12 结果是正确只是因为目前只有一个产品 ID。

现在,我已经启动并开始工作了,但它需要在 excel 中作为总行数进行一些手工劳动,或者仓库总数没有任何意义,直接迭代的问题,现在我每天都被提供实时仓库数据根据我想修复它,我很难做到这一点。

这就是度量,我尝试将 vars 更改为独立度量等等,但我不知道我的脑袋一片空白。我知道这个措施不是最漂亮的,也不是最好看的,但是嘿它(曾经)做这项工作。

VAR stock qty = SUMX(warehousedata,warehousedata[amountinstock])

VAR num0qty = SUMX(FILTER(productiondata, productiondata[Rank]=1),[painosm])
VAR num0unitcost = SUMX(FILTER(productiondata, productiondata[Rank]=1),[unitcost])
VAR num0batchcost = SUMX(FILTER(productiondata, productiondata[Rank]=1),[batchcost])

VAR num1qty = SUMX(FILTER(productiondata, productiondata[Rank]=2),[painosm])
VAR num1unitcost = SUMX(FILTER(productiondata, productiondata[Rank]=2),[unitcost])
VAR num1batchcost = SUMX(FILTER(productiondata, productiondata[Rank]=2),[batchcost])

VAR num2qty = SUMX(FILTER(productiondata, productiondata[Rank]=3),[painosm])
VAR num2unitcost = SUMX(FILTER(productiondata, productiondata[Rank]=3),[unitcost])
VAR num2batchcost = SUMX(FILTER(productiondata, productiondata[Rank]=3),[batchcost])

VAR num3qty = SUMX(FILTER(productiondata, productiondata[Rank]=4),[painosm])
VAR num3unitcost = SUMX(FILTER(productiondata, productiondata[Rank]=4),[unitcost])
VAR num3batchcost = SUMX(FILTER(productiondata, productiondata[Rank]=4),[batchcost])

VAR num4qty = SUMX(FILTER(productiondata, productiondata[Rank]=5),[painosm])
VAR num4unitcost = SUMX(FILTER(productiondata, productiondata[Rank]=5),[unitcost])
VAR num4batchcost = SUMX(FILTER(productiondata, productiondata[Rank]=5),[batchcost])

VAR num5qty = SUMX(FILTER(productiondata, productiondata[Rank]=6),[painosm])
VAR num5unitcost = SUMX(FILTER(productiondata, productiondata[Rank]=6),[unitcost])
VAR num5batchcost = SUMX(FILTER(productiondata, productiondata[Rank]=6),[batchcost])

VAR num6qty = SUMX(FILTER(productiondata, productiondata[Rank]=7),[painosm])
VAR num6unitcost = SUMX(FILTER(productiondata, productiondata[Rank]=7),[unitcost])
VAR num6batchcost = SUMX(FILTER(productiondata, productiondata[Rank]=7),[batchcost])

VAR num7qty = SUMX(FILTER(productiondata, productiondata[Rank]=8),[painosm])
VAR num7unitcost = SUMX(FILTER(productiondata, productiondata[Rank]=8),[unitcost])
VAR num7batchcost = SUMX(FILTER(productiondata, productiondata[Rank]=8),[batchcost])

VAR num8qty = SUMX(FILTER(productiondata, productiondata[Rank]=9),[painosm])
VAR num8unitcost = SUMX(FILTER(productiondata, productiondata[Rank]=9),[unitcost])
VAR num8batchcost = SUMX(FILTER(productiondata, productiondata[Rank]=9),[batchcost])

VAR num9qty = SUMX(FILTER(productiondata, productiondata[Rank]=10),[painosm])
VAR num9unitcost = SUMX(FILTER(productiondata, productiondata[Rank]=10),[unitcost])
VAR num9batchcost = SUMX(FILTER(productiondata, productiondata[Rank]=10),[batchcost])

var r1 = if(num0qty < stock qty,num0batchcost,num0unitcost * stock qty)
var r2 = if(num0qty+num1qty < stock qty, num1batchcost,num1unitcost * IF((stock qty - num0qty) >= 0, stock qty - num0qty,0))
var r3 = if(num0qty+num1qty+num2qty < stock qty, num2batchcost,num2unitcost * IF((stock qty - num0qty - num1qty) >= 0, stock qty - num0qty - num1qty,0))
var r4 = if(num0qty+num1qty+num2qty+num3qty < stock qty, num3batchcost,num3unitcost * IF((stock qty - num0qty - num1qty - num2qty) >= 0, stock qty - num0qty - num1qty - num2qty,0))
var r5 = if(num0qty+num1qty+num2qty+num3qty+num4qty < stock qty, num4batchcost,num4unitcost * IF((stock qty - num0qty - num1qty - num2qty - num3qty) >= 0, stock qty - num0qty - num1qty - num2qty - num3qty,0))
var r6 = if(num0qty+num1qty+num2qty+num3qty+num4qty+num5qty < stock qty, num5batchcost,num5unitcost * IF((stock qty - num0qty - num1qty - num2qty - num3qty - num4qty) >= 0, stock qty - num0qty - num1qty - num2qty - num3qty - num4qty,0))
var r7 = if(num0qty+num1qty+num2qty+num3qty+num4qty+num5qty+num6qty < stock qty, num6batchcost,num6unitcost * IF((stock qty - num0qty - num1qty - num2qty - num3qty - num4qty - num5qty) >= 0, stock qty - num0qty - num1qty - num2qty - num3qty - num4qty - num5qty,0))
var r8 = if(num0qty+num1qty+num2qty+num3qty+num4qty+num5qty+num6qty+num7qty < stock qty, num7batchcost,num7unitcost * IF((stock qty - num0qty - num1qty - num2qty - num3qty - num4qty - num5qty - num6qty) >= 0, stock qty - num0qty - num1qty - num2qty - num3qty - num4qty - num5qty - num6qty,0))
var r9 = if(num0qty+num1qty+num2qty+num3qty+num4qty+num5qty+num6qty+num7qty+num8qty < stock qty, num8batchcost,num8unitcost * IF((stock qty - num0qty - num1qty - num2qty - num3qty - num4qty - num5qty - num6qty - num7qty) >= 0, stock qty - num0qty - num1qty - num2qty - num3qty - num4qty - num5qty - num6qty - num7qty,0))
var r10 = if(num0qty+num1qty+num2qty+num3qty+num4qty+num5qty+num6qty+num7qty+num8qty+num9qty < stock qty, num9batchcost,num9unitcost * IF((stock qty - num0qty - num1qty - num2qty - num3qty - num4qty - num5qty - num6qty - num7qty - num8qty) >= 0, stock qty - num0qty - num1qty - num2qty - num3qty - num4qty - num5qty - num6qty - num7qty - num8qty,0))

return r1+r2+r3+r4+r5+r6+r7+r8+r9+r10


  [1]: https://i.stack.imgur.com/vr0Bi.png

标签: powerbidaxpowerbi-desktop

解决方案


设法通过在仓库数据表中创建 30 个附加列来解决此问题。使用 CALCULATE(SUMX( 从生产数据所在的另一个表中获取每个 Rank(1-10) 的数量、单位成本和批次成本。

使用与上面粘贴的完全相同的度量,将 VAR 切换为指向创建的列,而不是度量,我为仓库数据表创建了计算列。现在,所有计算都在行级别的同一张表上完成,并且不存在总行数的问题。


推荐阅读