我为一家物流公司做 Power BI。想根据停止位置显示性能。数据目前是按订单 ID 列出的所有订单的表格,因此 -- ID、Rev $、Pickup Stop、Delivery Stop。幸运的是,一切都是两站式的负载。
我正在努力构建一个计算表,该表同时查看提货站和交货站,同时还尊重页面上设置的过滤器。我希望停靠表显示如下内容:停靠位置、X 取件、$X 取件收入、X 交付量、$X 交付收入。
我该怎么办?我尝试了多种方法,但每次它要么错过过滤器,要么一次只能处理一站。
谢谢!
我为一家物流公司做 Power BI。想根据停止位置显示性能。数据目前是按订单 ID 列出的所有订单的表格,因此 -- ID、Rev $、Pickup Stop、Delivery Stop。幸运的是,一切都是两站式的负载。
我正在努力构建一个计算表,该表同时查看提货站和交货站,同时还尊重页面上设置的过滤器。我希望停靠表显示如下内容:停靠位置、X 取件、$X 取件收入、X 交付量、$X 交付收入。
我该怎么办?我尝试了多种方法,但每次它要么错过过滤器,要么一次只能处理一站。
谢谢!
在给定订单的情况下,创建Stops的一种方法是使用 Power Query,可通过Power BI 主页选项卡访问。Queries=>Transform Data
Table.Group
函数是魔法发生的地方。不幸的是,它需要通过在高级编辑器中编码来完成,因为 UI 不提供这些自定义聚合。
Home => Advanced Editor
Applied Steps
以了解算法M代码
let
//Input data and set datatypes
//These lines should be replaced with whatever you need to
//set up your data table
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("bYzBCoMwEER/Zck5BxPRu1RaLJaW6qEQPIS4tEExoonQv+/a0oLQyw5vZnaUYuepxQmKnHFWO697uOKCQ0DiizVdGKHybiTKsbcLTs8PN1wxIZMooiR938z3evCawyFbKczeDhzq268qyBZpsg23f9+qJF+Skuwe1ui741CU/2djsmO53lJ3SFsth/3aPWrTzY7Kp4o1zQs=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t, Column2 = _t, Column3 = _t, Column4 = _t]),
#"Promoted Headers" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
dataSource = Table.TransformColumnTypes(#"Promoted Headers",{
{"Order ID", Int64.Type}, {"Total Revenue", Int64.Type},
{"Pickup Stop", type text}, {"Delivery Stop", type text}}),
//Unpivot to get single column of Stops
#"Unpivoted Columns" = Table.UnpivotOtherColumns(dataSource, {"Order ID", "Total Revenue"}, "Attribute", "Stop"),
//Group by stop and do the aggregations
#"Grouped Rows" = Table.Group(#"Unpivoted Columns", {"Stop"}, {
{"Orders Picked Up", (t)=> List.Count(List.Select(t[Attribute], each _ = "Pickup Stop" )), Int64.Type},
{"Total Revenue Picked Up", (t)=> List.Sum(Table.SelectRows(t, each [Attribute]="Pickup Stop")[Total Revenue]), type number},
{"Orders Delivered", (t)=> List.Count(List.Select(t[Attribute], each _ = "Delivery Stop" )), Int64.Type},
{"Total Revenue Delivered", (t)=> List.Sum(Table.SelectRows(t, each [Attribute]="Delivery Stop")[Total Revenue]), type number}
})
in
#"Grouped Rows"