嗯,这比我想要的要复杂,但这就是我想出的。
您希望做的事情在 DAX 中并不那么简单。首先,您需要一个聚合聚合;)——在这种情况下,是一个计数的最大值。第二件事是您想使用一列中的值,该值由另一列中的内容标识。那是基于行的思维,而 DAX 更喜欢基于列的思维。
所以,要进行聚合的聚合,我们只需要费力地完成它。 SUMMARIZE 为我们提供了项目的数量。 Max 和 Rank 函数可以帮助我们找到最大的计数,但对于获取 Item Name 并没有那么有用。 TOP N 为我们提供了我们的计数最大的整行。
但是现在我们需要从行中取出我们的 ItemName,所以 SELECTCOLUMNS 让我们可以选择要使用的字段。最后,我们真的想要一个值,而不是 1 列 1 行的表。所以 FirstNonBlank 完成了这项工作。
希望对你有帮助。
这是我的 DAX
MostFrequentItem =
VAR SummaryTable = SUMMARIZE ( 'Table', 'Table'[ItemName], "CountsByItem", COUNT ( 'Table'[ItemName] ) )
VAR TopSummaryItemRow = TOPN(1, SummaryTable, [CountsByItem], DESC)
VAR TopItem = SELECTCOLUMNS (TopSummaryItemRow, "TopItemName", [ItemName])
RETURN FIRSTNONBLANK (TopItem, [TopItemName])
这是不使用变量的 DAX(未经测试,抱歉。应该关闭):
MostFrequentItem_2 =
FIRSTNONBLANK (
SELECTCOLUMNS (
TOPN (
1,
SUMMARIZE ( 'Table', 'Table'[ItemName], "Count", COUNT ( 'Table'[ItemName] ) ),
[Count], DESC
),
"ItemName", [ItemName]
),
[ItemName]
)
这是模拟数据:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WcipNSspJTS/NVYrVIZ/nnFmUnJOKznRJzSlJxMlyzi9PSs3JAbODElMyizNQmLEA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Stuff = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Stuff", type text}}),
#"Renamed Columns" = Table.RenameColumns(#"Changed Type",{{"Stuff", "ItemName"}})
in
#"Renamed Columns"