根据切片器值Power BI显示匹配和不匹配的值

时间:2019-07-07 20:57:23

标签: powerbi dax powerbi-desktop

我正在处理一个Viewership表,该表可以告诉哪个客户监视哪个资产。基于资产过滤器,我需要显示观看过节目的客户和未观看过节目的客户。下面是我的示例表

enter image description here

如果在分割器中将asset_id选择为1,则所需的输出将如下所示

enter image description here

我尝试用asset_id和customer_id创建一个交叉联接表,但是这种方法花费大量时间处理大数据。请此处的专家提出实现此目的的最佳最佳解决方案。

1 个答案:

答案 0 :(得分:1)

首先,创建一个新表“ Asset”:

enter image description here

该表包含唯一资产,我们将使用它创建一个切片器,该切片器影响DAX度量但不影响外观(表)。为此,必须将Asset表与Viewership表断开连接(无关系)。

在您的收视率表中,为了保持一致,我刚刚将“ asset”重命名为“ asset_id”:

enter image description here

接下来,创建一个度量:

Status = 
  VAR Selected_Asset = SELECTEDVALUE(Asset[asset_id])
  VAR Customer_Asset = SELECTEDVALUE(Viewership[asset_id])
RETURN
IF(Customer_Asset = Selected_Asset, "Watched", "Not Watched")

结果:

enter image description here

此处的切片器是通过“资产”表创建的,该表是一个可视表,其中包含Viewership表中的customer_id和asset_id(将它们设置为“不汇总”值)。假设您不需要,我关闭了“总计”。

此设计需要将Asset slicer设置为“单选”模式,以确保仅从中获得一个值。如果希望模型与多选切片器一起使用,请按以下步骤更改DAX度量:

Multi Status = 
  VAR Selected_Assets = ALLSELECTED(Asset[asset_id])
  VAR Customer_Asset = SELECTEDVALUE(Viewership[asset_id])
RETURN
IF(Customer_Asset IN Selected_Assets, "Watched", "Not Watched")

结果:

enter image description here

编辑:

要使其在客户级别起作用:

Customer Status = 
  VAR Selected_Assets = ALLSELECTED(Asset[asset_id])
  VAR Customer_Assets = VALUES(Viewership[asset_id])
  VAR Assets_Watched = COUNTROWS(INTERSECT(Customer_Assets, Selected_Assets))
RETURN
IF(Assets_Watched > 0, "Watched", "Not Watched")

结果:

enter image description here

说明:将所选资产存储在表变量中。然后,将每个客户可见的资产存储在另一个表变量中。查找两个表的交集(它们的共同点),并计算相交的行。如果没有,则不观看,否则观看。如果需要,您可以实际显示观看的电影数量(只需返回“ Assets_Watched”而不是IF语句)。