【问题标题】:Find rows relative to current row's value in excel (DAX)在excel(DAX)中查找相对于当前行值的行
【发布时间】:2014-11-17 13:24:53
【问题描述】:

有没有办法使用 DAX(我正在使用 power pivot)根据您当前行的值过滤行?

换句话说,如果我有一个表“进度”,其“ID”在每一行中递增,还有一个“百分比”列和另一个包含

的表

我想创建一个名为 old percent = percent of (progress[ID] -1) 的列

这在 excel 中可以吗?

我在其中找不到任何直接的命令,如果有的话,请原谅,我还是 power pivot 的新手。

我这样做的方式可能是创建一个新列 old ID = progress[ID] -1 然后在 power pivot 中创建一个新表,它是当前表的副本,但然后我将它与旧 ID 链接而不是当前标识。 然后最后我做了一个旧的百分比列 = RELATED([percentage]);

这是解决问题的有效方法吗?并且可以进一步优化吗?

谢谢。

编辑:我添加了一张图片来帮助显示我需要的内容

)

【问题讨论】:

    标签: excel excel-formula powerpivot


    【解决方案1】:

    JShmay,

    如果您使用SUMX functionEARLIER 的组合,解决方案可能会简单得多。

    只需使用此公式添加一个新的计算列:

    =SUMX (
        FILTER ( Progress, EARLIER ( [ID] ) = [ID] + 1 ),
        Progress[PERCENTAGE]
    )
    

    EARLIER 返回当前行,因此如果将它与前一行进行比较,它可以返回正确的值。这种方法可能不是很直观,但效率更高,可以为您节省大量时间。

    输出应如下所示:

    尝试四处寻找以达到预期的结果,但我相信这是最简单和最有效的方法(就处理时间而言)。

    希望这会有所帮助。

    更新:在 DAX 查询中阅读此 article about using EARLIER。这可能会有所帮助。

    【讨论】:

      【解决方案2】:

      Petr 的优雅解决方案的替代方案是使用度量来解决此问题。

      在这种情况下哪个最好取决于您的模型的具体情况、表格的大小、您使用此计算的频率以及您想要复制它的次数(即,如果您想添加 10 calc列,那将是一个坏主意)。

      我喜欢度量方法,因为它使用了一种可重复使用的模式:

      =
      SUMX (
          VALUES ( Progress[ID] ),
          CALCULATE (
              SUM ( Progress[PERCENTAGE] ),
              FILTER (
                  ALL ( Progress ),
                  Progress[ID]
                      = MAX ( Progress[ID] ) - 1
              )
          )
      )
      

      注意使用这种方法的总计 - 关闭它们可能是“正确”的做法。

      使用Dax Formatter 美化的公式

      【讨论】:

      • 从未想过在一个公式中使用 sumx - 值 - 计算 - 过滤器。这简直是​​疯了(和天才):)
      • 干杯彼得!这就是 DAX 的美妙之处——在我们停止拥有这些时刻之前还需要一段时间!
      【解决方案3】:

      答案是肯定的。但是,我需要查看您所拥有的确切样本。听起来您有两列数据,并且想要第三列根据与前两列的交互为您提供某种答案。根据您的描述,数据透视表似乎没有必要,所以我不会浪费您的时间。

      【讨论】:

      • 感谢您的帮助,我已经编辑了我的帖子以帮助解释我的观点。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 2014-11-05
      • 1970-01-01
      • 2017-07-28
      • 2023-04-05
      相关资源
      最近更新 更多