【问题标题】:PowerBI DAX - Identifying first instance based on multiple criteriaPowerBI DAX - 根据多个条件识别第一个实例
【发布时间】:2019-03-21 17:54:28
【问题描述】:

使用 DAX 识别记录的第一个实例

我面临着试图在数据库中识别某人(由 ID 列识别)首次购买产品的第一个实例。该人可能在不同的日子多次购买该产品,或者在同一天购买不同的产品。我鼓起了一个 excel 公式,让我到达那里,但在转换为 DAX 时遇到了麻烦。

=COUNTIFS(ID,ID,PurchaseDate,"<="&PurchaseDate,Product,Product)

在“一审”中哪个值正确?列。

理想情况下,我不必对值进行硬编码,因为我希望将来使用“产品”列作为参数。如果除了在 DAX 中翻译之外还有其他建议,那也将不胜感激! (IE 使用过滤器,或 PowerBI 中的其他工具)

提前致谢!

【问题讨论】:

  • 您希望它作为计算列还是度量?
  • 根据我的阅读,计算列是最好的(因为结果存储在表中,而不是像度量那样在渲染时计算)。我对 PowerBI 还很陌生,因此鼓励您提出任何其他想法!
  • 我很感激!谢谢RADO
  • @RADO 这是一本很棒的读物,也是其他信息的绝佳资源。再次感谢您的建议!

标签: powerbi dax countif


【解决方案1】:

这与我对另一个问题的回答非常相似(您可以找到 here)。

在那个问题中,请求是查看给定行条件(产品、年份等)的行数。我们可以稍微修改一下,让它在您的问题中发挥作用。

这是我在上面链接的答案中提供的公式。基本概念是使用EARLIER 函数从行中获取值并将其传递给过滤器语句。

Running Count = 
    COUNTROWS(
        FILTER(
            'Data',
            [ProductName] = EARLIER([ProductName]) &&
            [Customer] = EARLIER([Customer]) &&
            [Seller] = EARLIER([Seller]) &&
            [Year] <= EARLIER([Year])
        )
    )

我对您的问题的建议是通过简单地检查运行计数是否为 1 来将其创建为 TRUE/FALSE 标志。此公式将评估为布尔标志。

First Instance = 
    COUNTROWS(
        FILTER(
            'Data',
            [ID] = EARLIER([ID]) &&
            [Product] = EARLIER([Product]) &&
            [Purchase Date] <= EARLIER([Purchase Date])
        )
    ) = 1

【讨论】:

  • 这与我在网上找到的类似答案相似,明天再试一试。我非常感谢乔的回答!如果我可以让它工作,将标记为正确答案。
  • 嘿,乔,这很有效!输出几乎与我在 Excel 环境中提出的输出完全匹配。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-05
  • 2020-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多