我正在尝试使用“或”逻辑对尺寸进行过滤。我有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总数吗?
谢谢!
答案 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个切片器:
通常,切片器使用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