2017-03-28 9 views
2

M/Power Query에 EARLIER가 있습니까?전력 쿼리의 DAX EARLIER() 함수

말, 나는 DATE 열에 다른 날짜가 많이 있고 LETTER 열에는 더 적은 수의 문자가있는 테이블이 있습니다. 이제 각 문자의 최대 날짜를 원합니다. DAX에서

, 내가 계산 (MAX ([날짜]), 필터 (ALL (표), [편지] 같은 것을 사용합니다 = 이전 ([편지])).

나는 동일을 달성 할 방법 M에서?

덕분에 아래의 코드에서

+0

감사합니다. 나는 그들이 기대했던 것보다 훨씬 더 기술적 인 통찰력을 필요로한다는 것을 알았습니다. 나는 그것들을 모두 테스트하고 해결 된 것으로 표시하려고 노력할 것입니다. – Tony

답변

0

이 솔루션. 각 기초로 "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를 위해 기름 부음. 여전히 동일한 결과를 낼 수있는 다른 방법을 사용할 수 있습니다.

는 (표 1 순위 전에 예에 주어진 표와 동일)는 다음과 같은 코드를 사용할 수 있습니다, Microsoft in help for EARLIER function에 의해 제공되는 예를 재현하려면 다음과 같이 답변

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