USERELATIONSHIP
Aplica-se a:Coluna calculadaTabela calculadaMedidaCálculo visual
Especifica a relação a ser usada em um cálculo específico como aquela que existe entre columnName1 e columnName2.
Sintaxe
USERELATIONSHIP(<columnName1>,<columnName2>)
Parâmetros
Termo | Definição |
---|---|
columnName1 | O nome de uma coluna existente, usando a sintaxe do DAX padrão e totalmente qualificada, que geralmente representa o lado muitos da relação a ser usada; se os argumentos forem especificados na ordem inversa, a função os trocará antes de usá-los. Esse argumento não pode ser uma expressão. |
columnName2 | O nome de uma coluna existente, usando a sintaxe DAX padrão e totalmente qualificada, que geralmente representa o único lado ou o lado de pesquisa da relação a ser usado; se os argumentos forem especificados na ordem inversa, a função os trocará antes de usá-los. Esse argumento não pode ser uma expressão. |
Valor retornado
A função não retornará nenhum valor, mas apenas habilitará a relação indicada durante o cálculo.
Comentários
USERELATIONSHIP só pode ser usado em funções que usam um filtro como argumento, por exemplo: Funções CALCULATE, CALCULATETABLE, CLOSINGBALANCEMONTH, CLOSINGBALANCEQUARTER, CLOSINGBALANCEYEAR, OPENINGBALANCEMONTH, OPENINGBALANCEQUARTER, OPENINGBALANCEYEAR, TOTALMTD, TOTALQTD e TOTALYTD.
USERELATIONSHIP não pode ser usado quando a segurança em nível de linha é definida para a tabela na qual a medida está incluída. Por exemplo,
CALCULATE(SUM([SalesAmount]), USERELATIONSHIP(FactInternetSales[CustomerKey], DimCustomer[CustomerKey]))
retornará um erro se a segurança em nível de linha for definida para DimCustomer.USERELATIONSHIP usa as relações existentes no modelo, identificando as relações pelas colunas de ponto final.
No USERELATIONSHIP, o status de uma relação não é importante; ou seja, o fato da relação estar – ou não – ativa não afeta o uso da função. Mesmo que a relação esteja inativa, ela será usada e substituirá quaisquer outras relações ativas que possam estar presentes no modelo, mas não mencionadas nos argumentos da função.
Um erro será retornado se uma das colunas nomeadas como argumento não fizer parte de uma relação ou se os argumentos pertencerem a relações diferentes.
Se forem necessárias várias relações para unir a tabela A à tabela B em um cálculo, cada relação deverá ser indicada em uma função USERELATIONSHIP diferente.
Se as expressões CALCULATE forem aninhadas e mais de uma expressão CALCULATE contiver uma função USERELATIONSHIP, então a USERELATIONSHIP mais interna será aquela que prevalecerá em caso de conflito ou ambiguidade.
Até 10 funções USERELATIONSHIP podem ser aninhadas. No entanto, sua expressão pode ter um nível mais profundo de aninhamento, ou seja, a seguinte expressão de exemplo é aninhada em três níveis de profundidade, mas somente em dois para USEREALTIONSHIP:
=CALCULATE(CALCULATE( CALCULATE( <anyExpression>, USERELATIONSHIP( t1[colA], t2[colB])), t99[colZ]=999), USERELATIONSHIP( t1[colA], t2[colA]))
.Para relações de 1 a 1, USERELATIONSHIP ativará apenas a relação em uma direção. Em particular, os filtros só poderão fluir da tabela columnName2 para a tabela columnName1. Se a filtragem cruzada bi-direcional for desejada, duas funções USERELATIONSHIP com direcionalidades opostas poderão ser usadas no mesmo cálculo. Por exemplo,
CALCULATE(..., USERELATIONSHIP(T1[K], T2[K]), USERELATIONSHIP(T2[K], T1[K]))
.
Exemplo
O exemplo a seguir mostra como substituir a relação padrão ativa existente entre as tabelas InternetSales e DateTime. Existe uma relação padrão entre a coluna OrderDate, da tabela InternetSales e a coluna Date, na tabela DateTime.
Para calcular a soma das vendas pela Internet e permitir a segmentação por ShippingDate em vez da tradicional OrderDate, crie uma medida, [InternetSales by ShippingDate], usando a seguinte expressão:
= CALCULATE(SUM(InternetSales[SalesAmount]), USERELATIONSHIP(InternetSales[ShippingDate], DateTime[Date]))
As relações entre InternetSales[ShipmentDate] e DateTime[date] devem existir e não devem ser a relação ativa. Além disso, a relação entre InternetSales[OrderDate] e DateTime[Date] deve existir e ser a relação ativa.