Phần này mô tả cách tạo bộ lọc trong công thức Biểu thức Phân tích Dữ liệu (DAX). Bạn có thể tạo bộ lọc bên trong công thức để hạn chế giá trị khỏi dữ liệu nguồn được sử dụng trong tính toán. Bạn thực hiện điều này bằng cách chỉ định bảng làm dữ liệu đầu vào cho công thức, rồi xác định biểu thức lọc. Biểu thức bộ lọc bạn cung cấp được dùng để truy vấn dữ liệu và chỉ trả về tập hợp con của dữ liệu nguồn. Bộ lọc được áp dụng tự động mỗi lần bạn cập nhật kết quả của công thức, tùy thuộc vào ngữ cảnh hiện tại của dữ liệu.
Trong bài viết này
Tạo Bộ lọc trên Bảng được dùng trong Công thức
Bạn có thể áp dụng bộ lọc trong các công thức lấy bảng làm dữ liệu đầu vào. Thay vì nhập tên bảng, bạn sử dụng hàm FILTER để xác định một tập hợp con các hàng từ bảng đã xác định. Tập hợp con đó sau đó được chuyển đến một hàm khác, cho các phép toán như tổng hợp tùy chỉnh.
Ví dụ: giả sử bạn có một bảng dữ liệu chứa thông tin đơn hàng về người bán lại và bạn muốn tính toán số lượng từng nhà bán lại đã bán. Tuy nhiên, bạn muốn hiển thị doanh số chỉ dành cho những người bán lại đã bán nhiều đơn vị sản phẩm có giá trị cao hơn của bạn. Công thức sau đây, dựa trên sổ làm việc mẫu DAX, hiển thị một ví dụ về cách bạn có thể tạo phép tính này bằng cách sử dụng bộ lọc:
=SUMX(
FILTER ('ResellerSales_USD', 'ResellerSales_USD'[Số lượng] > 5 && 'ResellerSales_USD'[ProductStandardCost_USD] > 100), 'ResellerSales_USD'[SalesAmt] )-
Phần đầu tiên của công thức xác định một trong các Power Pivot tổng hợp, vốn nhận một bảng làm đối số. Hàm SUMX tính tổng trên một bảng.
-
Phần thứ hai của công thức, bạn FILTER(table, expression),cho biết SUMX nên dùng dữ liệu nào. SUMX yêu cầu bảng hoặc biểu thức dẫn đến bảng. Ở đây, thay vì sử dụng tất cả dữ liệu trong bảng, bạn sử dụng hàm FILTER để chỉ định hàng nào từ bảng được sử dụng.
Biểu thức bộ lọc có hai phần: phần đầu tiên đặt tên bảng mà bộ lọc áp dụng. Phần thứ hai xác định một biểu thức để sử dụng làm điều kiện lọc. Trong trường hợp này, bạn đang lọc trên các đại lý đã bán được hơn 5 đơn vị và các sản phẩm có giá hơn $ 100. Toán tử, &&, là một toán tử AND lô-gic, cho biết cả hai phần của điều kiện phải đúng đối với hàng thuộc về tập hợp con đã lọc.
-
Phần thứ ba của công thức cho biết SUMX hàm nào cần tính tổng các giá trị. Trong trường hợp này, bạn đang sử dụng chỉ số tiền bán hàng.
Lưu ý rằng các hàm như FILTER, trả về bảng, không bao giờ trả về bảng hoặc hàng trực tiếp, nhưng luôn được nhúng vào một hàm khác. Để biết thêm thông tin về FILTER và các hàm khác được sử dụng để lọc, bao gồm các ví dụ khác, hãy xem Hàm Lọc (DAX).
Lưu ý: Biểu thức bộ lọc bị ảnh hưởng bởi ngữ cảnh mà biểu thức bộ lọc được sử dụng. Ví dụ, nếu bạn sử dụng bộ lọc trong một thước đo và số đo được dùng trong PivotTable hoặc PivotChart, tập dữ liệu con được trả về có thể bị ảnh hưởng bởi các bộ lọc bổ sung hoặc Slicer mà người dùng đã áp dụng trong PivotTable. Để biết thêm thông tin về ngữ cảnh, hãy xem Ngữ cảnh trong Công thức DAX.
Bộ lọc Loại bỏ Trùng lặp
Ngoài việc lọc các giá trị cụ thể, bạn có thể trả về một tập hợp giá trị duy nhất từ một bảng hoặc cột khác. Điều này có thể hữu ích khi bạn muốn đếm số lượng giá trị duy nhất trong một cột hoặc sử dụng danh sách các giá trị duy nhất cho các phép toán khác. DAX cung cấp hai hàm để trả về các giá trị riêng biệt: Hàm DISTINCT vàHàm VALUES.
-
Hàm DISTINCT kiểm tra một cột đơn mà bạn chỉ định làm đối số cho hàm và trả về một cột mới chỉ chứa các giá trị riêng biệt.
-
Hàm VALUES cũng trả về một danh sách các giá trị duy nhất nhưng cũng trả về phần tử Không xác định. Điều này rất hữu ích khi bạn sử dụng các giá trị từ hai bảng được nối bằng một mối quan hệ và thiếu một giá trị trong một bảng và hiện diện trong bảng kia. Để biết thêm thông tin về thành viên Không xác định, hãy xem Ngữ cảnh trong Công thức DAX.
Cả hai hàm này đều trả về toàn bộ một cột giá trị; do đó, bạn sử dụng các hàm để có được danh sách các giá trị sau đó được truyền đến một hàm khác. Ví dụ: bạn có thể sử dụng công thức sau đây để có được danh sách các sản phẩm riêng biệt được bán bởi một người bán lại cụ thể, sử dụng khóa sản phẩm duy nhất, rồi đếm các sản phẩm trong danh sách đó bằng cách sử dụng hàm COUNTROWS:
=COUNTROWS(DISTINCT('ResellerSales_USD'[ProductKey]))
Ngữ cảnh ảnh hưởng đến Bộ lọc như thế nào
Khi bạn thêm công thức DAX vào PivotTable hoặc PivotChart, kết quả của công thức có thể bị ảnh hưởng bởi ngữ cảnh. Nếu bạn đang làm việc trong bảng Power Pivot, ngữ cảnh sẽ là hàng hiện tại và các giá trị của hàng đó. Nếu bạn đang làm việc trong PivotTable hoặc PivotChart, ngữ cảnh có nghĩa là tập hợp hoặc tập hợp con dữ liệu được xác định bởi các thao tác như chéo hoặc lọc. Thiết kế của PivotTable hoặc PivotChart cũng áp đặt ngữ cảnh riêng của nó. Ví dụ: nếu bạn tạo PivotTable để nhóm doanh số theo khu vực và năm, thì chỉ dữ liệu áp dụng cho những vùng và năm đó mới xuất hiện trong PivotTable. Do đó, mọi số đo mà bạn thêm vào PivotTable đều được tính toán theo ngữ cảnh của đầu đề cột và hàng cùng với bất kỳ bộ lọc nào trong công thức đo lường.
Để biết thêm thông tin, hãy xem Ngữ cảnh trong Công thức DAX.
Loại bỏ Bộ lọc
Khi làm việc với các công thức phức tạp, bạn có thể muốn biết chính xác bộ lọc hiện tại là gì hoặc bạn có thể muốn sửa đổi một phần bộ lọc của công thức. DAX cung cấp một số hàm cho phép bạn loại bỏ bộ lọc và để kiểm soát những cột nào được giữ lại như một phần của ngữ cảnh bộ lọc hiện tại. Phần này cung cấp thông tin tổng quan về ảnh hưởng của các hàm này đối với kết quả trong công thức.
Ghi đè Tất cả bộ lọc bằng Hàm ALL
Bạn có thể sử dụng hàm ALL để ghi đè lên bất kỳ bộ lọc nào đã được áp dụng trước đó và trả tất cả các hàng trong bảng về hàm đang thực hiện phép toán tổng hợp hoặc thao tác khác. Nếu bạn sử dụng một hoặc nhiều cột, thay vì một bảng, làm đối số cho ALL, hàm ALL sẽ trả về tất cả các hàng, bỏ qua mọi bộ lọc ngữ cảnh.
Lưu ý: Nếu bạn quen thuộc với thuật ngữ cơ sở dữ liệu quan hệ, bạn có thể nghĩ ALL như tạo ra nối ngoài tự nhiên bên trái của tất cả các bảng.
Ví dụ: giả sử bạn có các bảng, Doanh số và Sản phẩm và bạn muốn tạo công thức để tính tổng doanh thu cho sản phẩm hiện tại chia cho doanh số cho tất cả các sản phẩm. Bạn phải cân nhắc thực tế rằng, nếu công thức được sử dụng theo đơn vị đo, thì người dùng PivotTable có thể đang sử dụng Slicer để lọc một sản phẩm cụ thể, với tên sản phẩm trên các hàng. Do đó, để có được giá trị thực sự của mẫu số, bất kể bất kỳ bộ lọc hay Slicer nào, bạn phải thêm hàm ALL để ghi đè lên bất kỳ bộ lọc nào. Công thức sau đây là một ví dụ về cách sử dụng ALL để ghi đè hiệu ứng của các bộ lọc trước đó:
=SUM (Sales[Amount])/SUMX(Sales[Amount], FILTER(Sales, ALL(Products)))
-
Phần đầu tiên của công thức, SUM (Sales[Amount]), tính toán tử số.
-
Tổng sẽ tính đến ngữ cảnh hiện tại, nghĩa là nếu bạn thêm công thức vào cột được tính, ngữ cảnh hàng sẽ được áp dụng và nếu bạn thêm công thức vào PivotTable làm số đo, mọi bộ lọc được áp dụng trong PivotTable (ngữ cảnh bộ lọc) đều được áp dụng.
-
Phần thứ hai của công thức, tính toán mẫu số. Hàm ALL sẽ ghi đè mọi bộ lọc có thể được áp dụng cho Products bảng.
Để biết thêm thông tin, bao gồm các ví dụ chi tiết, hãy xem Hàm ALL.
Ghi đè bộ lọc cụ thể bằng Hàm ALLEXCEPT
Hàm ALLEXCEPT cũng ghi đè lên các bộ lọc hiện có, nhưng bạn có thể chỉ định rằng một số bộ lọc hiện có cần được bảo toàn. Các cột mà bạn đặt tên làm đối số cho hàm ALLEXCEPT xác định cột nào sẽ tiếp tục được lọc. Nếu bạn muốn ghi đè bộ lọc từ hầu hết các cột nhưng không phải tất cả, ALLEXCEPT là thuận tiện hơn TẤT CẢ. Hàm ALLEXCEPT đặc biệt hữu ích khi bạn tạo PivotTable có thể được lọc trên nhiều cột khác nhau và bạn muốn kiểm soát các giá trị được sử dụng trong công thức. Để biết thêm thông tin, bao gồm ví dụ chi tiết về cách sử dụng hàm ALLEXCEPT trong PivotTable, hãy xem Hàm ALLEXCEPT.