【问题标题】:How to get the Top N vales based on a column for each category in PowerBI?如何根据 Power BI 中每个类别的列获取 Top N 值?
【发布时间】:2022-01-05 13:10:08
【问题描述】:

我在根据“日期”列过滤数据以获取每个类别的前 3 名时遇到问题。以下是样本数据:

谁能帮助我获得低于预期的输出?

【问题讨论】:

  • 到目前为止您尝试过什么?您是尝试在 Power Query 中执行此操作,还是使用 DAX?您需要的输出是什么样的?
  • @Olly- 我正在尝试使用 DAX。

标签: powerbi powerbi-desktop


【解决方案1】:

你可以试试这个(这里是虚拟数据);您可以根据需要选择 ASC 或 DESC:

Ranking by Date = var _cat = SELECTEDVALUE( Sheet1[Category])
return
IF(RANKX(FILTER(ALL(Sheet1), Sheet1[Category]= _cat), calculate(MAX(Sheet1[Date])),,ASC ,Skip)<=2, 1,BLANK())

或按销售:

Ranking by Sales = 
IF (
    ISINSCOPE ('Sheet1'[Date] ),
    VAR ProductsToRank = 2
    VAR SalesAmount = [SumOf]
    RETURN
        IF (
            SalesAmount > 0,
            VAR VisibleProducts =
                CALCULATETABLE (
                    VALUES ( 'Sheet1' ),
                    ALLSELECTED ( 'Sheet1'[Date] )
                )
            VAR Ranking =
                RANKX (
                    VisibleProducts,
                    [SumOf],
                    SalesAmount
                )
            RETURN
                IF (
                    Ranking > 0 && Ranking <= ProductsToRank,
                    1
                )
        )
)

或者您可以像这样在 DAX 中创建一个新表:

Top2 = GENERATE(VALUES(Sheet1[Category]), TOPN(2, FILTER(SELECTCOLUMNS(ALL(Sheet1[Category], Sheet1[Date]),"Cat",[Category],"Date",[Date]),[Cat] = [Category]),[Date]))

【讨论】:

  • 我使用上面的 DAX 收到以下消息:“表达式引用多列。多列不能转换为标量值。”
  • 哪一个(度量或表格表达式)?在我的回答中,您可以看到我对其进行测试的虚拟数据
  • 使用 DAX 之一:
    Top2 = GENERATE(VALUES(Sheet1[Category]), TOPN(2, FILTER(SELECTCOLUMNS(ALL(Sheet1[Category], Sheet1[Date]),"Cat ",[Category],"Date",[Date]),[Cat] = [Category]),[Date]))
  • 这个是表格表达式;转到数据窗格 -> 表格工具 -> 新表格 -> 粘贴您的语句
猜你喜欢
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-16
  • 1970-01-01
相关资源
最近更新 更多