【问题标题】:Power BI - Filter to count Number for Max CountPower BI - 筛选以计算最大计数的数字
【发布时间】:2018-08-09 16:09:17
【问题描述】:

我有无法解决的问题。我想使用 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

【问题讨论】:

  • 您想要 M 或 DAX 解决方案吗?
  • count Number for max value of Count 是什么意思。你想计算不同的数字吗?为什么是 5?因为数字列中有 5 个不同的值?或者,也许您选择 MAX(Count) = 108(一行),然后您在 Number 列中检查它的值 - 这里也是 5。
  • @Przemyslaw Remin - 无论哪种方式请
  • 好的,我知道您的 either way 表示 M 或 DAX。请解释你想要得到你想要的结果的逻辑。请参阅我的第二条评论。为什么选择5 not 9

标签: powerbi


【解决方案1】:

这是在 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 列的最大值:

为每个类别选择 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"

【讨论】:

  • 谢谢,它只为最大数量和计数提供 TRUE(即 5 和 108。它不适用于数字 3。
  • 所以您的Count 列是一个类别列。您想为每个类别选择 Count 的最大值吗?对吗?
  • 查看我的答案更新。如果不是这样,请在您的问题中粘贴完整的预期结果,包括第 5 号。 3 和其他数字。它源于您的问题,您想要获得的数字只有 5。
【解决方案2】:

您可以通过几个步骤来做到这一点。

  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 值关联,则返回这些关联值的最大值。

【讨论】:

  • @亚历克西斯奥尔森。它为除 5 之外的所有数字提供零(根据代码给出 1 或 2)。我所追求的是以下内容:数量/所需计数:1 / 100; 2/101; 3/105; 4/106; 5/108
  • 哦,看来您实际上并不想执行第三步。我将您的标题视为最大数量的计数,而不仅仅是那个数字。请查看我的编辑。
猜你喜欢
  • 1970-01-01
  • 2022-11-23
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 2022-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多