首页 > 解决方案 > DAX 代码不适用于度量中使用的配置变量

问题描述

我在 power-bi 桌面中有一个表(名为 Proto),如下所示(有 4 列和大约 30k 行)。 在此处输入图像描述

我使用以下 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)),我只想从中获取顶部的“numIP”行表 temp1。为此编写了下面的代码。每当我更改 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)

标签: powerbidaxpowerbi-desktop

解决方案


它完全按照您的要求执行,请查看您的代码:

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) 进行比较


推荐阅读