Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powerbi 当我们使用用户关系时,power bi如何解决歧义?_Powerbi_Dax - Fatal编程技术网

Powerbi 当我们使用用户关系时,power bi如何解决歧义?

Powerbi 当我们使用用户关系时,power bi如何解决歧义?,powerbi,dax,Powerbi,Dax,假设我有一个过滤产品和产品历史表的日期表。然后我尝试在产品和产品历史记录之间添加链接(两个表中的名称列上的m:m),然后Power BI不允许我添加活动链接(或在添加后使链接处于活动状态),因为会引入歧义 但如果我添加非活动关系,然后使用DAX CALCULATE和产品和产品历史表之间的用户关系创建一个测量 CALCULATE ( SUMX ( PRODUCT_CALLS, SUMX ( RELATEDTABLE ( PRODUCT_HISTORY ),

假设我有一个过滤产品和产品历史表的日期表。然后我尝试在产品和产品历史记录之间添加链接(两个表中的名称列上的m:m),然后Power BI不允许我添加活动链接(或在添加后使链接处于活动状态),因为会引入歧义

但如果我添加非活动关系,然后使用DAX CALCULATE和产品和产品历史表之间的用户关系创建一个测量

CALCULATE (
    SUMX (
        PRODUCT_CALLS,
        SUMX ( RELATEDTABLE ( PRODUCT_HISTORY ), PRODUCT_HISTORY[PRODUCT_USAGE] )
    ),
    USERELATIONSHIP ( PRODUCT_CALLS[NAME], PRODUCT_HISTORY[NAME] )
)
  • 这是否会导致ProductUsage表的AND筛选器(即-从日期和产品表中筛选)。或者power bi是否随机选择过滤器来自日期表还是产品表

  • 在上面的公式中,如果我不使用CALCULATE,如何计算RELATEDTABLE?由于没有链接,如何对其进行评估

  • 由于使用了UserRelationship,因此可以通过使用该关系而不是日期和历史表之间存在的活动关系来强制DAX解决歧义。这是因为在这个简单的例子中,含糊不清的地方在于从日期表到历史表有两条路径,并且只选择一条

  • RELATEDTABLE需要遵循由SUMX迭代器创建的PRODUCT_调用上从行上下文开始的一对多关系。此公式中的计算仅用于应用用户关系

  • 编辑:为了测试点1,我创建了一个带有三个表的小样本模型

    Date = CALENDAR( "2020-01-01", "2020-01-31" )
    
    Product = 
    DATATABLE( 
        "Name", STRING, "Date", DATETIME, "Quantity", INTEGER,
        {
            { "A", "2020-01-01", 1 },
            { "B", "2020-01-01", 2 }
        }
    )
    
    ProductHistory = 
    DATATABLE(
        "Name", STRING, "Date", DATETIME, "Quantity", INTEGER,
        {
            { "A", "2020-01-02", 10 },
            { "A", "2020-01-03", 20 },
            { "B", "2020-01-01", 30 }
        }
    )
    

    然后我在daxstudio中运行了这个查询,以查看如何使用这些关系

    EVALUATE
    GENERATE(
        ALL( 'Date'[Date] ),
        CALCULATETABLE(
            ProductHistory,
            USERELATIONSHIP ( 'Product'[Name], ProductHistory[Name] )
        )
    )
    
    结果显示“日期”[Date]ProductHistory[Date]关系被忽略

    编辑2:我测试了测量值

    My measure = CALCULATE ( SUM ( PRODUCTHISTORY[QUANTITY] ) , USERELATIONSHIP (PRODUCTHISTORY[NAME], PRODUCT[NAME] )
    
    My measure All =
    CALCULATE (
        SUM ( PRODUCTHISTORY[QUANTITY] ),
        USERELATIONSHIP ( PRODUCTHISTORY[NAME], PRODUCT[NAME] ),
        ALL ( 'Date' )
    )
    
    结果显示,日期过滤器是过滤原始历史的产品

    使用
    ALL('Date')
    创建度量值

    My measure = CALCULATE ( SUM ( PRODUCTHISTORY[QUANTITY] ) , USERELATIONSHIP (PRODUCTHISTORY[NAME], PRODUCT[NAME] )
    
    My measure All =
    CALCULATE (
        SUM ( PRODUCTHISTORY[QUANTITY] ),
        USERELATIONSHIP ( PRODUCTHISTORY[NAME], PRODUCT[NAME] ),
        ALL ( 'Date' )
    )
    
    从日期删除筛选器,但不影响ProductHistory[Name]和Produt[Name]之间的关系


    关于第1点-在我的测试中,它似乎执行了一个关于活动和非活动(但由UserRelationship激活)过滤器的测试。我添加了一个示例,以显示第一个点是如何产生的,所有('Date'[Date])是否都会导致关系被忽略?您可以尝试这样的度量:我的度量=计算(总和(PRODUCTHISTORY[QUANTITY])、UserRelationship(PRODUCTHISTORY[NAME]、PRODUCT[NAME])。然后选择任意日期。您是否可以查看日期是否筛选产品历史表?我进一步扩展了答案。我还将示例pbix添加到我的github中,下载的直接链接是