【问题标题】:Counting records under multiple criteria in DAX在 DAX 中计算多个条件下的记录
【发布时间】:2021-06-07 18:48:17
【问题描述】:

我有 2 张桌子。

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

enter image description here

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

enter image description here

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

  • 7 月 1 日将有 2 位回头客,他们在首次购买后 60 天内退货
  • 01 年 8 月 60 天内没有回头客
  • Sep-01 在 60 天内有 1 位回头客

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

我想要的结果是下面的数据透视表: enter image description here

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

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

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

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

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

【问题讨论】:

    标签: powerbi


    【解决方案1】:

    如果您在模型中有关系,则不需要 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 桌面的输出:

    【讨论】:

    • 您好 Msta42a,感谢您的措施。我可以在相关函数之后选择没有列(如 Sales(OrderDate))。但是两个表之间存在积极的关系。有什么线索吗?
    • 在您的帖子中:“表 B. 销售表。键列包括 1. 客户 ID(外键)和 2. 销售订单日期(在日期字段中)。”;那么你有 SalesOrderDate 还是没有?您的关系基于 CustomerID?
    • 您好 Msta42a,是的,Sales 表有 SalesOrderDate 并且关系(1(客户)到许多(销售))基于客户 ID。我通过 Power pivot 执行它。
    • 每个客户的销售额不同,因此销售订单日期也不同。但每个客户只有 1 个首次购买日期。
    • 编辑您的帖子并以纯文本形式添加一些数据示例;并添加您想要的输出。
    猜你喜欢
    • 1970-01-01
    • 2011-09-26
    • 2018-10-02
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多