如何返回特定订单类型的每个帐户的最短日期

时间:2015-07-02 16:07:10

标签: sql powerpivot dax powerquery

  • 我有一份订单清单,有两种类型(A和B)。
  • 每个帐户至少有一个A类订单。
  • 帐户中可以存在多种类型的订单。
  • 对于每个帐户,我需要知道该帐户中所有A类订单的最低订单日期。

我应该在SQL,powerquery还是powerpivot中执行此操作? 我更愿意用powerquery或powerpivot来计算它。 有什么想法吗?

4 个答案:

答案 0 :(得分:2)

只是对你的表结构做一些基本的假设。这样的事情应该有效:

SELECT Account.Name, MIN(Order_date) FirstOrderDate
FROM Account LEFT OUTER JOIN Orders on Account.AccountId = Orders.OrderId
AND Orders.Type='A'
GROUP BY Account.Name

答案 1 :(得分:0)

SELECT * 
FROM accounts,order
WHERE accounts.id = order.account_id and order.id in
(SELECT TOP 1 id FROM order
 WHERE type = "A"
 ORDER BY date);

答案 2 :(得分:0)

假设: [订单]和[帐户]表之间存在一对多的关系。

<强>步骤:

  1. 在PowerPivot中创建[Order]和[Account]表之间的关系。确保箭头指向[订单]到[帐户]。
  2. 创建表[OrderType](如果PowerPivot中尚不存在)。在PowerPivot中创建[Order]和[OrderType]表之间的关系。再次确保箭头指向[Order]到[OrderType]。
  3. 在表[订单]中创建计算字段(非计算列),如下所示,

    [Minimum Date] = min(Order[Order_Date])
    
  4. 以下是解释如何在Power Pivot中创建计算字段的链接。Link-1 Link-2

    1. 创建Power Pivot报告。在COLUMNS上放置[Order_Type]列,在ROWS上放置[Account_Name](或[Account_ID]或任何其他帐户标识符)。最后在VALUES上添加计算字段[最小日期](在步骤3中创建)。

答案 3 :(得分:0)

Power Query可以轻松完成,无需任何自定义SQL。

过滤到A订单:右键单击Type列中的A单元格 文字过滤器&gt;等于。

然后右键单击AccountID和Group By作为最小订单日期: Group By

一些硬编码数据显示它有效:

let
    Source = Csv.Document("AccountID,Type,Order_Date
        1,A,1/4/13
        1,A,1/5/13
        1,B,1/1/13
        2,A,5/5/13"),
    #"Promoted Headers" = Table.PromoteHeaders(Source),
    TypedData = Table.TransformColumnTypes(#"Promoted Headers",{{"AccountID", Int64.Type}, {"Order_Date", type date}}),
    #"Filtered Rows" = Table.SelectRows(TypedData, each [Type] = "A"),
    #"Grouped Rows" = Table.Group(#"Filtered Rows", {"AccountID"}, {{"MinDate", each List.Min([Order_Date]), type date}})
in
    #"Grouped Rows"