更新度量计算以在DAX中应用OR逻辑

时间:2019-04-05 23:40:12

标签: powerbi dax

我正在尝试使用“或”逻辑对尺寸进行过滤。我有3张桌子:1个事实和2个维度。

 SalesFact: SalesID, ProductID, StoreID
 ProductDim: ProductID, ProductName
 StoreDim: StoreID, StoreName

这是措施:

       Total SalesId =    
             CALCULATE(DISTINCTCOUNT(SalesFact[SalesID])          
       ) 

这很好用,但是我希望它在选择的 维度上进行过滤,如下所示:

EVALUATE
    SUMMARIZECOLUMNS (
    FILTER(
            SalesFact,
            SalesFact[ProductId]=15257 
            || SalesFacts[StoreId]=19732
            || SalesFacts[StoreId]=19738
            ),      
    "Total Sale IDs", [Total SalesId]

如何将其直接输入到度量定义中,所以当选择ProductA和StoreB时,我将获得ProductA或StoreB的SaleId总数吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

首先,为sales表中的记录数创建一个度量:

Sale Count = COUNTRIOWS(SalesFact)

由于sales表中的所有记录都具有唯一的ID,因此其结果与计数不同的ID相同,但更快,更简单。

第二,要对具有“或”条件的多个维度进行过滤,您需要为要在过滤器中使用的值创建一个交叉联接(所有可能的组合):

EVALUATE
SUMMARIZECOLUMNS('Product'[Product_ID], 'Store'[Store_ID])

以上公式将为您提供product_ID和Store_ID的所有可能组合。但是,我们只需要Sales Fact表中存在的那些组合。这可以通过添加sales表作为过滤器来实现:

EVALUATE
SUMMARIZECOLUMNS('Product'[Product_ID], 'Store'[Store_ID], 'SalesFact')

最后,我们只需要您想要看的那些产品和商店。我们通过将公式包装在FILTER函数中来实现此目的:

EVALUATE
FILTER(
   SUMMARIZECOLUMNS('Product'[Product_ID], 'Store'[Store_ID], 'SalesFact'),
     Product[Product_ID] IN {15257} || 
     Store[Store_ID] IN {19732, 19738}
)

此公式采用我们的“产品-商店”组合,并按所需的产品或商店过滤。现在,您可以在度量中使用此公式来重新计算所选产品或商店的销售数量:

Selected Product or Store Sales Count = 
VAR 
   Selected_Combinations = 
   FILTER(
      SUMMARIZECOLUMNS('Product'[Product_ID], 'Store'[Store_ID], 'SalesFact'),
         Product[Product_ID] IN {15257} || 
         Store[Store_ID] IN {19732, 19738}
)
RETURN 
   CALCULATE( [Sale Count], Selected_Combinations)

编辑:

如果您打算使用切片机等视觉效果代替输入特定的产品和商店ID,则需要修改方法。假设您有2个切片器:

  • 产品名称
  • StoreName

通常,切片器使用AND逻辑工作,但是您要为所选产品名称或所选商店名称计算销售额。修改以前的公式,如下所示:

Selected Product or Store Sales Count =
VAR Selected_Combinations =
    UNION (
        CROSSJOIN ( VALUES ( 'Product'[ProductName] ), ALL ( Store[StoreName] ) ),
        CROSSJOIN ( ALL ( 'Product'[ProductName] ), VALUES ( Store[StoreName] ) )
    )
RETURN
    CALCULATE ( [Sale Count], Selected_Combinations )

还有其他可用方法。您可以在此处了解更多信息:
Using OR conditions between slicers in DAX