代码之家  ›  专栏  ›  技术社区  ›  Sach

根据数据集的平均值有条件地格式化表,但要遵守切片器的选择

  •  0
  • Sach  · 技术社区  · 2 年前

    我有这样一个简单的CSV数据集。

    ID,MainCategory,SubCategory,Type,Value
    1,E,E1,Demo,5
    2,N,N3,Install,2
    3,E,E1,Demo,4
    4,E,E2,Install,7
    5,D,D1,Install,3
    6,S,S2,PM,4
    7,N,N2,Install,7
    8,N,N2,Demo,1
    9,E,E2,Demo,2
    10,D,D2,Install,6
    11,D,D3,PM,4
    12,S,S1,PM,8
    13,N,N1,Install,5
    14,S,S3,Install,8
    15,S,S1,Demo,9
    16,E,E3,Demo,5
    17,N,N2,Install,3
    18,E,E2,PM,6
    19,D,D2,PM,6
    20,N,N3,Demo,6
    21,S,S2,Demo,7
    22,E,E3,Install,2
    23,S,S1,Install,4
    24,S,S2,PM,8
    25,D,D1,Install,5
    

    在我的Power BI Desktop中,我想将其加载到一个表中,并有条件地格式化 Value 列,基于每行中的值是否大于或小于当前所选数据集的平均值。

    例如,的平均值 价值 考虑到整张桌子 5.08 ,所以如果没有应用过滤器(如中所示,我的所有切片器都设置为不选择任何内容),我希望所有行 价值 是6个或更多以一种颜色作为背景色而其它颜色为另一种颜色。为此,我创建了两个度量值:

    1. AvgOfVal = DIVIDE( SUM(G2G[Value]), COUNTA(G2G[ID]) )
    2. BGColor = IF(SUM(G2G[Value]) > [AvgOfVal], "Light Pink", "Light Blue")

    然后我试着应用 BGColor 用于有条件地格式化背景的度量,但这并不像预期的那样工作,而是产生以下结果。

    enter image description here

    我意识到这是由于度量是按行计算的,所以当应用条件格式时,如 AvgOfVal 列,它计算每行的平均值,而不是整个数据集的平均值。我如何计算一个考虑到整个数据集的度量值(考虑切片器),并根据需要进行条件格式化。

    请记住,如果用户要选择切片器过滤器(例如, MainCategory = D ),那么我希望条件格式能够反映这一点。所以在这种情况下,考虑到 AvgOfVal = 4.80 对于 主类别=D 条目,我想要其所有行 Value >= 5 是一种颜色,而其他颜色是另一种颜色。

    enter image description here

    1 回复  |  直到 2 年前
        1
  •  1
  •   David Browne - Microsoft    2 年前

    我意识到这是由于度量是按行计算的

    对关键是要了解这种情况是如何发生的。计算度量值时,将发生“上下文转换”,并将当前行添加到筛选器上下文中。

    因此,您需要的是一个删除上下文转换中添加的行筛选器的计算。所以你需要 ALLSELECTED() ,正是这样。如

    AvgOvVAl = CALCULATE( AVERAGE('data'[Value]), ALLSELECTED() )
    

    删除“最里面”的过滤器,在这种情况下是行上的过滤器,但保留所有其他过滤器,即添加在报表、页面、视觉上的过滤器或来自与其他视觉效果(如切片器)交互的过滤器。