【问题标题】:DAX Rank Items Ignoring Sub-Categories忽略子类别的 DAX 排名项目
【发布时间】:2022-11-11 02:11:25
【问题描述】:

在 PowerBI 中工作,我有一个数据集,可以拆分为一堆不同的维度。在一天结束时,我想创建一些条形图可视化,显示前 X 项以及另外生成的项目,该项目将显示前 X 之外的所有项目的总数。我已经让这一切正常工作。我遇到的障碍是在我的可视化中添加第二个维度(即作为堆叠条形图中的图例项)。这导致我的 Rank 度量根据 Dimension 1 和 Dimension 2 进行排名,而我只关心根据 Dimension 1 的整体排名。

当存在多个维度时,如何创建排名度量以在单个维度上工作?

例子

名为 Fact 的表中的原始数据:

我计算总金额的措施:

Total Amount = SUM('Fact'[Amount])

我计算公司排名的方法:

Company_Rank = 
IF(
    SELECTEDVALUE('Companies Other'[Company]) = "Other"
    , [TopX_Selected] + 1
    , RANKX(
        ALL('Companies Other')
        , [Total Amount]
        ,
        , DESC
        , Dense
    )
)

我将 Top X 之外的项目聚合到 Other 的措施:

TopX_Amount = 
// If within the Top X, return the value
IF([Company_Rank] <= [TopX_Selected]
    , [Total Amount]
    // Otherwise sum everything outside of the top X to include in Other
    , IF(
        SELECTEDVALUE('Companies Other'[Company]) = "Other"
            , SUMX(FILTER(ALL('Companies Other'[Company]), [Company_Rank] > [TopX_Selected]),  [Total Amount])
            , 0
    )
)

如果我选择显示前 3 名公司(即[TopX Selected] = 3),那么一切都很好:

如果我尝试将 Country 添加到可视化的图例中,那么一切都会偏离轨道,因为现在排名基于每个公司/国家/地区组合:

我想看到的与在可视化上使用 Top N 过滤器时得到的类似,但添加了 Other 列:

我尝试将Company_Rank 设为'Companies Other' 中的计算列,但这似乎不像“正确的路”这样做,我认为当用户更改所选时间段时不会正确更新。

提前致谢。

【问题讨论】:

    标签: powerbi dax powerbi-desktop


    【解决方案1】:

    经过多次试验和磨难,我想出了一个解决方案。毫不奇怪,归结为 Row 和 Filter 上下文,这让我很头疼,但我仍然不完全理解。话虽这么说,经过一些调试(使用CONCATENATEX 而不是RANKX 在幕后达到峰值),行上下文似乎很好,但无论我做什么,过滤器上下文都在应用国家过滤器(比如尝试使用SUMMARIZECALCULATETABLE)。解决方案是删除您不关心的字段的筛选上下文,在本例中为'Fact'[Country]。因此,与其将排名仅基于[Total Amount],不如将​​其计算为CALCULATE([Total Amount], ALL('Fact'[Country]))

    Company_Rank = 
    IF(
        SELECTEDVALUE('Companies Other'[Company]) = "Other"
        , [TopX_Selected] + 1
        , RANKX(
            ALL('Companies Other')
            , CALCULATE([Total Amount], ALL('Fact'[Country]))
            ,
            , DESC
            , Dense
        )
    )
    

    瞧,更新的表格和图表:

    理想情况下,这会更通用,因此我不必指定我不关心的所有字段(即[Country]) 并且我只需要指定我关心的字段(即[Company])。我曾希望ALLEXCEPT 会成为圣杯,但我还没有让它发挥作用。

    【讨论】:

      猜你喜欢
      • 2016-09-26
      • 2011-12-07
      • 1970-01-01
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 2010-11-24
      相关资源
      最近更新 更多