首页 > 解决方案 > 在 DAX 中计算多个条件下的记录

问题描述

我有 2 张桌子。

A. 客户表。键列包括 1. 客户 ID(主键)和 2. 首次购买日期(在日期字段中)和 3. 首次购买日期年份和月份(在文本中,如 Jul 01)。

在此处输入图像描述

B. 销售表。键列包括 1. 客户 ID(外键)和 2. 销售订单日期(在日期字段中)。

在此处输入图像描述

两个表都是一对多的关系。我想知道有多少客户在首次购买后 60 天内退货,按首次购买日期年份和月份分组。例如,

然后,我将在数据透视表中计算每个第一个购买月的回头客百分比,如下所示。

我想要的结果是下面的数据透视表: 在此处输入图像描述

我可以通过在客户表中添加一个计算列并在 dax 下面作为过滤器添加到 1(客户在 60 天内重新订购)或 0,然后在数据透视表字段中计算:

IF(CALCULATE(COUNT(Sales[ProductKey]),FILTER(Sales,Sales[OrderDate]>Customers[DateFirstPurchase] && Sales[OrderDate] - Customers[DateFirstPurchase] <=60 && Sales[CustomerKey] = Customers[CustomerKey])) >0,1,0)

但是由于销售量很大,在这种情况下使用过滤器不是最佳实践。因此,这可以通过以下任一方式实现:

  1. 不在计算列中使用过滤器功能?即检查客户表中的匹配记录?或其他方式?或者,理想情况下
  2. 使用 Dax 而不是添加计算列。

非常感谢您的帮助。谢谢。

标签: powerbi

解决方案


如果您在模型中有关系,那么您不需要 Sales[CustomerKey] = Customers[CustomerKey]; 尝试使用此计算(未经测试)。

MeasureToCount = CALCULATE (
    COUNTROWS (
        CALCULATETABLE (
             VALUES(Sales[CustomerKey]),
            FILTER (
                Sales,
                 Sales[SalesOrderDate]  > RELATED(Customer[FirstPurchase])
                    &&  (Sales[SalesOrderDate])  <= ( RELATED(Customer[FirstPurchase]) + 60 )
            )
        )
    )
)

现在,如果您将“年份和月份”添加到带有度量的表格可视化中,那应该可以工作。

powerbi 桌面的输出: 在此处输入图像描述 在此处输入图像描述


推荐阅读