Tự động lọc dữ liệu trước khi nhập từ SQL Server trong Excel


7

Tôi đang cố gắng tìm hiểu xem có cách nào để lọc dữ liệu từ kết nối Máy chủ SQL hay không trước khi được nhập vào Excel. Việc nhập ban đầu không thành vấn đề (khi kết nối được thiết lập), nhưng tôi cần Excel có ít hoặc không có dữ liệu khi được mở sau đó và chỉ nhập dữ liệu có liên quan sau khi chọn tham số. Các bảng SQL có thể có nhiều dữ liệu và hiệu suất là một vấn đề.

Vì vậy, nếu tôi nhập dữ liệu vào một bảng, hãy áp dụng bộ lọc cho, ví dụ: Quốc gia là Vương quốc Anh, đóng tệp và mở lại vào tuần tới, lý tưởng là chỉ nên truy vấn và nhập dữ liệu cho Vương quốc Anh. Và khi tôi chọn một quốc gia khác, chỉ nên nhập dữ liệu cho quốc gia đó. Tôi cần các lựa chọn để được liệt kê từ bảng.

Bây giờ, tôi không tin các bảng có khả năng đó. Nhưng làm thế nào về Máy cắt, PivotTable, PowerView hoặc PowerP Pivot?

Đánh giá cao bất kỳ ý tưởng.

Câu trả lời:


8

Bạn hoàn toàn có thể làm điều này với Bảng, cũng như PowerpOLL và Data Explorer. Cách dễ nhất và phương pháp ưa thích của tôi hiện tại là tạo một truy vấn được tham số hóa trong Excel. Để thực hiện việc này, hãy sử dụng Trình hướng dẫn truy vấn và cuối cùng thêm các ràng buộc cho từng tham số bạn muốn vượt qua. Khi điều này được thực hiện, bạn có thể chỉnh sửa Thuộc tính kết nối và gán Tham số được trả về dưới dạng giá trị tĩnh, hộp thoại hoặc ô bảng tính.

  1. Chọn nguồn dữ liệu của bạn bằng MS Query - điều này là bắt buộc để có thể chuyển các tham số trở lại SQL; Data>Other Sources>Microsoft Query.
  2. Chọn Data Source, chọn nguồn dữ liệu SQL của bạn ở đây. Nói chung tôi sẽ để trống tất cả các tùy chọn này cho đến khi tôi đến Finishcửa sổ, sau đó tôi sẽ chọnView data or edit query in MS Query.
    • Lưu ý: Tôi thường xử lý trước thông tin tôi muốn từ SQL vào một chế độ xem duy nhất mà tôi có thể kết nối ở đây, nhưng bạn thường có thể chuyển bất kỳ câu lệnh chọn nào. Tôi chưa thử gọi Thủ tục lưu trữ, vì vậy tôi không chắc nó sẽ hoạt động như thế nào.
  3. Trong Cửa sổ Truy vấn MS, bấm vào Show/Hide Criteria buttonvà chọn trường Tiêu chí. Đây sẽ là những gì gọi các tham số của bạn để quay trở lại SQL.
    • Ví dụ: Nếu bạn có trường ngày và chọn nó trong trường Tiêu chí, sau đó thêm Giá trị giữa [bắt đầu] và [kết thúc]. Điều này sẽ tạo một tham số và MS Query sẽ yêu cầu bạn điền cả hai giá trị và trả về ngay bộ dữ liệu phù hợp. Nếu bạn kiểm tra câu lệnh SQL mà nó đã tạo, nó sẽ thêm mệnh đề WHERE (dataource.date giữa? Và?).
  4. Chọn Tệp> Trả lại Dữ liệu vào Excel, rồi Chọn Bảng.
  5. Để bảng tự động kéo tham số truy vấn của bạn, chọn một ô trong bảng của bạn, đi đến Dữ liệu> Thuộc tính> Thuộc tính kết nối> Định nghĩa> Tham số.
  6. Đối với mỗi tham số, bạn có thể chọn cho nó để
    1. Nhắc bạn để cung cấp một giá trị; hoặc là
    2. Sử dụng một giá trị cụ thể; hoặc là
    3. Nhận giá trị từ một ô bảng tính, với tùy chọn tự động cập nhật dữ liệu bảng của bạn bất cứ khi nào giá trị ô đó thay đổi.
      • Là một tùy chọn bổ sung, bạn có thể sử dụng Xác thực dữ liệu trên ô bạn chọn cho tham số của mình, cho phép bạn giới hạn các giá trị có thể chọn. Bạn thậm chí có thể có các ô xác thực đến từ một bảng được cung cấp từ các giá trị từ cơ sở dữ liệu của bạn, đảm bảo rằng chỉ các giá trị được giữ trong cơ sở dữ liệu có thể được chọn.
  7. Đặt giá trị paramater của bạn cho từng tham số và nhấp OK thông qua tất cả các hộp thoại.
  8. Cuối cùng, để giảm thiểu kích thước tệp, trong tab Thuộc tính kết nối> Sử dụng, bạn có thể chọn Làm mới dữ liệu khi mở tệp và Xóa dữ liệu khỏi phạm vi bên ngoài trước khi lưu sổ làm việc. Điều này sẽ kết xuất dữ liệu được kết nối khi tệp không được sử dụng tích cực, giảm thiểu kích thước tệp.

Tôi sẽ thường tạo Bảng Pivot dựa trên Bảng được cung cấp từ truy vấn được tối ưu hóa để trả về các giá trị cho các phạm vi ngày cụ thể được cập nhật tự động (ví dụ: 6 tháng trước).

EDIT: Để trả về nhiều giá trị để sử dụng trong mệnh đề SQL IN, bạn chỉ cần sửa đổi cửa sổ Tiêu chí trong hộp Truy vấn MS. Ví dụ: nếu bạn có tên trường của Quốc gia, hãy chọn nó trong Trường Tiêu chí, sau đó cho Giá trị nhập IN ([Đầu tiên], [Thứ hai], [Thứ ba]). Chọn Trả về dữ liệu cho Excel và MS Query sẽ yêu cầu nhập các giá trị thủ công. Khi bạn quay lại Excel, bạn có thể sửa đổi lại các tham số và trỏ chúng vào ba ô trong bảng tính của bạn, mỗi ô có thể bị ràng buộc bởi Xác thực dữ liệu. Mặc dù có thể có giới hạn về số lượng tham số bạn có thể vượt qua như thế này, Excel dễ dàng xử lý ba tham số, do đó, một số ít có thể không nằm ngoài câu hỏi.


2
chỉ cần trả lời câu hỏi nhỏ của riêng bạn, chắc chắn có thể sử dụng các thủ tục được lưu trữ. Điều chính cần lưu ý là người dùng mà bạn đang xác thực phải có quyền thực thi quyền đó ở cấp độ SQL Server.
James

Chào David. Tôi đã (và siêng năng) tìm ra một số điều này nhưng nó rất hữu ích, cảm ơn. Điều xác thực dữ liệu là hoàn hảo cho một tham số đơn giản. Nhưng tôi cần có khả năng chọn nhiều tham số (ví dụ nhiều quốc gia). ListBox dường như là lựa chọn dễ dàng nhất, nhưng sau đó tôi không thể đưa các mục đã chọn vào một ô ở định dạng phân tách hôn mê để được sử dụng làm tham số truy vấn SQL (ví dụ WHERE Country IN (?)).
Griffin

Bạn có một số lượng cụ thể của các tham số trong tâm trí? Ngoài ra, chúng giống nhau hay chúng khác nhau? Tôi thường xuyên sử dụng, sử dụng Giữa? và?, nhưng chúng ta cũng có thể tìm ra một cái gì đó cho một In.
dav

Xem các chỉnh sửa dựa trên việc thêm ngôn ngữ cho mệnh đề IN. Không cần phải vượt qua một chuỗi được phân cách bằng dấu phẩy, chỉ cần thêm các giá trị riêng lẻ để được ước tính.
dav

1

Nếu bạn không phiền khi sử dụng VBA thì cách 'nhẹ' để thực hiện điều này là bằng cách tự động tạo truy vấn SQL.

Tôi sử dụng một cái gì đó tương tự như dưới đây khá nhiều để tạo bảng điều khiển đặc biệt không cần bất cứ thứ gì phức tạp như QlikView hoặc Crystal

Ví dụ

Bảng ẩn 'Các biến' chứa một bảng 'Table_Query_SALES_EMPLOYEES'. Điều này được SQL đưa ra để chỉ trả về mức tối thiểu cần thiết cho lựa chọn param. Một cái gì đó như SELECT DISTINCT AccountDirector FROM InvoicedSales ORDER BY AccountDirector.

Sau đó, tôi có một phạm vi được đặt tên 'Sales_Emprocod' mà nó tham chiếu là =Table_SQL_SALES_EMPLOYEES[AccountDirector]. Điều này được ánh xạ tới hộp tổ hợp, có Phạm vi đầu vào được đặt thành 'Sales_Emp viên'. Điều này sẽ gửi một số đến một ô bạn chọn (E5 trong trường hợp của tôi) của mục trong danh sách đã chọn. Để trả về giá trị thực theo trích xuất SQL gốc, bạn cần sử dụng =OFFSET(Table_SQL_SALES_EMPLOYEES[[#Headers],[AccountDirector]],$E$5,0). Cái này được đặt tên là 'Slp'.

.: Bây giờ chúng tôi có một hộp lựa chọn thả xuống của tất cả các giám đốc tài khoản có thể. Cũng có một số khác cho quý tài chính, nhưng cùng một nguyên tắc :.

Khi lựa chọn được thay đổi trong hộp tổ hợp, nó sẽ gọi macro 'changeFilter ()'

Sub changeFilter()
    Dim wb As Workbook
    Set wb = Excel.ActiveWorkbook
    Dim ws As Worksheet
    Set ws = Excel.ActiveWorkbook.Sheets("Lookups")
    Dim conn As Excel.WorkbookConnection
    Dim slp As Name
    Set slp = wb.Names("Slp")
    Dim qtr As Integer
    qtr = wb.Names("qtr").RefersToRange.Value2
    Dim query As String

    ' Adjusted Sales Consolidated
    Set conn = wb.Connections("SQL_ADJUSTEDSALES_CONSOLIDATED")
    query = "SELECT * FROM InvoicedSales WHERE AccountDirector=" & "'" & slp.RefersToRange.Value2 & "'"
    conn.OLEDBConnection.CommandText = query
    conn.Refresh

Về cơ bản, tôi định cấu hình trước các bảng / pivots bằng cách nối chúng với cơ sở dữ liệu với các biến được mã hóa cứng và chọn các tùy chọn 'Làm mới dữ liệu khi mở tệp' và 'Xóa dữ liệu khỏi phạm vi dữ liệu ngoài trước khi lưu sổ làm việc' - điều này giữ cho các tệp nhỏ như không có gì thực sự được cứu.

Sau đó, bộ lọc thay đổi ghi đè biến mã hóa cứng bằng truy vấn SQL được tạo động bằng cách sử dụng tham số đã chọn và sau đó làm mới bảng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.