Excelにインポートする前に、SQL Server接続からデータをフィルターする方法があるかどうかを確認しようとしています。最初のインポートは関係ありません(接続がセットアップされている場合)が、後で開いたときにデータがほとんどまたはまったくなく、パラメーターが選択された後にのみ関連データをインポートする必要があるExcelが必要です。 SQLテーブルには大量のデータが含まれる可能性があり、パフォーマンスが問題になります。
したがって、データをテーブルにインポートする場合、たとえば、Country to be UKにフィルターを適用し、ファイルを閉じて、来週再び開きます。理想的には、クエリを実行してUKのデータのみをインポートする必要があります。また、別の国を選択すると、その国のみのデータがインポートされます。選択肢を表から列挙する必要があります。
現在、テーブルにその機能があるとは思えません。しかし、スライサー、ピボットテーブル、PowerView、PowerPivotはどうでしょうか。
どんなアイデアにも感謝します。
Tables、Powerpivot、Data Explorerでこれを完全に行うことができます。現在のところ、最も簡単で好ましい方法は、パラメーター化されたクエリをExcelで作成することです。これを行うには、Query Wizardを使用し、最後に、渡すパラメーターごとに制約を追加します。これが完了したら、接続プロパティを編集して、返されるパラメーターを静的な値、ダイアログボックス、またはスプレッドシートのセル。
Data>Other Sources>Microsoft Query
。Data Source
を選択し、ここでSQLデータソースを選択します。通常、Finish
ウィンドウが表示されるまで、これらのオプションはすべて空白のままにし、次にView data or edit query in MS Query.
を選択します。Show/Hide Criteria button
をクリックし、[基準]フィールドを選択します。これは、SQLに戻すためにパラメーターを呼び出すものになります。多くの場合、パラメーター化されたクエリからフィードされたテーブルに基づいてピボットテーブルを作成し、自動的に更新される特定の日付範囲(6か月前など)の値を返します。
編集: SQL IN句で使用する複数の値を返すには、MSクエリボックスの[条件]ウィンドウを変更するだけです。たとえば、国のフィールド名がある場合、それを[基準フィールド]で選択し、[値]にIN([First]、[Second]、[Third])と入力します。 Excelにデータを返すを選択すると、MSクエリが手動で値を入力するように求めます。 Excelに戻ったら、パラメーターを再度変更し、スプレッドシート内の3つのセルを指すようにできます。それぞれのセルは、データの検証によって制約されます。このように渡すことができるパラメーターの数にはおそらく制限がありますが、Excelでは3つを簡単に処理できるため、他にいくつか問題がないとは限りません。
VBAを使用してもかまわない場合は、SQLクエリを動的に生成することでこれを簡単に行うことができます。
QlikViewやCrystalほど複雑なものを必要としないアドホックダッシュボードを生成するために、以下のようなものをかなり広範囲に使用しています
例えば。
非表示のシート「変数」には、テーブル「Table_SQL_SALES_EMPLOYEES」が含まれています。これはSQLによって入力され、パラメーターの選択に必要な最小値を返すだけです。 _SELECT DISTINCT AccountDirector FROM InvoicedSales ORDER BY AccountDirector
_のようなもの。
次に、名前付き範囲 'Sales_Employees'があり、その範囲は_=Table_SQL_SALES_EMPLOYEES[AccountDirector]
_として参照しています。これは、入力範囲が「Sales_Employees」に設定されているコンボボックスにマップされます。これにより、選択したリスト内のアイテムの選択したセル(私の場合はE5)に番号が送信されます。元のSQL抽出に従って実際の値を返すには、=OFFSET(Table_SQL_SALES_EMPLOYEES[[#Headers],[AccountDirector]],$E$5,0)
を使用する必要があります。これは「Slp」という名前です。
。:可能なすべてのアカウントディレクターのドロップダウン選択ボックスがあります。会計四半期にはもう1つありますが、同じ原則です。
コンボボックスで選択が変更されると、マクロ '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
_
ハードコーディングされた変数を使用してデータベースに接続することにより、テーブル/ピボットを基本的に事前設定し、「ファイルを開くときにデータを更新する」オプションと「ワークブックを保存する前に外部データ範囲からデータを削除する」オプションを選択します-これにより、ファイルサイズを小さく保つことができます実際には何も保存されません。
フィルターを変更すると、ハードコードされた変数が、選択したパラメーターを使用して動的に生成されたSQLクエリで上書きされ、テーブルが更新されます。