Power Query Excel以列的百分比显示值

通常情况下,数据透视表用于以特定顺序显示数据。 对于这个特定的“问题”,我需要提出数字和目标。 这在枢轴中是有冲突的,因为列的百分比也考虑了目标。

不用担心,用PowerPivot应该可以解决这个问题。 到目前为止,我已经能够创build一个具有以下布局的表格:

1 2 3 cat A 5 10 7 cat B 10 8 9 cat C 0 2 1 

其中1,2和3是一个月的前三天(为了简单起见,其余的被省略)。

我可以得到总计的列如下:

 = Table.FromRows({List.Transform({"1","2","3"}, each List.Sum(Table.Column(prevStep, _)))}, {"1","2","3"}) 

此外,我可以将列的每个值除以数字:

 = Table.TransformColumns(prevStep, List.Transform({"1","2","3"}, each {_, (this) => this / 42, type number})) 

现在我想用之前为列列计算的总数replace42。 请注意,“{”1“,”2“,”3“}将在另一步中自动计算。

有人可以详细说明如何实现这一目标吗? 预期结果:

  1 2 3 cat A 0.33 0.5 0.41 cat B 0.67 0.4 0.53 cat C 0 0.1 0.06 

我不能想出一种方法来简单地replace代码中的42,但是因为我看到这是matrix运算,所以我在下面的解决scheme的基础上,在Gil Raviv的博客上关于matrix乘法的问题 。

我从表1开始:

在这里输入图像说明

那么,为了达到这个…

在这里输入图像说明

…我使用Table1作为新查询的来源,并且这个代码:

 let Source = Table1, #"Removed Columns" = Table.RemoveColumns(Source,{""}), MatrixA = Table.TransformColumnTypes(#"Removed Columns",{{"1", type number}, {"2", type number}, {"3", type number}}), Summed = Table.FromRows({List.Transform({"1","2","3"}, each List.Sum(Table.Column(MatrixA, _)))}, {"1","2","3"}), MatrixB = Table.TransformColumnTypes(Summed,{{"1", type number}, {"2", type number}, {"3", type number}}), IndexedMatrixA = Table.AddIndexColumn(MatrixA, "Index", 1, 1), #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(IndexedMatrixA, {"Index"}, "Attribute", "Value"), #"Changed Type" = Table.TransformColumnTypes(#"Unpivoted Other Columns",{{"Attribute", Int64.Type}}), RenamedColumnsMatrixA = Table.RenameColumns(#"Changed Type",{{"Index", "Row"}, {"Attribute", "Column"}}), IndexedMatrixB = Table.AddIndexColumn(MatrixB, "Index", 1, 1), #"Unpivoted Other Columns1" = Table.UnpivotOtherColumns(IndexedMatrixB, {"Index"}, "Attribute", "Value"), #"Changed Type1" = Table.TransformColumnTypes(#"Unpivoted Other Columns1",{{"Attribute", Int64.Type}}), RenamedColumnsMatrixB = Table.RenameColumns(#"Changed Type1",{{"Index", "Row"}, {"Attribute", "Column"}}), #"Merged Queries" = Table.NestedJoin(RenamedColumnsMatrixA,{"Column"},RenamedColumnsMatrixB,{"Column"},"RenamedColumnsMatrixB",JoinKind.LeftOuter), #"Expanded RenamedColumnsMatrixB" = Table.ExpandTableColumn(#"Merged Queries", "RenamedColumnsMatrixB", {"Row", "Column", "Value"}, {"B.Row", "B.Column", "B.Value"}), #"Added Custom" = Table.AddColumn(#"Expanded RenamedColumnsMatrixB", "AB", each [Value]/[B.Value]), #"Grouped Rows" = Table.Group(#"Added Custom", {"Row", "B.Column"}, {{"AB", each List.Sum([AB]), type number}}), #"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(#"Grouped Rows", {{"B.Column", type text}}, "en-US"), List.Distinct(Table.TransformColumnTypes(#"Grouped Rows", {{"B.Column", type text}}, "en-US")[B.Column]), "B.Column", "AB"), #"Added Index" = Table.AddIndexColumn(#"Pivoted Column", "Index", 1, 1), IndexedSource = Table.AddIndexColumn(Source, "Index", 1, 1), #"Merged Queries1" = Table.NestedJoin(#"Added Index",{"Index"},IndexedSource,{"Index"},"IndexedSource",JoinKind.LeftOuter), #"Expanded IndexedSource" = Table.ExpandTableColumn(#"Merged Queries1", "IndexedSource", {""}, {"Column1"}), #"Removed Columns1" = Table.RemoveColumns(#"Expanded IndexedSource",{"Row", "Index"}), #"Reordered Columns" = Table.ReorderColumns(#"Removed Columns1",{"Column1", "1", "2", "3"}) in #"Reordered Columns" 

你会注意到我有点“跳来跳去”,使用之前的应用步骤(基本上是查询表状态)作为代码中的“表”,就像在这些应用步骤中一样:

  • Index MatrixB( IndexedMatrixB = Table.AddIndexColumn(MatrixB, "Index", 1, 1),其中MatrixB是前一个应用步骤); 和

  • 合并查询( #"Merged Queries" = Table.NestedJoin(RenamedColumnsMatrixA,{"Column"},RenamedColumnsMatrixB,"Column"},"RenamedColumnsMatrixB",JoinKind.LeftOuter),其中RenamedColumnsMatrixARenamedColumnsMatrixB是先前的应用步骤。

@Marc Pince; 感谢您的build议。 经过一番苦战之后,我有能力做出以下几点:

首先,我把总和计算线交换如下:

 totMinDay = Table.ToRows (Table.FromRows({List.Transform(daysOfMonth , each List.Sum(Table.Column(prevStep, _)))}, daysOfMonth )){0}, 

daysOfMonth是在其他地方获得的实际月份的date。

接下来我计算百分比如下:

 perc= Table.TransformColumns(prevStep, List.Transform(daysOfMonth , each {_, (this) => Number.Round(this/ ( totMinDay {Number.FromText( _ ) - 1} ), 3), type number})), 

在这里,我使用这样一个事实:总和的指数是基于月份的日子减1(从零开始),从而提供可靠的结果。

感谢所有的投入。