2017-03-28 101 views
2

M/Power QueryにEARLIERと同等のものがありますか?電力クエリのDAX EARLIER()関数

私は、DATE列にさまざまな日付のテーブルがあり、LETTER列には文字数が少なくなっています。私は今、各文字の最大日付を欲しい。 DAXでは

、私はCALCULATE(MAX([日付])、FILTER(ALL(表)、[レター] =([レター]以前))のようなものを使用します。

どのように私は同じことを達成するであろうMで?

おかげで以下のコードで

+0

の答えをありがとう。私は、彼らが望んでいたよりも多くの技術的な洞察力を必要としている...私はそれらをテストし、解決済みとしてマークしようとします。 – Tony

答えて

0

2ソリューション。それぞれの基礎として「PreviousStep」を使用するので、これらは別々の溶液である。要するに

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 
0

、完全に一致が存在しないことに注意してくださいこのfのために統一。それでも、同じ結果を生み出す他の方法を使うことができます。

Microsoft in help for EARLIER functionによって提供される例を再現するには、次のコード(table1にランク付けする前の例で与えられたテーブルに等しい)使用することができます以下

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