Получить предмет с наибольшим количеством - PullRequest
0 голосов
/ 10 марта 2020

Не могли бы вы помочь мне получить предмет с наибольшим количеством, используя DAX?

Measure = FIRSTNONBLANK('Table1'[ItemName],CALCULATE(COUNT('Table2'[Instance])))

Это показывает First ItemName в таблице, но не получает ItemName самого высокого значения.

Спасибо

1 Ответ

0 голосов
/ 12 марта 2020

Ну, это сложнее, чем я бы хотел, но вот что я придумал.

Есть вещи, которые вы надеетесь сделать, которые не так просты в DAX. Во-первых, вы хотите агрегированную агрегацию;) - в этом случае, Макс. Во-вторых, вы хотите использовать значение из одного столбца, которое вы определяете по тому, что находится в другом столбце. Это мышление на основе строк, а DAX предпочитает мышление на основе столбцов.

Итак, чтобы сделать совокупность агрегатов, нам просто нужно пробраться через нее. Подведение итогов дает нам количество предметов. Функции Max и Rank могут помочь нам найти наибольшее количество, но не очень полезны для получения имени элемента. TOP N дает нам всю строку, где наш счет является самым большим.

Но теперь нам нужно вывести наш ItemName из строки, поэтому SELECTCOLUMNS позволяет нам выбрать поле для работы. Наконец, нам действительно нужно значение, а не таблица из 1 столбца и 1 строки. Итак, FirstNonBlank завершает работу.

Надеюсь, это поможет.

enter image description here

Вот мой 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"
...