我有一个发票表,其中包含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')
更复杂的是,我们还有一个“数量列”,其中可以包含值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的发票。
答案 0 :(得分:0)
此措施可以解决问题
Active =
SUMX (
Products ;
CALCULATE(
DISTINCTCOUNT ( Products[InvoiceID] ) ;
ALL ( Products ) ;
Products[ProductID] = "ProdC" ;
Products[InvoiceID] = EARLIER ( Products[InvoiceID] )
)
)
首先,请确保使用迭代器SUMX在行级别执行计算。这样就可以与该特定行的发票号相关联,并将其与基于产品C的产品表的过滤版本进行比较,并简单地计算结果。