我从Northwind数据库中将三个表加载到Excel的PowerPivot:作为事实表的Invoice表,其中包含CustomerID,ProductID,UnitPrice和Quantity等列。其他两个表是相同的:Product table和FilterProduct表,发票和产品之间存在活动关系(基于ProductID),发票和FilterProduct之间不活动(基于ProductID)。
与提供的公式类似here我写了一个公式来计算购买产品A和产品B(过滤产品)的客户数量:
BothProducts:=
CALCULATE(
DISTINCTCOUNT(Invoices[CustomerID]);
CALCULATETABLE(
VALUES(Invoices[CustomerID]);
ALL(Products);
USERELATIONSHIP(Invoices[ProductID];FilterProduct[ProductID])
)
)
然后在excel数据透视表中,我在Product表的行中插入Product Name,将BothProducts作为值进行测量,并使用来自FilterProduct表的切片器FilterProductName来获取在行和FilterProduct上指定的购买产品的客户数。
我正在努力的是要了解上面的公式究竟是如何运作的。 据我了解,如果我在数据透视表行中选择了产品A,则公式应该开始使用已过滤的Product表(仅包含产品A的记录)。
由于产品和发票之间存在关联活动,因此应将发票表过滤到仅包含产品A的行。 现在,CALCULATETABLE应该首先获得仅购买产品A的客户列表。我们使用ALL(Products)删除此过滤器作为显示产品A的过滤列,以进一步显示带有过滤产品的行将无法获取任何内容。通过这种方式,我们获得购买任何产品的客户,然后将其过滤给那些通过激活发票和FilterProduct表之间的关系仅购买过滤产品的客户。
这就是我要结束的地方,因为那时我会得到只购买过滤产品的客户。
我阅读了CALCULATE here的regaridng订单评估文章,但我不确定这是否适用于上述公式,并结合使用CALCULATE和CALCULATETABLE。我认为来自Pivot表行的产品A作为初始过滤器,然后使用CALCULATETABLE中的ALL(Product)将其删除,这将导致我得出结论,我们只计算购买过滤产品的客户。 或者USERELATIONSHIP仍然可以使用Invoices表过滤到产品A?