DAX 代码不适用于度量中使用的配置变量

问题描述

我在 power-bi 桌面中有一个表(名为 Proto),如下所示(有 4 列和大约 30k 行)。

enter image description here

我使用以下 DAX 代码创建了一个度量。这里,Protoval一个单列表,包含协议的唯一值(如 SSL、DNS 等)。根据用户选择的协议,我正在过滤上表以仅包含所选协议的行。

ProtoTotBytes =
VAR SelectedProto = SELECTEDVALUE(Protoval[Protocol])
VAR temp1 = FILTER(Proto,Proto[Protocol] == SelectedProto)
RETURN CALculaTE(SUM(Proto[total_bytes]),temp1)

上面的 DAX 代码工作正常。现在,除了 SelectedProto 之外,我还想再添加一个配置变量 numIP(TopN-IP 是一个包含数值 5、10、15、20 等TopN-IP's = GENERATESERIES(5,30,5) 的单列表),我只想在其中取顶部表 temp1 中的“numIP”行。为此编写了下面的代码。每当我更改 SelectedProto 的值时,这都有效,但当我更改 numIP 时不会更改?任何人都可以让我知道它对一个配置变量敏感而忽略另一个配置变量吗?

ProtoTotBytes =
VAR numIP = SELECTEDVALUE('TopN-IP''s'[TopN-IP's])
VAR SelectedProto = SELECTEDVALUE(Protoval[Protocol])
VAR temp1 = FILTER(Proto,Proto[Protocol] == SelectedProto)
VAR temp2 = TOPN(numIP,temp1,[total_bytes],DESC)
RETURN CALculaTE(SUM(Proto[total_bytes]),temp2)

解决方法

它完全按照你的要求去做,看看你的代码:

VAR temp1 = FILTER(Proto,Proto[Protocol] == SelectedProto)
VAR temp2 = TOPN(numIP,temp1,[total_bytes],DESC)

在第一行你使用了 FILTER,这是正确的,你正在过滤 在您使用 TOPN 的第二行中,这只是排序。我相信您的意图是基于您的选择进行过滤,因此在这里您也需要使用 FILTER。

VAR temp2 = FILTER(temp1,numIP = VALUE(RIGHT(Proto[networkIpAddress],1)))

在这个过滤器中,我将 networkIp 的最后一位数字与用户选择的 numIP(s) 进行比较