我从两个表中获取数据。
客户(包含客户ID和订单/资金的总值
订单(包含客户ID和每个订单)
我创建了一个超级查询,然后选择“合并查询为新”选项。选择匹配的列(客户ID),然后选择以下选项:左外(全部从第一个开始,从第二个开始匹配=>全部从客户表开始,与订单表匹配)。然后,我扩展了查询的最后一列,以包含我想要从Order表中得到的内容,从而得到了下面的表格。右边的是我所追求的。问题在于资金额已经是每个客户的总和。我不需要分解每个订单的价值。我仍然需要显示的订单,但不需要它们的值(仅是每个客户的总数)。是否可以像下面的右图一样做到这一点?否则,总数将遥不可及。
答案 0 :(得分:1)
我认为您要尝试的是仅与Customer
列中每个值的第一个实例连接。似乎没有任何功能或GUI元素允许您执行此操作(我看过reference documentation for Power Query M,也许我错过了一些东西)。
要复制您的数据,我从一些表开始(左表命名为Customers
,右表命名为Orders
):
然后我使用下面的M
代码(前几行只是为了从工作表中获取表格):
let
customers = Excel.CurrentWorkbook(){[Name = "Customers"]}[Content],
orders = Excel.CurrentWorkbook(){[Name = "Orders"]}[Content],
merged = Table.NestedJoin(orders, {"CUSTOMER"}, customers, {"CUSTOMER"}, "merged", JoinKind.LeftOuter),
indexColumn = Table.AddIndexColumn(merged, "Temporary", 0, 1),
indexes =
let
uniqueCustomers = Table.Distinct(Table.SelectColumns(indexColumn, {"CUSTOMER"})), // Want to keep as table
listOfRecords = Table.ToRecords(uniqueCustomers),
firstOccurenceIndexes = List.Accumulate(listOfRecords, {}, (listState, currentItem) =>
List.Combine({listState, {Table.PositionOf(indexColumn, currentItem, Occurrence.First, "CUSTOMER")}})
)
in
firstOccurenceIndexes,
expandSelectively =
let
toBoolean = Table.TransformColumns(indexColumn, {{"Temporary", each List.Contains(indexes, _), type logical}}),
tableOrNull = Table.AddColumn(toBoolean, "toExpand", each if [Temporary] then [merged] else null),
dropRedundantColumns = Table.RemoveColumns(tableOrNull, {"merged", "Temporary"}),
expand = Table.ExpandTableColumn(dropRedundantColumns, "toExpand", {"FUNDING"})
in
expand
in
expandSelectively
如果您的表名和列名与我的表名和列名匹配(包括区分大小写),那么您也许可以将上面的所有M
代码复制粘贴到“高级编辑器”中,并为您工作。否则,您可能需要根据需要进行调整。
这是我将查询加载到工作表时得到的。
可能会有更好(更有效)的方法来执行此操作,但这就是我目前所拥有的。
答案 1 :(得分:0)
如果您不使用订单ID列,那么我建议在合并资金之前在List<ImageView> images = sources.map(source -> {
ImageView iv = new ImageView(new Image(source.toUri().toString(), true));
iv.setPreserveRatio(true);
return iv;
}).collect(Collectors.toList());
content.getChildren().setAll(images);
上进行分组依据,以便最终得到一个像这样的表:>
OrderTable
这样,您就不会有混合的粒度级别,而这些粒度级别会导致出现总计问题。