【问题标题】:DAX selecting and displaying the max value of all selected recordsDAX 选择并显示所有选定记录的最大值
【发布时间】:2020-02-10 01:31:06
【问题描述】:

问题

我正在尝试在 Power BI 的表格中计算并显示所有选定行的最大值以及它们的实际值。当我尝试使用度量 MaxSelectedSales = MAXX(ALLSELECTED(FactSales), FactSales[Value]) 执行此操作时,最大值最终会重复,如下所示:

如果我在输出中添加其他维度,则会出现更多行。

我想看到的只是事实表中选定​​的行,没有空白值。 (即,SaleId 1 到 4 只会显示四行)。

有人知道我如何使用下面显示的数据模型来实现我的目标吗?

详情

我已经配置了以下模型。

DimMarketDimSubMarket 表各有两行,您可以在上面看到它们的名称。 FactSales 表如下所示:

+--------+----------+-------------+-------+-----------+
| SaleId | MarketId | SubMarketId | Value | IsCurrent |
+--------+----------+-------------+-------+-----------+
| 1      | 1        | 1           | 100   | true      |
+--------+----------+-------------+-------+-----------+
| 2      | 2        | 1           | 50    | true      |
+--------+----------+-------------+-------+-----------+
| 3      | 1        | 2           | 60    | true      |
+--------+----------+-------------+-------+-----------+
| 4      | 2        | 2           | 140   | true      |
+--------+----------+-------------+-------+-----------+
| 5      | 1        | 1           | 30    | false     |
+--------+----------+-------------+-------+-----------+
| 6      | 2        | 2           | 20    | false     |
+--------+----------+-------------+-------+-----------+
| 7      | 1        | 1           | 90    | false     |
+--------+----------+-------------+-------+-----------+
| 8      | 2        | 2           | 200   | false     |
+--------+----------+-------------+-------+-----------+

在表格输出中,我通过设置视觉级别过滤器过滤了 FactSales 以仅包含 IsCurrent = true 所在的行。

【问题讨论】:

    标签: powerbi dax


    【解决方案1】:

    您的最大值(度量)是一个标量值(仅限单个值)。如果您将标量值与其他记录一起放入表中,则该值只会重复。一般来说,混合标量值和记录(表)并没有真正带来任何好处。

    像您这样的度量可以更好地显示在 KPI 或多 KPI 视觉对象中(通常以年份显示,即您获得每年的最大值)。

    如果您只想显示所选行的最大值(例如表中的过滤器),请使用此度量:

    Max Value = MAX(FactSales[Value])
    

    这样,在度量计算中会考虑所有应用的过滤器。

    这是一个示例:

    【讨论】:

    • 虽然我通常会同意你的观点,但我的要求略有不同。我试图对最大值做的是将其用作标准化度量((Val - MIN)/(MAX - MIN)的输入。当我尝试在该计算中使用MAX或MIN值时出现问题并且在表格中显示结果。所有行都会重复。
    【解决方案2】:

    我找到了解决问题的方法,但我有点担心查询性能。虽然,在我当前的数据集上,事情似乎表现得相当好。

    MaxSelectedSales = 
    MAXX(
        FILTER(
            SELECTCOLUMNS(
                ALLSELECTED(FactSales),
                "id", FactSales[SaleId],
                "max", MAXX(ALLSELECTED(FactSales), FactSales[Value])
            ),
            [id] = MAX(FactSales[SaleId])
        ),
        [max]
    )
    

    如果我理解正确,对于输出中的每一行,此度量将计算所有选定 FactSales 行的最大值,将其设置为名为 max 的列,然后过滤表,以便只有当前FactSales[SaleId] 被选中。性能损失来自这样一个事实,即需要对输出中的每一行执行 MAX,并且在发生这种情况时会进行全表扫描。

    代表提问者发帖

    【讨论】:

      猜你喜欢
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-07
      • 2013-11-24
      相关资源
      最近更新 更多