PowerBI版内部质量损失数据看板

Tableau的单向筛选功能,捣鼓了好多天都没有实现,比如表A是产品报废信息,有报废日期、产品类别和报废数量;

表B是入库产品信息,有入库日期和入库数量。

按日期计算整体的报废率(报废数量/(报废数量+入库数量)),Tableau是没有问题的。

但是要计算某个产品类别下的报废率(上式中分母部分的数据是全体数据)就难了,要用“筛选产品类别的报废数量”/((不筛选的报废数量)+(不筛选的入库数量))。

由于表A和表B是通过日期关联的,Tableau默认两者是双向关系,表A筛选了产品类别,会导致表A的(报废)日期被筛选,进而通过链接关系导致表B的报废数量和入库数量被筛选。这样计算下来就不是某个产品类别占整体的报废率了(参见我上一篇文章,点击问题类别或产品类别后,入库重量减少了)。

LOD表达式、参数、筛选,查阅了大量资料,问了AI,看了书,尝试了好多次,熬了5天夜最终算是勉强弄出来了:

方式是先创建一个时间参数确定时间粒度:

CASE [时间粒度选择] WHEN '年' THEN DATETRUNC('year', [日期]) WHEN '季度' THEN DATETRUNC('quarter', [日期]) WHEN '月' THEN DATETRUNC('month', [日期]) WHEN '周' THEN DATETRUNC('week', [日期]) END

然后再使用LOD表达式:

 { FIXED [时间粒度选择] : SUM([报废数量]) }

如果不创建这个时间粒度,及时使用优先级比较高的FIXED也不行,因为产品类别筛选掉了一部分日期,导致这部分日期的报废数量和入库数量已经不完整,然后再按时间聚合已经于事无补了。

引入时间粒度后,某级粒度里没有筛选后的报废数据,那就是0,如有有筛选后的报废数据,FIXED能根据这个粒度找出完整的数据来。 也就是说,直接采用FIXED,聚合的每一天的数据,被筛选过的数据再也回不来了。

不知道我理解的对不对,反正是实现了分子的报废数量可以被筛选,但分母的报废数量和入库数量只和选择的时间维度有关,这样计算出来的始终是某段时间,某类、某型号、某地区……产品报废数量占这段时间内总的生产数量(总的报废数量+总的入库数量)的比例。

有没有Tableau前辈给指点一下,还能怎么实现。也许我这里的报废/(报废+入库)有点反常吧,正常应该是报废/生产,报废属于生产数据中的一个类别而已(Tableau也许认为某类产品的报废当然要除以某类产品的入库,只是他不知道这个入库数据里没有产品类别,两者是通过时间关联的)。

总之,在数据模型方面,PowerBI的单向连接(筛选)直接就把我这个问题解决了,分子用报废数据表里的,可以被筛选。分母用入库数据表里的(报废数据可以用SUMIF函数先加入到入库数据表里,单向连接,不会被报废表筛选掉)。

PowerBI版内部质量损失数据看板

本站部分内容搜集自公共网络,如侵犯了您的合法权利,请联系:info@daomen.net。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2026年4月7日 13:23
下一篇 2026年4月13日 22:30

相关推荐

发表回复

登录后才能评论
联系

微信/QQ:97523900

关于 论坛
分享本页
返回顶部