Power Bi矩阵中的自定义聚合列

时间:2018-10-03 17:35:31

标签: powerbi

我正在尝试在Power BI报表中创建一个矩阵,以汇总以多种不同方式切分的Salesperson绩效。

我知道如何使用行-销售员,列-产品类型和值-销售计数来创建矩阵,该矩阵将显示每种产品类型每个销售员的销售数量,但是我也希望能够以下:

  1. 添加一个其他列作为枢纽(例如“销售年份”),以便我可以在同一张表格中并排(即未嵌套)看到“产品类型”和“年份”两个枢纽的“销售”计数。
  2. 在我的矩阵中添加其他汇总列,以显示值,例如按销售人员划分的平均销售金额,按销售人员划分的销售总数的百分比。

为清楚起见,我想这将导致一个矩阵,其中列标题显示为:销售人员,产品1,产品2,...,年1,年2,...,总销售计数,平均值销售额,占总销售额的百分比。请参见下面的图片链接(我尚没有信誉点包括实际的图片)

image of example matrix

我认识到可以通过创建有效复制矩阵如何拆分值并将每个度量添加为值(无列)的度量来做到这一点,但是我不想创建新度量并进行更新每年或每次我们添加新的产品类型时都会使用此矩阵。

我还研究了Power BI市场上的自定义视觉效果,但没有发现可以实现这一目标的任何视觉效果。

1 个答案:

答案 0 :(得分:8)

可以这样做,但并非易事。您将需要一个带有SWITCH的度量以及一个标题表。

您可以按照以下方式创建标题表:

Header =
UNION(SUMMARIZE(Sales, Sales[Product], "Group", "By Product", "Index", 1),
    SUMMARIZE(Sales, Sales[Year], "Group", "By Year", "Index", 2),
    DATATABLE("Header", STRING, "Group", STRING, "Index", INTEGER,
           {{" Total", "Summarizations", 3},
            {"% of Total Sales", "Summarizations", 3},
            {"Avg Sale Size", "Summarizations", 3}}))

看起来像这样:

Header,            Group,          Index,
Product 1,         By Product,      1,
Product 2,         By Product,      1,
2016,              By Year,         2,
2017,              By Year,         2,
2018,              By Year,         2,
 Total,            Summarizations,  3,
% of Total Sales,  Summarizations,  3,
Avg Sale Size,     Summarizations,  3

添加更多产品或年份后,该表将自动扩展。
(注意:Index列是这样,因此我可以使用“按列排序”对它们进行正确排序。)

一旦有了,只需将GroupHeader放在矩阵视觉的列上,并将Salesperson放在行上,并在值中进行切换。 / p>

Measure = 
    VAR Val =
    SWITCH(SELECTEDVALUE(Header[Group]),
        "By Product",
        CALCULATE(SUM(Sales[Amount]),
            FILTER(Sales, Sales[Product] = MAX(Header[Header]))),
        "By Year",
        CALCULATE(SUM(Sales[Amount]),
            FILTER(Sales, Sales[Year] = VALUE(MAX(Header[Header])))),
        SWITCH(SELECTEDVALUE(Header[Header]),
            "% of Total Sales",
            DIVIDE(SUM(Sales[Amount]),
                CALCULATE(SUM(Sales[Amount]), ALL(Sales))),
            "Avg Sale Size", AVERAGE(Sales[Amount]),
            SUM(Sales[Amount]))
    )
    RETURN
    IF(SELECTEDVALUE(Header[Header]) = "% of Total Sales",
        FORMAT(Val, "0.0%"),
        FORMAT(Val, "0.0"))

每个不同的组都有自己的计算方式,我们必须使用FORMAT函数来强制表格正确格式化百分比函数。

(注意:如果您有切片器或过滤器,则可能要在上面使用ALLSELECTED的地方使用ALL。)


这是我的表的样子(不是完全相同的数据,而是相似的结构)

Grouped Table

这是我为此创建的PBIX文件:

https://drive.google.com/file/d/1qxc5p53MgmOm-NH3EcivkZLhLeEHpr4R/