我正在处理一个Viewership表,该表可以告诉哪个客户监视哪个资产。基于资产过滤器,我需要显示观看过节目的客户和未观看过节目的客户。下面是我的示例表
如果在分割器中将asset_id选择为1,则所需的输出将如下所示
我尝试用asset_id和customer_id创建一个交叉联接表,但是这种方法花费大量时间处理大数据。请此处的专家提出实现此目的的最佳最佳解决方案。
答案 0 :(得分:1)
首先,创建一个新表“ Asset”:
该表包含唯一资产,我们将使用它创建一个切片器,该切片器影响DAX度量但不影响外观(表)。为此,必须将Asset表与Viewership表断开连接(无关系)。
在您的收视率表中,为了保持一致,我刚刚将“ 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")
结果:
此处的切片器是通过“资产”表创建的,该表是一个可视表,其中包含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")
结果:
编辑:
要使其在客户级别起作用:
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")
结果:
说明:将所选资产存储在表变量中。然后,将每个客户可见的资产存储在另一个表变量中。查找两个表的交集(它们的共同点),并计算相交的行。如果没有,则不观看,否则观看。如果需要,您可以实际显示观看的电影数量(只需返回“ Assets_Watched”而不是IF语句)。