Powerbi 带有筛选值的非筛选值列表

Powerbi 带有筛选值的非筛选值列表,powerbi,dax,Powerbi,Dax,我正在尝试在Power BI中整合一个参考工具,用户可以在其中过滤包含各种客户的财产访问信息的数据: 客户识别码 物业编号 开始日期 日期(完) 客户1 1. 1/1/2019 1/7/2019 客户2 1. 1/5/2019 1/12/2019 客户3 1. 1/2/2019 1/14/2019 客户1 2. 2/1/2019 2/5/2019 客户3 2. 2/2/2019 2/8/2019 客户4 2. 2/4/2019 2/12/2019 客户2 3. 3/3/2019 3/10/201

我正在尝试在Power BI中整合一个参考工具,用户可以在其中过滤包含各种客户的财产访问信息的数据:

客户识别码 物业编号 开始日期 日期(完) 客户1 1. 1/1/2019 1/7/2019 客户2 1. 1/5/2019 1/12/2019 客户3 1. 1/2/2019 1/14/2019 客户1 2. 2/1/2019 2/5/2019 客户3 2. 2/2/2019 2/8/2019 客户4 2. 2/4/2019 2/12/2019 客户2 3. 3/3/2019 3/10/2019 客户3 3. 3/9/2019 3/13/2019 客户4 3. 3/12/2019 3/25/2019 客户1 4. 4/5/2019 4/10/2019 客户2 4. 4/6/2019 4/9/2019 客户3 4. 4/12/2019 4/15/2019
我想这取决于Clients表和visions表之间的活动关系的必要性。这些是假定的表格

我将从非活动关系开始:

切片器不再作用于访问[Client_ID]列,但可视化将继续收集有关切片器的信息,而不是设置切片器和我使用的表之间的交互,即,抱歉,通过格式化/编辑交互没有

它没有在不同的场景中进行完全测试,因为表很小,我给了其他选项更多的时间,但我认为为这个选项投入更多的时间是正确的选择

Test2 = 
VAR SelectedClient=VALUES(Clients[Client_ID])
VAR CurrentProperty= CALCULATETABLE(VALUES(Visits[Property_ID]))
VAR FilteredProperties= 
CALCULATETABLE(VALUES(Visits[Property_ID]),ALL(Visits),SelectedClient,USERELATIONSHIP(Clients[Client_ID],Visits[Client_ID]))
VAR PropertiesBySC = COUNTROWS(INTERSECT(FilteredProperties,CurrentProperty))
RETURN 
PropertiesBySC
在以下两个示例中,Clients表和visions表之间的关系保持活动状态

由于表中显示了度量值,因此无需为此视觉上与度量值相关的过滤器设置参数:

Test = 
VAR SelectedClient= VALUES(Clients[ClientName])
VAR CurrentProperty= CALCULATETABLE(VALUES(Visits[Property_ID]),ALL(Clients))
VAR FilteredProperties= CALCULATETABLE(VALUES(Visits[Property_ID]),ALL(Visits),SelectedClient)
VAR PropertiesBySC = COUNTROWS(INTERSECT(FilteredProperties,CurrentProperty))
RETURN 
IF(
    ISFILTERED(Clients[Client_ID]) && PropertiesBySC=1 &&HASONEVALUE(Clients[Client_ID]),
    "Property related to " & SelectedClient & "'s visits",
    IF(
        ISFILTERED(Clients[Client_ID]) && PropertiesBySC<>1,
        BLANK(),
        "Multiple clients Selected"
        )
)
为了避免由于度量未优化而导致的多重选择问题,我为切片器激活了单选选项

最后,我认为使用一个允许我们评估基于切片器的DAX查询的表会更容易。干杯

编辑

非活动关系,同一客户在不同日期范围内访问同一物业

Test2 := 
VAR SelectedClient = CALCULATETABLE(VALUES(Clients[Client_ID]))
VAR CurrentProperty = CALCULATETABLE(VALUES(Visits[Property_ID]))
VAR CurrentStartDate = CALCULATE(VALUES(Visits[Date_Start]))
VAR CurrentEndDate = CALCULATE(VALUES(Visits[Date_End]))
VAR CurrentDateRange = DATESBETWEEN(Dates[Date],CurrentStartDate,CurrentEndDate)
VAR PropertiesVisitedBySC = 
CALCULATETABLE(
    VALUES(Visits[Property_ID]),
    ALL(Visits),
    Visits[Client_ID] IN SelectedClient,
    USERELATIONSHIP(Clients[Client_ID],Visits[Client_ID]))
VAR HasTheSCVisitedTheCurrentProperty = //1=Yes|Blank()=No
COUNTROWS(INTERSECT(PropertiesVisitedBySC,CurrentProperty))
VAR SCVisitsForCurrentProperty =
SELECTCOLUMNS(
    CALCULATETABLE(Visits,ALLEXCEPT(Visits,Visits[Property_ID]),Visits[Client_ID] IN SelectedClient),
    "Date_Start",Visits[Date_Start],"Date_End",Visits[Date_End])
VAR DateRangesForSCVisits= 
SELECTCOLUMNS(
    GENERATE(SCVisitsForCurrentProperty,DATESBETWEEN(Dates[Date],[Date_Start],[Date_End])),
    "Date",[Date])
VAR HasTheSCVisitedTheCurrentPropertyInAnyDateRange=
COUNTROWS(INTERSECT(CurrentDateRange,DateRangesForSCVisits))
RETURN 
//>0=Yes|Blank()=No
IF( 
    HasTheSCVisitedTheCurrentProperty=1,
    HasTheSCVisitedTheCurrentPropertyInAnyDateRange)

非常感谢-这非常有用!前两个解决方案对我的实际数据非常有效。不幸的是,虽然我遇到了第三个解决方案涉及日期计算的问题。当将您的方法应用于测试数据和我的实际数据时,我不断得到一个由多个值组成的表,其中在将测试度量值添加到表中时会出现一条错误消息。我试图找出是什么原因导致了这一切,但不幸的是,我还没有找到运气。任何洞察都将不胜感激!示例表不包含相同属性的重复客户端ID访问。因此,我认为我忽略了这一点:真实数据包含重复的客户ID值,因为一些客户在这段时间内可能不止一次停留在同一个酒店,因此在尝试引用DAX中所有未过滤的值时,这带来了额外的挑战。我只选择了客户和访问之间的非活动关系选项。但是,如果您使用由可计算修饰符引导的相同方法,我认为您会找到具有活动关系的场景的解决方案。为了在代码块中编写度量,我将编辑答案。是的,日期介于。。。在DatesIntervalBySC_P VAR中,很抱歉,奇怪的名称不能用于重复的客户端,因为可计算的修饰符为客户端_1返回了多行,因此值Visitions[Date_Start]得到了一个包含多行的列,DatesBeween需要一个标量作为第二和第三个参数。这就是为什么提供了一个包含多个值的表,其中预期只有一个值。因此,我所做的是使用以前使用的相同可计算修饰符筛选访问,这将返回客户端_1和属性=4的重复行,但日期范围不同。在这个例子中,它只有两行。仅从该表中选择了“开始日期”和“结束日期”列。GENERATE创建一个表,其中包含一列,其中所有日期都在不同的日期范围内。最后,该列用于将其与每行的日期范围进行比较。
Test2 := 
VAR SelectedClient = CALCULATETABLE(VALUES(Clients[Client_ID]))
VAR CurrentProperty = CALCULATETABLE(VALUES(Visits[Property_ID]))
VAR CurrentStartDate = CALCULATE(VALUES(Visits[Date_Start]))
VAR CurrentEndDate = CALCULATE(VALUES(Visits[Date_End]))
VAR CurrentDateRange = DATESBETWEEN(Dates[Date],CurrentStartDate,CurrentEndDate)
VAR PropertiesVisitedBySC = 
CALCULATETABLE(
    VALUES(Visits[Property_ID]),
    ALL(Visits),
    Visits[Client_ID] IN SelectedClient,
    USERELATIONSHIP(Clients[Client_ID],Visits[Client_ID]))
VAR HasTheSCVisitedTheCurrentProperty = //1=Yes|Blank()=No
COUNTROWS(INTERSECT(PropertiesVisitedBySC,CurrentProperty))
VAR SCVisitsForCurrentProperty =
SELECTCOLUMNS(
    CALCULATETABLE(Visits,ALLEXCEPT(Visits,Visits[Property_ID]),Visits[Client_ID] IN SelectedClient),
    "Date_Start",Visits[Date_Start],"Date_End",Visits[Date_End])
VAR DateRangesForSCVisits= 
SELECTCOLUMNS(
    GENERATE(SCVisitsForCurrentProperty,DATESBETWEEN(Dates[Date],[Date_Start],[Date_End])),
    "Date",[Date])
VAR HasTheSCVisitedTheCurrentPropertyInAnyDateRange=
COUNTROWS(INTERSECT(CurrentDateRange,DateRangesForSCVisits))
RETURN 
//>0=Yes|Blank()=No
IF( 
    HasTheSCVisitedTheCurrentProperty=1,
    HasTheSCVisitedTheCurrentPropertyInAnyDateRange)