【问题标题】:Row-wise dynamic conditional formatting with max and min具有最大值和最小值的逐行动态条件格式
【发布时间】:2020-09-09 00:02:50
【问题描述】:

问题

我需要使用 Power BI 中内置的动态条件格式来逐行更改颜色。行中的最低值必须是绿色,最高值必须是红色,中间的所有颜色都是绿色和红色之间的橙色阴影。 问题是内置的条件格式会计算整个矩阵的最大值和最小值,并且没有选项可以逐列或逐行计算最大值和最小值。

示例

下面是一个简单的示例,给定维度_1(颜色)、维度_2(年份)和 KPI(度量)。实际上,矩阵比这大得多(例如 15 个不同的年份),但这是一个有代表性的例子。

+-------------+-------------+------+------+------+
| dimension_1 | dimension_2 | 2017 | 2018 | 2019 |
+-------------+-------------+------+------+------+
| Red         | Measure     |    0 |   50 |  100 |
| Blue        | Measure     | -100 |  -50 |    0 |
| Green       | Measure     | -100 |    0 |  100 |
+-------------+-------------+------+------+------+

Power BI 会将 -100 视为最小值,将 +100 视为最大值。 因此,应用的条件格式如下:

+-------------+-------------+--------------+--------------+--------------+
| dimension_1 | dimension_2 |     2017     |     2018     |     2019     |
+-------------+-------------+--------------+--------------+--------------+
| Red         | Measure     | light orange | dark orange  | red          |
| Blue        | Measure     | green        | dark orange  | yellow       |
| Green       | Measure     | green        | yellow       | red          |
+-------------+-------------+--------------+--------------+--------------+

预期的解决方案

预期的解决方案会应用条件格式来逐行计算最大值和最小值。 因此,在第 1 行中,最小值为 0,最大值为 100。如果我们对所有行重复此计算,我们会得到以下结果:

+-------------+-------------+-------+--------+------+
| dimension_1 | dimension_2 | 2017  |  2018  | 2019 |
+-------------+-------------+-------+--------+------+
| Red         | Measure     | green | orange | red  |
| Blue        | Measure     | green | orange | red  |
| Green       | Measure     | green | orange | red  |
+-------------+-------------+-------+--------+------+

提醒

条件格式必须是动态的,按行给出最大值和最小值。也就是说,我不想用规则来定义固定的颜色,而是让 Power BI 定义不同的色调。

【问题讨论】:

    标签: powerbi dax


    【解决方案1】:

    取自SQLBI并修改以适应要求:

    MinMax =
    VAR AllList =
        CALCULATETABLE (
            ADDCOLUMNS (
                SUMMARIZE ( Sheet1, Sheet1[Dimension 1], Sheet1[Dimension 2], DimDate[Month] ),
                "@Total", [Total]
            ),
            ALLSELECTED ()
        )
    VAR dm1 =
        SELECTEDVALUE ( Sheet1[Dimension 1] )
    VAR dm2 =
        SELECTEDVALUE ( Sheet1[Dimension 2] )
    VAR CurrList =
        FILTER (
            SELECTCOLUMNS (
                AllList,
                "Dimension1", [Dimension 1],
                "Dimension2", [Dimension 2],
                "DMonth", [Month],
                "TTotal", [@Total]
            ),
            [Dimension1] = dm1
                && [Dimension2] = dm2
        )
    VAR MinValue =
        MINX ( CurrList, [TTotal] )
    VAR MaxValue =
        MAXX ( CurrList, [TTotal] )
    VAR CurrentValue = [Total]
    VAR Result =
        SWITCH (
            TRUE,
            CurrentValue = MinValue, 1,
            -- 1 for MIN - green
            CurrentValue = MaxValue, 3,
            -- 3 for MAX - red
            2
        )
    RETURN
        Result
    

    谢谢

    【讨论】:

    • 感谢您提出的第一个解决方案。注意:这个解决方案是静态的,因为我们只有 3 种可能的颜色。我们如何将其更改为动态的,以便 min 和 max 之间的值将被着色为介于两者之间的阴影?
    • 不知道你怎么说它是静态的。这都是动态的。表格变量是针对矩阵中的每个单元格计算的,即使您有一个颜色/维度 1 切片器并排除“红色”,它也应该可以工作。请清除问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多