【问题标题】:DAX "multiple columns" error when trying to return the Nth ranked text value尝试返回第 N 个排名的文本值时出现 DAX“多列”错误
【发布时间】:2018-10-22 07:28:56
【问题描述】:

我正在研究一种解决方案来计算类似于 Qlikview 在 DAX for Power BI 中的 FirstSortedValue。

据我所知,没有开箱即用的解决方案来获得获取文本值(很像类别)的功能,该文本值的排名在第 n 位。

我的问题是: 为什么这对单列有效,但在表上使用时返回多列错误?

CALCULATE (
    SAMPLE (
        1,
        FILTER (
            'table_name',
            RANKX (
                ALL ( 'table_name'[column_name] ),
                CALCULATE ( COUNT ( 'table_name'[column_name] ) ),
                , , SKIP
            )
                = Nth
        ),
        TRUE ()
    )
)

还有一个不同的变体:

CALCULATE (
    SAMPLE ( 1, VALUES ( 'table_name'[column_name] ), TRUE () ),
    FILTER (
        'table_name',
        RANKX (
            ALL ( 'table_name'[column_name] ),
            CALCULATE ( COUNT ( 'table_name'[column_name] ) ),
            , , DENSE
        )
            = Nth
    )
)

当它是单列时,这两种方法以及我的更多尝试都有效,但是为什么在具有多列的表上使用时这不起作用?它应该根据我选择的第 N 等级返回 1 个文本值的样本? 类似于回答“根据销售额计算的第 N 个最畅销的产品名称是什么?”的问题。

我很困惑,仍在努力寻找答案。 Firstnonblank 不是一个选项,因为我不关心仅获得排名第一的答案的解决方案;不建议这样做。

【问题讨论】:

  • 这个问题可能就是你要找的:stackoverflow.com/questions/52525377/…
  • 嗨,没有 maxx() 和 topn() 对于可重复使用的排名解决方案无效。这些都不会返回排名第三的文本值。
  • 您能提供一些示例数据和所需的输出吗?

标签: dax


【解决方案1】:

使用您所拥有的最简单的方法是使用SELECTCOLUMNS 将您的表格变成一个列。

下面将为您提供一个列名为“列名”的单列表。

SELECTCOLUMNS( FILTER( [...] ), "Column Name", 'table_name'[column_name] )

CALCULATE (
    SAMPLE (
        1,
        SELECTCOLUMNS(
            FILTER (
                'table_name',
                RANKX (
                    ALL ( 'table_name'[column_name] ),
                    CALCULATE ( COUNT ( 'table_name'[column_name] ) ),
                    , , SKIP
                )
                = Nth
            ),
            "Column Name",
            'table_name'[column_name]
        ),
        TRUE ()
    )
)

不过,可能有更好的方法来解决整个问题,因此请提供minimal complete verifiable example 的样本数据和所需的输出(如果可能)。

【讨论】:

  • 如果我要了解如何在原始公式中实现选择列,这个答案会很有用。我仍然会调查它。 +1 但是我自己制定了一个(部分)解决方案。
  • 您只需将它包裹在FILTER 上,就像我展示的那样。我会编辑一个更完整的版本。
  • 您可以在下面发布我选择的答案,因为它解决了整个问题,并且无论关系如何 - 甚至给出一个串联的结果。
【解决方案2】:

我想出了一个解决方案,它适用于带有警告的多列表 - 关系,因为公式中使用的 SAMPLE(1...) 是按字母顺序排列的:

SAMPLE(1, FILTER(ALL('X'[Name]), RANKX(ALL(X[Name]), CALCULATE(COUNT('X'[Name])),,,skip) = Nth), TRUE())

我稍后会尝试添加一个解决方案,以便一次性使用 CONCATATENATEX(我已经开始工作)解决关系,因此将不遗余力。

编辑:2018 年 10 月 23 日 这里是!最终的简洁版本:效果很好!

测量 =

VAR Nth = [number] RETURN CONCATENATEX(DISTINCT('table_name'[column_name]), CALCULATE(FILTER(VALUES('table_name'[column_name]), RANKX(ALL('table_name'[column_name]), CALCULATE(COUNT('table_name'[column_name])),,,Dense) = Nth)),",")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多