Power BI-过滤以计算最大数量的数量

时间:2018-08-09 16:09:18

标签: powerbi

我有无法解决的问题。我想使用Card来计数Number,但仅用于Count的最大值。因此,在我的示例中,它将是5而不是9。

Number  Count
1       100
2       101
3       102
3       103
3       104
3       105
4       106
5       107
5       108

2 个答案:

答案 0 :(得分:0)

您可以按照几个步骤进行操作。

  1. 计算最大值Count
  2. 查找与该最大值Number相对应的Count个值
  3. 计算这些Number值的出现次数

以下是一种可以做到这一点的措施示例:

Count of Max = 
    VAR MaxCount = CALCULATE(MAX(Table1[Count]), ALLSELECTED(Table1))
    VAR MaxNumbers = CALCULATETABLE(VALUES(Table1[Number]), Table1[Count] = MaxCount)
    RETURN CALCULATE(COUNT(Table1[Number]), Table1[Number] IN MaxNumbers)

可以用许多其他方式写最后一行。例如,

COUNTROWS(FILTER(Table1, Table1[Number] IN MaxNumbers))

SUMX(Table1, 1*(Table1[Number] IN MaxNumbers))

编辑:根据您的评论,您似乎不想执行上述第三步。在这种情况下,您只有两个步骤。

Number for Max Count = 
    VAR MaxCount = CALCULATE(MAX(Table1[Count]), ALLSELECTED(Table1))
    RETURN CALCULATE(MAX(Table1[Number]), Table1[Count] = MaxCount)

如果有多个与最大Number值关联的Count值,则将返回这些关联值的最大值。

答案 1 :(得分:0)

这是在M中执行此操作的可能方法之一。将此代码粘贴到高级编辑器中。

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("Tca5DQAwCASwXa6m4E2yC2L/NSJdhSt3wyAwVYw0nDc+eF+P9VwvPvnDF3/XH2Y+", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Number = _t, Count = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Number", Int64.Type}, {"Count", Int64.Type}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "IsMax", each [Count] = List.Max(#"Changed Type"[Count])),
    #"Filtered Rows" = Table.SelectRows(#"Added Custom", each ([IsMax] = true))
in
    #"Filtered Rows"

关键是第三步,添加自定义列IsMax,以检查它是否为Count列的最大值:

enter image description here

为每个类别选择MAX值的替代方法,您可以在这里找到: Select row with MAX value per category Power BI

这是更通用的方法,为每个类别添加索引: Index by category in Power BI equivalent to SQL row_number over partition

更新。如果您想要每个类别的最大值-这是解决方案:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("Tca5DQAwCASwXa6m4E2yC2L/NSJdhSt3wyAwVYw0nDc+eF+P9VwvPvnDF3/XH2Y+", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Number = _t, Count = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Number", Int64.Type}, {"Count", Int64.Type}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"Number"}, {{"Grouped_by_Number", each List.Max([Count]), type number}})
in
    #"Grouped Rows"