如何在Spotfire自定义表达式中使用总计计算商品销售占比
解决方案:计算商品分项销量占比
错误原因
你当前的表达式中,分母的sum(qty_sold for Item)仅计算了当前商品分项的销量,而非对应产品的所有分项总销量,导致分母取值错误,结果不符合预期。
正确实现方式
1. SQL 计算方案
先聚合每个产品的总销量与库存,再关联分项销售表计算占比:
WITH ProductTotal AS ( SELECT p.Product, p.Current_Qty, SUM(s.Qty_sold) AS Total_Sales FROM 产品总库存表 p INNER JOIN 产品分项销售表 s ON p.Product = s.Product GROUP BY p.Product, p.Current_Qty ) SELECT s.Product, s.Product_Item, s.Qty_sold, ROUND( s.Qty_sold / (pt.Total_Sales + pt.Current_Qty) * 100, 2 ) AS Sales_Ratio_Percent FROM 产品分项销售表 s INNER JOIN ProductTotal pt ON s.Product = pt.Product ORDER BY s.Product, s.Product_Item;
该SQL会输出每个分项的销量占(对应产品总销量+总库存)的百分比,保留两位小数,与你给出的示例逻辑一致(如50/(150+3000)=1.59%)。
2. BI工具交叉表自定义表达式(以Tableau/Power BI为例)
如果是在BI工具的交叉表中自定义计算,需要使用维度级别表达式获取产品维度的总销量和库存:
- Tableau 可用LOD表达式:
SUM([Qty_sold]) / ({FIXED [Product]: SUM([Qty_sold])} + {FIXED [Product]: SUM([Current_Qty])}) - Power BI 可用度量值:
先创建产品总销量度量值:
再创建产品总库存度量值:Total_Sales_Product = CALCULATE(SUM('产品分项销售表'[Qty_sold]), ALLEXCEPT('产品分项销售表', '产品分项销售表'[Product]))
最后计算占比:Total_Stock_Product = CALCULATE(SUM('产品总库存表'[Current_Qty]), ALLEXCEPT('产品总库存表', '产品总库存表'[Product]))Sales_Ratio = DIVIDE(SUM('产品分项销售表'[Qty_sold]), [Total_Sales_Product] + [Total_Stock_Product])
内容的提问来源于stack exchange,提问作者Lambird
相关产品推荐
相关产品推荐

