Функция DAX EARLIER () в Power Query

Есть ли эквивалент EARLIER в M / Power Query?

Скажем, у меня есть таблица с множеством разных дат в столбце DATE и меньшим количеством букв в столбце LETTER. Теперь мне нужна максимальная дата для каждого письма.

В DAX я бы использовал что-то вроде CALCULATE (MAX ([Date]), FILTER (ALL (Table), [Letter] = EARLIER ([Letter])).

Как мне добиться того же в M?

Спасибо


person Tony    schedule 28.03.2017    source источник
comment
Спасибо за ответы. Я вижу, они требуют гораздо большего технического понимания, чем я ожидал ... Я попробую протестировать их обоих и отметить как решенные.   -  person Tony    schedule 29.03.2017


Ответы (3)


2 Решения в приведенном ниже коде. Обратите внимание, что каждый из них использует «Предыдущий шаг» в качестве основы, так что это отдельные решения.

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    PreviousStep = Table.TransformColumnTypes(Source,{{"Date", type date}, {"Letter", type text}}),

    // 1. Add a column to the original table with the MaxDate for each letter
    //    "earlier"  is just the name of a function parameter; it could as well have been "x" or "MarcelBeug"
    AddedMaxDate = Table.AddColumn(PreviousStep, "MaxDate", (earlier) => List.Max(Table.SelectRows(PreviousStep, each [Letter] = earlier[Letter])[Date])),

    // 2. Group by letter and get the MaxDate for each letter
    GroupedOnLetter = Table.Group(PreviousStep, {"Letter"}, {{"MaxDate", each List.Max([Date]), type date}})
in
    GroupedOnLetter
person MarcelBeug    schedule 28.03.2017

Короче говоря, для этой функции нет точного соответствия. Тем не менее, вы можете использовать другие способы, которые могут дать такие же результаты.

Чтобы воспроизвести пример, предложенный Microsoft в справке по EARLIER функции, вы можете используйте следующий код (таблица1 равна таблице, приведенной в примере перед ранжированием):

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("TVNNaxtBDP0rxuSoivn+uMYlLSUFE4f2YHIYd4d48Xq3rO1C/n01o1mc4+i9kZ6epP1+LcMa1o/94cvuOM3XCz0epHUgnccQ1m+wXytXGae8ekl/TpWhlACvBHrBDL8wdtc0dpWiLTgV0EVm1CrT9Trky4ooq016z5VnI2ij0OjKs402nVePM1XLrMgEcEaj8ZVU9czpxAmcAik1SlcxGSm2SX/5m4eoDVpToSJyc0z9WLEAwXgUrcX6a8hpzDNb4CAEhU5VuIjfzGk8XZoeGSVYpVBwd+X31zynfhjyjRM4A9FZ1NyWFhR7ymPX0hsJ0RuUbJ+s6DSzt96QtR4d96MK9m2Y/uVmfABtNVrWbSj2newc8iEtwjUoS401O2Rh5NQtyq0HZyNGFq4ZHs6Lz1aCjAopXmFV4I9uTtd+GlfbZfyR3IkafTOvJPlBneUPbj1GMCouMFkA6+f+/VhLcKjofp5aNmlBkKQ23JLs53QbrzSoVdkp3iYDWlgIzqBi6VJ9Jj7N6cxMA1ZSE16ga/XLTm3TOPZsPv8uora5SwNLMIIkK1Q8EF02bHs78xZJBS5alK1bCr1Mqbtro7+WfHPRoeZNk2Yh3XVpcNqBjgE9myuLrl3qaHg8GUUr5RYbVKlzP0kdLHhBJ9kOrsjfLQaWndCEWcZK8dfF7wcZIrkRUXNe7Ss6tzN8vR2WxTIQtMLQJl9Y023ux/d7o1JTHVOH0MyQ7hPv3isdh7F01gYFH5Aqvf7KF5akyLEYBYrmVpH0+5jz0C4nADEq+vYf", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [ProductSubcategoryKey = _t, EnglishProductSubcategoryName = _t, TotalSubcategorySales = _t]),
    table1 = Table.TransformColumnTypes(Source,{{"ProductSubcategoryKey", Int64.Type}, {"EnglishProductSubcategoryName", type text}, {"TotalSubcategorySales", Currency.Type}}, "en-US"),
    AddCount = Table.AddColumn(
              table1, 
              "SubcategoryRanking", //(a) is a parameter for function, which equals current record, and function should return value for new cell of "SubcategoryRanking"
              (a)=> Table.RowCount( 
                        Table.SelectRows( 
                        table1, //(b) equals whole table1. This function returns table filtered by given criteria
                        (b) =>  b[TotalSubcategorySales] < a[TotalSubcategorySales]) 
                    ) + 1,
              Int64.Type)
in
    AddCount
person Eugene    schedule 28.03.2017

Я думаю, вы можете использовать функцию GroupBy, чтобы сгруппировать данные по букве и найти максимальное значение столбца дата. Итак, ваш код должен выглядеть так.

= Table.Group(#"Previous step", {"Letter"}, {{"Max Date", each List.Max([Date]), type date}})
person Gangula    schedule 10.07.2019