- 我有一份订单清单,有两种类型(A 和 B)。
- 每个账户至少有一个 A 类订单。
- 每个类型的多个订单可以存在于一个帐户上。
- 对于每个帐户,我需要知道该帐户上所有 A 类订单的最小 Order_Date。
我应该在 SQL、powerquery 或 powerpivot 中执行此操作吗?
我更愿意在 powerquery 或 powerpivot 中计算它。有任何想法吗?
我应该在 SQL、powerquery 或 powerpivot 中执行此操作吗?
我更愿意在 powerquery 或 powerpivot 中计算它。有任何想法吗?
只是对你的表结构做一些基本的假设。像这样的东西应该工作:
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
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);
假设: [Order] 和 [Account] 表之间存在一对多关系。
脚步:
在表 [Order] 中创建一个计算字段(不是计算列),如下所示,
[Minimum Date] = min(Order[Order_Date])
以下是解释如何在 Power Pivot 中创建计算字段的链接。链路 1 链路 2
Power Query 无需任何自定义 SQL 即可轻松完成此操作。
过滤到仅 A 订单:右键单击类型列中的 A 单元格和文本过滤器 > 等于。
然后右键单击 AccountID 和 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"