如何对矩阵中的所有值进行比较?

2020-05-14 20:49:13 浏览数 (1)

如何对矩阵中的所有值进行比较?

(一) 分析需求

需求相对比较明确,就是在矩阵中显示的值,需要进行整体比较,而不是单个字段值直接进行的比较。如图1所示,确认矩阵中最大值或者最小值。

(二) 实现需求

要实现这一步需要分析在矩阵或者透视表的情况下,如何对整体数据进行比对,实际上也就是忽略矩阵的所有维度进行比对。上面这个矩阵的维度有品牌Brand以及洲Continent。只需要在计算比较值的时候对维度进行忽略即可。如果所有字段在单一的表格中,那相对比较好办,只需要在计算金额的时候忽略表中的维度即可。

如果维度在不同表中,那建议构建一个有维度组成的表并进行计算。可以通过summarize构建维度表并使用addcolumns增加计算的值列,达到同样的效果。之后就比较简单了,直接忽略维度计算最大值和最小值再和当前值进行比较。通过这个值的大小设置条件格式,就能在矩阵中显示最大值和最小值的标记了。

代码语言:javascript复制
VAR MinValue = MinX('构建表','构建表'[@SalesAmt])VAR MaxValue = MaxX('构建表','构建表'[@SalesAmt])VAR CurrentValue = [Sales Amount]VAR Result =     SWITCH (         TRUE,        CurrentValue = MinValue, 1,        CurrentValue = MaxValue, 2    )RETURN   Result

当然只需要进行计算的话,这个表可以书写在内存变量里面,通过var进行赋值,在后面的计算过程中进行调用。

代码语言:javascript复制
var t=CALCULATETABLE(    ADDCOLUMNS(        SUMMARIZE('Sales','Product'[Brand],Store[Continent]),        "@SalesAmt",        [Sales Amount]    ),    all('Product'[Brand]),all(Store[Continent]))VAR MinValue = MINX(t,[@SalesAmt])VAR MaxValue = MaxX(t,[@SalesAmt])VAR CurrentValue = [Sales Amount]VAR Result =     SWITCH (         TRUE,        CurrentValue = MinValue, 1,         CurrentValue = MaxValue, 2      )RETURN   Result

注意:在计算最大值和最小值的时候,如果未使用真实表的话,则需要添加all来进行忽略维度进行计算,如果是实际表则可以直接求最大和最小值。

当然这里还会有一个问题,和之前的文章中类似,如果同时具备这两个维度的外部筛选条件,那这样做的话也会出错,如图3所示,因为筛选后把最大值或者最小值给筛选掉了,因为我们要显示的是矩阵中的值进行比较,如果通过外部筛选后,矩阵中的值会变化,所以这时使用AllSelect会更合适。

把忽略的2个维度使用AllSelect()来进行替换即可,最后得到符合需求的样式。条件格式可以直接在设置表里根据判断条件1或者2来进行设置,如图4所示。

最终显示的才是正确的结果,如图5所示。

var

0 人点赞