无论是分析现有产品的毛利情况、还是要按当前的料工费情况为客户报价,我们都需要确切核算产品当前的成本。会计核算计算的一般都是历史成本,而不是这里所说的当前成本。如果要计算这个当前成本需要投入大量的时间成本的话,这个工作可能就不一定值得去做了。那我们有没有办法,根据已经资料实现自动计算呢?当然是可以的。我们可以假定历史成本的BOM(量的消耗)是不变的。价格数据可以取最近一次的入库成本单价或者供应商最新的报价。使用合适的工具就可以自动计算出所有产品的当前成本了。下文将以游戏数据进行演示,结尾可以下载演示文件的附件。

1. BOM的处理

我们有所有产品的直接原材料。
Pasted image 20250809003138

直接原材料还可以再分解为它的材料。
Pasted image 20250809004550

通过PQ处理,我们可以将BOM衍生为各层级原材料组合的所有BOM。如下图:用魔纹布卷直接做,和用魔纹布做成布卷再做产品的2个BOM都有了。在半成品可以直接外购或直接出售的情况下,这种分析会有其意义。
image.png

在分析层级较多的情况下,同一个产品衍生出的BOM组合可能比较多。示例文件中可以看到有些复杂的产品可以衍生出几百上千种可能。最后的可视化图表中,我们将对它们进行对比。
比如:这个产品在当前的毛利率是18.48%。
image.png
通过钻取到分路径页。
image.png
我们可以看到在利用不同的半成品的情况下,其成本的差异:
image.png

2. 价格表

价格可以是最近一次的入库成本单价或者供应商最新的报价,大致如下表所示:
image.png
这些数据可以入库流水或报价文件夹中提取。

在完成数据导入与关系创建之后,就可以直接使用DAX取到最近时间的价格了。

salePrice = LASTNONBLANKVALUE(PriceData[time],SELECTEDVALUE(PriceData[minBuyout]))

3. 数据建模

3.1. 创建关系

将这些表格导入模型。这里有 Items 表的存在,是因为我的BOM表里都是产品或材料的名称,而在价格表里,只有产品的编号,所以导入了这两个表格进行匹配。这里有 ProductFormula 表的存在,是因为我的BOM表里都是配方名称,而配方名称有时与产品名称并不相同。如果情况合适的话,这两个表都不是必须的。为这些表创建关系如下图:
image.png

3.2. 创建度量值进行自动计算。

计算成本的度量值如下:

productCost = 
VAR saleprice=[salePriceOfProduct]
RETURN 
    MINX(
        VALUES(BOM[Detail]),
        CALCULATE(
            SUMX(
                CALCULATETABLE('Material',CALCULATETABLE('BOM')),
                CALCULATE(LASTNONBLANKVALUE(PriceData[time],SELECTEDVALUE(PriceData[marketValue]))))*CALCULATE(SUM('BOM'[pcsCost])
            ),
            CROSSFILTER('Product'[product],'Items'[itemName],NONE)
        )
    )

其余度量值参考附件。

可视化效果

选中任何一个分支,就可以看到各种产品当前最新的成本、售价、毛利和毛利率情况。如上文所述,可以钻取到分路径页面查看不同BOM的成本情况。
image.png

将鼠标停留在某产品上面。就可以看到该产品的成本明细情况,和该产品的介绍以及图片。
image.png

附件下载

链接:WOW_Business_Analysis
提取码: n999

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐