- Создатель Эдуард Столяр, отредактировано окт. 28, 2022
Вы просматриваете старую версию данной страницы. Смотрите текущую версию.
Сравнить с текущим просмотр истории страницы
« Предыдущий Версия 2 Следующий »
Функция фильтрации.
Синтаксис
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 ] ] } ] }
Статьи по теме
На этой странице
🕑 Время чтения: 3 мин.
Видео
Нужна дополнительная помощь?
Свяжитесь с технической поддержкой.
Или нажмите в приложении, чтобы задать вопрос.
- Нет меток