Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Функция фильтрации.

Синтаксис

FILTER ( <Table>, <FilterExpression> )

Предупреждение

Поддерживается IN и AND.

IN поддерживает работу на схеме звезда в случае использования с SUMMARIZECOLUMNS (см. пример ниже).

Не поддерживается вложенность.

IN поддерживает только строки: FILTER ( 'Sales', 'Sales'[ProductCategory] IN { "Audio", "Computers" } ).

AND поддерживает следующие операции сравнения >, <, >=, <=, =, <>. Поддерживается работа с числами FILTER (Sales, AND(Sales[SalesQuantity] <> 150, Sales[SalesAmount] > 1500)) и DATE.

Поддерживается работа только с CALCULATE и SUMMARIZECOLUMNS

Примеры

Предупреждение

Разница в работе PowerBI и FormulaEngine

С моделью данных можно ознакомиться по ссылке pbix

Блок кода
EVALUATE
SUMMARIZECOLUMNS (
    'dimproduct'[classname],
    'dimcustomer'[gender],
    FILTER ( 'dimcustomer', 'dimcustomer'[gender] IN { "M" } ),
    FILTER ( 'dimproduct', 'dimproduct'[classname] IN { "Econom" } ),
    FILTER (
        'factonlinesales',
        AND ( 'factonlinesales'[unitprice] > 50, 'factonlinesales'[unitprice] < 200 )
    ),
    "Result",
        CALCULATE (
            SUM ( 'factonlinesales'[unitprice] ),
            REMOVEFILTERS ( 'dimcustomer' )
        )
)

Результат PowerBI DAX:

classname

gender

Result

«Econom»

«M»

100

Результат FormulaEngine DAX:

classname

gender

Result

«Econom»

«M»

200

Результат FormulaEngine DAX идентичен результату PowerBI DAX в случае использования FILTER в совокупности с функцией VALUES (см. пример ниже).

Блок кода
EVALUATE
SUMMARIZECOLUMNS (
    'dimproduct'[classname],
    'dimcustomer'[gender],
    FILTER ( 'dimcustomer', 'dimcustomer'[gender] IN { "M" } ),
    FILTER ( 'dimproduct', 'dimproduct'[classname] IN { "Econom" } ),
    FILTER (
        VALUES ( 'factonlinesales'[unitprice] ), // обратите внимание
        AND (
            'factonlinesales'[unitprice] > 50,
            'factonlinesales'[unitprice] < 200
        )
    ),
    "Result",
        CALCULATE (
            SUM ( 'factonlinesales'[unitprice] ),
            REMOVEFILTERS ( 'dimcustomer' )
        )
)

Данное поведение в будущем может поменяться с появлением функции VALUES и TREATAS.

Пример работы на денормализованной таблице:

Блок кода
 EVALUATE
 SUMMARIZECOLUMNS (
     'Sales'[BrandName],
     'Sales'[Calendar Year],
     FILTER ( 'Sales', 'Sales'[Calendar Year] IN { "2012" } ),
     FILTER ( 'Sales', 'Sales'[ProductCategory] IN { "Audio" } ),
     FILTER ('Sales', AND(Sales[SalesQuantity] <> 150, Sales[SalesAmount] > 1500)),
     "Amount", SUM ( Sales[SalesAmount])
)
Блок кода
"results": [
    {
        "cols": [
            {
                "field": "BrandName",
                "dataType": "String"
            },
            {
                "field": "Calendar Year",
                "dataType": "String"
            },
            {
                "field": "Amount",
                "dataType": "Double"
            }
        ],
        "values": [
            [
                "Contoso",
                "2012",
                14949935
            ],
            [
                "Northwind Traders",
                "2012",
                1610125
            ],
            [
                "Wide World Importers",
                "2012",
                18429107
            ]
        ]
    }
]

Пример работы на схеме звезда:

Блок кода
EVALUATE
SUMMARIZECOLUMNS (
   dimproduct[colorname],
   dimcustomer[gender],
   FILTER ( dimproduct, dimproduct[colorname] IN { "Azure" } ),
   "result", SUM ( factonlinesales[salesamount] )
)
Блок кода
"results":[
   {
      "cols":[
         {
            "field":"colorname",
            "dataType":"String"
         },
         {
            "field":"gender",
            "dataType":"String"
         },
         {
            "field":"result",
            "dataType":"Double"
         }
      ],
      "values":[
         [
            "Azure",
            null,
            78083.037
         ],
         [
            "Azure",
            "F",
            1417.615
         ],
         [
            "Azure",
            "M",
            540.14
         ]
      ]
   }
]

Использование функции FILTER для лимитирования:

Блок кода
DEFINE
    VAR GeneralGroupBy =
        SUMMARIZECOLUMNS (
            'Sales'[ProductCategory],
            'Sales'[ProductSubcategory],
            'Sales'[BrandName],
            "cost", SUM ( 'Sales'[SalesAmount] )
        )
    VAR GroupByCategorySubcatory =
        SUMMARIZE (
            GeneralGroupBy,
            'Sales'[ProductCategory],
            'Sales'[ProductSubcategory]
        )
    VAR TopByCategorySubcatory =
        TOPN (
            5,
            GroupByCategorySubcatory,
            'Sales'[ProductCategory], ASC,
            'Sales'[ProductSubcategory], ASC
        )
    VAR GroupByBrand =
        SUMMARIZE ( GeneralGroupBy, 'Sales'[BrandName] )
    VAR TopByBrand =
        TOPN ( 5, GroupByBrand, 'Sales'[BrandName], ASC )

    EVALUATE
    TopByCategorySubcatory
    ORDER BY 'Sales'[ProductCategory] ASC

    EVALUATE
    FILTER (
        GeneralGroupBy,
        AND (
            ( 'Sales'[ProductCategory], 'Sales'[ProductSubcategory] )
                IN TopByCategorySubcatory,
            ( 'Sales'[BrandName] ) IN TopByBrand
        )
    )
Блок кода
{
    "results": [
        {
            "cols": [
                {
                    "field": "ProductCategory",
                    "dataType": "String"
                },
                {
                    "field": "ProductSubcategory",
                    "dataType": "String"
                }
            ],
            "values": [
                [
                    "Audio",
                    "Bluetooth Headphones"
                ],
                [
                    "Audio",
                    "MP4&MP3"
                ],
                [
                    "Audio",
                    "Recording Pen"
                ],
                [
                    "Cameras and camcorders",
                    "Camcorders"
                ],
                [
                    "Cameras and camcorders",
                    "Cameras & Camcorders Accessories"
                ]
            ]
        },
        {
            "cols": [
                {
                    "field": "ProductCategory",
                    "dataType": "String"
                },
                {
                    "field": "ProductSubcategory",
                    "dataType": "String"
                },
                {
                    "field": "BrandName",
                    "dataType": "String"
                },
                {
                    "field": "cost",
                    "dataType": "Double"
                }
            ],
            "values": [
                [
                    "Audio",
                    "MP4&MP3",
                    "Contoso",
                    65168188
                ],
                [
                    "Cameras and camcorders",
                    "Cameras & Camcorders Accessories",
                    "Contoso",
                    51599808
                ],
                [
                    "Cameras and camcorders",
                    "Camcorders",
                    "Fabrikam",
                    1335285231
                ]
            ]
        }
    ]
}

Статьи по темеСмотрите также

📄 ссылка Поддерживаемые функции DAX
📄 ссылка
📄 ссылка Математические операторы

На этой странице

Оглавление

🕑 Время чтения: 3 мин.


Видео


Нужна дополнительная помощь?

Свяжитесь с технической поддержкой.
Или нажмите (синяя звезда) в приложении, чтобы задать вопрос.