DAX查询以过滤至少一个订单项包含特定产品的发票

时间:2019-07-16 00:52:08

标签: powerbi dax

我有一个发票表,其中包含InvoiceNo和ProductID列。我需要能够进行过滤,以便它返回包含特定产品的所有发票。应用此过滤器后,只需要显示该产品的发票,但它应该显示该发票上的所有产品。

例如,我有下表:

InvoiceNo   ProductID
111         ProdA
111         ProdB
111         ProdC
222         ProdA
222         ProdB

我只想显示具有ProdC的发票。过滤后,需要显示

InvoiceNo   ProductID
111         ProdA
111         ProdB
111         ProdC

我尝试了以下DAX措施:

CALCULATE(
    COUNTROWS(Invoice),
    SUMMARIZE(
        FILTER(
            SUMMARIZE(
                 Invoice
                ,Invoice[InvoiceNo]
                ,Invoice[ProductID]
            )
            ,Invoice[ProductID] = "ProductC"
        )
    ,Invoice[InvoiceNo]
    )
)

但是当我应用过滤器(其中小节> 0)时,它仅返回以下内容

InvoiceNo   ProductID
111         ProdC

如果我在SQL中执行此操作,则将使用以下查询:

select 
     [InvoiceNo]
    ,[ProductID]
from
    [Invoice] 
where
    [InvoiceNo] in (SELECT [InvoiceNo] FROM [Invoice] where [ProductID] = 'ProdC')

更新时间:7月19日

更复杂的是,我们还有一个“数量列”,其中可以包含值0。因此,更新后的表将是

InvoiceNo   ProductID   Qty
111         ProdA       1
111         ProdB       2
111         ProdC       1
222         ProdA       1
222         ProdB       3
333         ProdA       1
333         ProdB       2
333         ProdC       0

我想从结果中排除发票333,因为当我寻找包含ProdC的发票时,我只希望ProdC数量大于0的发票。

1 个答案:

答案 0 :(得分:0)

此措施可以解决问题

Active = 
    SUMX (
        Products ;
        CALCULATE(
            DISTINCTCOUNT ( Products[InvoiceID] ) ;
            ALL ( Products ) ; 
            Products[ProductID] = "ProdC" ;
            Products[InvoiceID] = EARLIER ( Products[InvoiceID] )
        )
    )

首先,请确保使用迭代器SUMX在行级别执行计算。这样就可以与该特定行的发票号相关联,并将其与基于产品C的产品表的过滤版本进行比较,并简单地计算结果。

相关问题