power bi 矩阵中的自定义聚合列

Posted

技术标签:

【中文标题】power bi 矩阵中的自定义聚合列【英文标题】:Custom aggregate column in power bi matrix 【发布时间】:2019-03-09 00:27:24 【问题描述】:

我正在尝试在 Power BI 报告中创建一个矩阵,以总结以多种不同方式划分的销售人员绩效。

我知道如何创建一个矩阵,其中包含行 - 销售人员、列 - 产品类型和值 - 销售数量,这将显示每种产品类型的每个销售人员的销售数量,但我也希望能够做到以下:

    添加一个额外的列设置为透视(例如销售年份),这样我就可以在同一个表中并排看到按产品类型和年份旋转的销售计数(即不嵌套)。 在我的矩阵中添加额外的汇总列,显示销售人员的平均销售金额、销售人员销售总数的百分比等值。

为了清楚起见,我想这会产生一个矩阵,其中列标题为:销售人员、产品 1、产品 2、...、第 1 年、第 2 年、...、总销售额、平均销售额,占总销售额的百分比。请参阅下面的图片链接(我还没有声誉点来包含实际图片)

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

我还查看了 Power BI 市场上的自定义视觉效果,但没有看到任何可以实现这一目标的方法。

【问题讨论】:

您好,我正在尝试复制如下相同的解决方案,能否请您展示一下您的初始销售表数据集的初始结构。 【参考方案1】:

可以做到这一点,但并不容易。您需要一个带有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 放在行上,并在值中使用切换度量。

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。)


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

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

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

【讨论】:

非常有帮助!!!救了我,虽然我的和这个不一样,但真的,救我! @Alexis Olson - 感谢您对 SO 的贡献,我对上述解决方案有疑问,基本上我正在尝试复制相同的解决方案,但无法理解初始销售表的样子?是否像 (SalesPerson,Product,Year,Amount) 并且一旦销售表的结构清晰,我是否应该继续与您创建的标题表建立关系? @balaji 我建议看看我提供的 PBIX。当你打开它时,你应该能够看到任何结构和关系。

以上是关于power bi 矩阵中的自定义聚合列的主要内容,如果未能解决你的问题,请参考以下文章

SqlServer如何用Sql语句自定义聚合函数

百度地图聚合功能自定义聚合文字

使用 plsql 的用户定义的自定义聚合函数

python中的自定义pivot_ui聚合器?

Power BI- 矩阵颜色自定义设置

SQL 中的自定义聚合