基于切片器值 Power BI 显示匹配值和非匹配值

Display Matched and Non Matched Values based on a slicer value Power BI

我正在研究收视率 table,它告诉哪些客户观看了哪些资产。基于资产过滤器,我需要显示观看节目的客户和未观看节目的客户。下面是我的例子 table

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

我曾尝试使用 asset_id 和 customer_id 创建交叉连接 table ,但这种方法在处理大数据时会花费很多时间。请这里的专家提出最好的优化方案来实现这一点。

首先,创建一个新的 table "Asset":

这个 table 包含独特的资产,我们将使用它来创建一个影响 DAX 度量但不影响视觉的切片器 (table)。为此,资产 table 必须与观看人数 table 断开(无关系)。

在您的收视率 table 中,我刚刚将 "asset" 重命名为 "asset_id",以保持一致:

接下来,创建一个度量:

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

结果:

此处的切片器是从 "Asset" table 创建的,而 table 是 table 视觉对象,其中 customer_id 和 asset_id 来自收视率 table(将它们设置为 "don't summarize" 值)。我关闭了 "total",假设你不需要它。

此设计需要将 Asset slicer 设置为 "single selection" 模式,以确保您只从中获取一个值。如果您希望模型与 multi-select 切片器一起使用,请按如下方式更改 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")

结果:

编辑:

要使其在客户层面发挥作用:

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")

结果:

说明:将选定的资产存储在 table 变量中。然后,将每个客户可见的资产存储在另一个 table 变量中。找到两个 table 的交集(它们的共同点),并计算交集行数。如果 none - 未观看,否则观看。如果你愿意,你可以实际显示观看的电影数量(只是 return "Assets_Watched" 而不是 IF 语句)。