CROSSFILTER
Aplica-se a:Coluna calculadaTabela calculadaMeasureCálculo visual
Especifica a direção de filtragem cruzada a ser usada em um cálculo para uma relação que existe entre duas colunas.
Sintaxe
CROSSFILTER(<columnName1>, <columnName2>, <direction>)
Parâmetros
Vigência | Definição |
---|---|
columnName1 |
O nome de uma coluna existente, usando sintaxe DAX padrão and totalmente qualificado, que geralmente representa os muitos lados da relação a ser usada; if os argumentos forem dados em ordem inversa, a função irá trocá-los antes de usá-los. Este argumento não pode ser uma expressão. |
columnName2 |
O nome de uma coluna existente, usando sintaxe DAX padrão and totalmente qualificada, que geralmente representa o lado or pesquisa da relação a ser usada; if os argumentos forem dados em ordem inversa, a função irá trocá-los antes de usá-los. Este argumento não pode ser uma expressão. |
Direction |
A direção defilter cruzada a ser usada. Deve ser uma das seguintes opções:None - Não ocorre filtragem cruzada ao longo desta relação.Both - Filters de ambos os lados filters do outro lado.OneWay - Filters de um lado or do lado de uma relação filter do outro lado. Esta opção não pode ser usada com uma relação um-para-um . Não use essa opção em um relacionamento muitos-para-muitos porque não está claro qual é o lado da pesquisa; em vez disso, use OneWay_LeftFiltersRight or OneWay_RightFiltersLeft.OneWay_LeftFiltersRight - Filters do lado de columnName1 filter do lado de columnName2 . Esta opção não pode ser usada com uma relação um-para-um or muitos-para-um.OneWay_RightFiltersLeft - Filters do lado de columnName2 filter do lado de columnName1 . Esta opção não pode ser usada com uma relação um-para-um or muitos-para-um. |
Regresso value
A função não retorna nenhum value; A função apenas define a direção de filtragem cruzada para a relação indicada, para o duration da consulta.
Comentários
No caso de uma relação 1:1, não há diferença entre uma and ambas as direções.
CROSSFILTER só pode ser usado em funções que tomam um filter como argumento, por exemplo: CALCULATE, CALCULATETABLE, CLOSINGBALANCEMONTH, CLOSINGBALANCEQUARTER, CLOSINGBALANCEYEAR, OPENINGBALANCEMONTH, OPENINGBALANCEQUARTER, OPENINGBALANCEYEAR, TOTALMTD, TOTALQTDandTOTALYTD funções.
CROSSFILTER usa relações existentes no modelo, identificando relações por suas colunas de ponto final.
Em CROSSFILTER, a configuração de filtragem cruzada de uma relação é not importante; ou seja, se a relação está definida como filter uma, or ambas as direções no modelo not afetam o uso da função. CROSSFILTER substituirá qualquer configuração de filtragem cruzada existente.
Uma error é retornada if qualquer uma das colunas nomeadas como argumento not faz parte de uma relação or os argumentos pertencem a relações diferentes.
If CALCULATE as expressões são aninhadas, and mais de uma expressão CALCULATEcontains uma função CROSSFILTER, então a CROSSFILTER mais interna é a que prevalece em caso de conflito or ambiguidade.
Esta função not é suportada para uso no modo DirectQuery quando usada em colunas calculadas or regras de segurança em nível de linha (RLS).
Exemplo
No diagrama de modelo a seguir, DimProduct and DimDate têm uma relação de direção única com FactInternetSales.
Por padrão, não podemos obter o Count de Produtos vendidos por year:
Existem duas maneiras de obter o count de produtos por year:
Ative a filtragem cruzada bidirecional na relação. Isso mudará a forma como filters funcionam para all dados entre essas duas tabelas.
Use a função CROSSFILTER para alterar como as relações funcionam apenas para este measure.
Ao usar DAX, podemos usar a função CROSSFILTER para alterar como a direção dofilter cruzado se comporta entre duas colunas definidas por uma relação. Neste caso, a expressão DAX tem esta aparência:
BiDi:= CALCULATE([Distinct Count of ProductKey], CROSSFILTER(FactInternetSales[ProductKey], DimProduct[ProductKey] , Both))
Usando a função CROSSFILTER em nossa expressão measure, obtemos os resultados esperados: