首页 > 解决方案 > 计算每个产品的制造 - DAX MEASURE

问题描述

我有这个PBIX 文件夹。

在此文件夹中,您将找到 PBIX 文件和源数据。

编辑:

请参阅此处的示例数据:

    TxDate | Reference | Code | ItemGroup | Quantity | Sales
__________________________________________________________________________
    24/02/2021 | AJI237677 | 2490/1008/999 |  | 1 | 342144.5
    28/02/2021 | AJI238993 | 1500/9999/999 |  | 1 | 140000
    13/04/2021 | AJI239912 | ATGS - Cut Pull Down | fabrication | 4 | 100
    13/04/2021 | AJI239912 | AC  760 200 15060  A | Alu-Ext-Std-Mil | 8 | 2512
    13/04/2021 | AJI239912 | AC  760 200 15060  A | Alu-Ext-Std-Mil | 6 | 1884
    13/04/2021 | AJI239916 | ATGS - Cut Guilotine | fabrication | 2 | 250
    13/04/2021 | AJI239917 | ATC252  SQR    60  A | Alu-Ext-Spe | 1 | 307
    13/04/2021 | AJI239917 | ATGH - 25MM3TA | Hardware | 8 | 256
    13/04/2021 | AJI239927 | ATGS - Cut Pull Down | fabrication | 1 | 0
    13/04/2021 | AJI239927 | AAE 127 127 16060  A | Alu-Ext-Std | 4 | 324
    13/04/2021 | AJI239929 | AHS 200 200 15060  A | Alu-Ext-Spe | 2 | 430
    13/04/2021 | AJI239929 | ATGS - Cut Pull Down | fabrication | 1 | 0
    13/04/2021 | AJI239933 | ATGH - 19MMSQCPC | Hardware | 4 | 56
    13/04/2021 | AJI239933 | AHS 200 200 15060  A | Alu-Ext-Spe | 1 | 215
    13/04/2021 | AJI239933 | AAU 500 250 16060  A | Alu-Ext-Std-Mil | 1 | 255
    13/04/2021 | AJI239947 | AXSTAIRNOSING | Alu-Ext-Spe | 3 | 915
    13/04/2021 | AJI239947 | ATGS - Cut Pull Down | fabrication | 1 | 0
    13/04/2021 | AJI239947 | ATGH - SEIBLACK | Hardware | 30 | 240
    13/04/2021 | AJI239950 | AS   202500125050    | Alu-Rol--She-Mil | 1 | 1240
    13/04/2021 | AJI239957 | ATGS - Cut Guilotine | fabrication | 7 | 175
    13/04/2021 | AJI239957 | AS   092500125050 P | Alu-Rol--She-Pre | 1 | 596
    13/04/2021 | AJI239966 | AC  444 190 16060  A | Alu-Ext-Std-Mil | 1 | 252

使用此示例数据,我相信您将能够复制它。

我需要能够计算制造销售额。

为了解释这一点,每个产品项目都出售给客户,但有时需要进行此项目的制造,即焊接、弯曲等。

因此,对于某些发票(参考),产品以制造形式出售。

客户需要查看每个项目的总制造销售额和制造销售额的平均百分比,即制造占总发票的百分比。

在 SQL 中使用以下脚本,我能够复制所需的结果:

with source as (
select
    Code
,   (select sum(ActualSalesValue) from _bvSTTransactionsFull t join _bvStockFull s on t.AccountLink = s.StockLink and ItemGroup = 'Fabrication' and tx.Reference = t.Reference and TxDate between '2020-03-01' and '2021-02-28') FabricationSales
,   (select sum(ActualSalesValue) from _bvSTTransactionsFull t join _bvStockFull s on t.AccountLink = s.StockLink and ItemGroup <> 'Fabrication' and tx.Reference = t.Reference and TxDate between '2020-03-01' and '2021-02-28') OtherSales
,   (select sum(ActualSalesValue) from _bvSTTransactionsFull t join _bvStockFull s on t.AccountLink = s.StockLink and tx.Reference = t.Reference and TxDate between '2020-03-01' and '2021-02-28') TotalSales
from    _bvSTTransactionsFull tx join _bvStockFull st on tx.AccountLink = st.StockLink
)
, results as (
select
    Code
,   isnull(round(sum(FabricationSales),2),0)    FabricationSales
,   isnull(round(sum(OtherSales),2),0)          OtherSales
,   isnull(round(sum(TotalSales),2),0)          TotalSales
from    source
group by
    Code
)

select
*
,   isnull(iif(isnull(TotalSales,0)=0,0,FabricationSales/TotalSales),0) [Fabrication%]
from    results
where   FabricationSales>0

结果如下所示:

要求的结果

我需要使用 DAX 公式来复制它。

我正在使用此度量来计算销售额:Sales = SUM( Sales[Sales] )

然后我使用这个度量按项目组过滤销售额:

Fabrication Sales = 
CALCULATE( [Sales],
    FILTER( ProductGroups, ProductGroups[StGroup] = "Fabrication" )
)

我尝试了以下措施来获得所需的结果,但我似乎无法做到正确:

Actual Fabrication Sales = 
VAR InvoiceSales = SUMMARIZE( Sales, Sales[Reference], Products[Code], "InvSales", [Fabrication Sales] )
VAR TotalInvSales = SUMX( InvoiceSales, [InvSales] )
VAR ProductSales = SUMMARIZE( InvoiceSales, Products[Code], "ProductSales", TotalInvSales )
VAR Results = SUMX( ProductSales, [ProductSales] )
RETURN
Results

请,如果有人可以帮助我使用正确的 DAX 公式来获得所需的结果?

如果我能获得正确的 DAX 公式来计算制造销售额,我将能够计算数量和百分比。

编辑:

根据@msta42a 答案的预期结果:

预期成绩

标签: powerbidax

解决方案


好吧,也许我错过了一些东西,但我们开始吧。我将其分为 3 个度量:首先,我在参考范围内搜索 Fabrication ItemGroup 的销售额总和 [In this sample = AJI239912]。其次,我搜索此范围内的所有其他 ItemGroup。最后,除以得到百分比。

Fabrication Sales = 
CALCULATE( SUM(Sales[Sales]),
    FILTER( ALL(Sales[ItemGroup], Sales[Reference], Sales[Code]), Sales[ItemGroup] = "Fabrication"  && Sales[Reference] = SELECTEDVALUE(Sales[Reference]))
)

Other Sales = 
CALCULATE( SUM(Sales[Sales]),
    FILTER( ALL(Sales[ItemGroup], Sales[Reference], Sales[Code]), Sales[ItemGroup] <> "Fabrication"  && Sales[Reference] = SELECTEDVALUE(Sales[Reference]))
)

Fabrication% = DIVIDE([Fabrication Sales],[Other Sales],0)

在此处输入图像描述


推荐阅读