Pengantar ARIMA: model nonseasonal Persamaan peramalan ARIMA (p, d, q): Model ARIMA adalah, secara teori, kelas model paling umum untuk meramalkan deret waktu yang dapat dibuat menjadi 8220stationary8221 dengan membedakan (jika perlu), mungkin Dalam hubungannya dengan transformasi nonlinier seperti logging atau deflating (jika perlu). Variabel acak yang merupakan deret waktu bersifat stasioner jika sifat statistiknya konstan sepanjang waktu. Seri stasioner tidak memiliki tren, variasinya berkisar rata-rata memiliki amplitudo konstan, dan bergoyang secara konsisten. Yaitu pola waktu acak jangka pendeknya selalu terlihat sama dalam arti statistik. Kondisi terakhir ini berarti autokorelasinya (korelasi dengan penyimpangannya sendiri dari mean) tetap konstan dari waktu ke waktu, atau ekuivalen, bahwa spektrum kekuatannya tetap konstan seiring berjalannya waktu. Variabel acak dari bentuk ini dapat dilihat (seperti biasa) sebagai kombinasi antara sinyal dan noise, dan sinyal (jika ada) dapat menjadi pola pengembalian cepat atau lambat, atau osilasi sinusoidal, atau alternasi cepat pada tanda , Dan itu juga bisa memiliki komponen musiman. Model ARIMA dapat dilihat sebagai model 8220filter8221 yang mencoba memisahkan sinyal dari noise, dan sinyal tersebut kemudian diekstrapolasikan ke masa depan untuk mendapatkan perkiraan. Persamaan peramalan ARIMA untuk rangkaian waktu stasioner adalah persamaan linier (yaitu regresi-tipe) dimana prediktor terdiri dari kelambatan variabel dependen dan atau lag dari kesalahan perkiraan. Yaitu: Prediksi nilai Y adalah konstanta dan atau jumlah tertimbang dari satu atau lebih nilai Y dan satu angka tertimbang dari satu atau lebih nilai kesalahan terkini. Jika prediktor hanya terdiri dari nilai Y yang tertinggal, itu adalah model autoregresif murni (8220 self-regressed8221), yang hanyalah kasus khusus dari model regresi dan yang dapat dilengkapi dengan perangkat lunak regresi standar. Sebagai contoh, model autoregresif orde pertama (8220AR (1) 8221) untuk Y adalah model regresi sederhana dimana variabel independennya hanya Y yang tertinggal satu periode (LAG (Y, 1) dalam Statgrafik atau YLAG1 dalam RegresIt). Jika beberapa prediktor tertinggal dari kesalahan, model ARIMA TIDAK merupakan model regresi linier, karena tidak ada cara untuk menentukan error8221 8220last periodier178 sebagai variabel independen: kesalahan harus dihitung berdasarkan periode-ke-periode Saat model dipasang pada data. Dari sudut pandang teknis, masalah dengan menggunakan kesalahan tertinggal sebagai prediktor adalah bahwa prediksi model8217 bukanlah fungsi linear dari koefisien. Meskipun mereka adalah fungsi linier dari data masa lalu. Jadi, koefisien pada model ARIMA yang mencakup kesalahan tertinggal harus diestimasi dengan metode optimasi nonlinier (8220 climb-climbing8221) daripada hanya dengan memecahkan sistem persamaan. Akronim ARIMA adalah singkatan Auto-Regressive Integrated Moving Average. Lags dari rangkaian stasioner dalam persamaan peramalan disebut istilah quotautoregressivequot, kelambatan kesalahan perkiraan disebut istilah kuotasi rata-rata quotmoving average, dan deret waktu yang perlu dibedakan untuk dijadikan stasioner disebut versi seri integimental dari seri stasioner. Model random-walk dan random-trend, model autoregresif, dan model pemulusan eksponensial adalah kasus khusus model ARIMA. Model ARIMA nonseasonal diklasifikasikan sebagai model quotARIMA (p, d, q) quot, di mana: p adalah jumlah istilah autoregresif, d adalah jumlah perbedaan nonseasonal yang diperlukan untuk stasioneritas, dan q adalah jumlah kesalahan perkiraan yang tertinggal dalam Persamaan prediksi Persamaan peramalan dibangun sebagai berikut. Pertama, izinkan y menunjukkan perbedaan D dari Y. yang berarti: Perhatikan bahwa perbedaan kedua Y (kasus d2) bukanlah selisih 2 periode yang lalu. Sebaliknya, ini adalah perbedaan pertama-perbedaan-dari-pertama. Yang merupakan analog diskrit turunan kedua, yaitu akselerasi lokal dari seri daripada tren lokalnya. Dalam hal y. Persamaan peramalan umum adalah: Disini parameter rata-rata bergerak (9528217s) didefinisikan sehingga tanda-tanda mereka negatif dalam persamaan, mengikuti konvensi yang diperkenalkan oleh Box dan Jenkins. Beberapa penulis dan perangkat lunak (termasuk bahasa pemrograman R) mendefinisikannya sehingga mereka memiliki tanda plus. Bila nomor aktual dicolokkan ke dalam persamaan, tidak ada ambiguitas, tapi penting untuk mengetahui konvensi mana yang digunakan perangkat lunak Anda saat Anda membaca hasilnya. Seringkali parameter dilambangkan dengan AR (1), AR (2), 8230, dan MA (1), MA (2), 8230 dll. Untuk mengidentifikasi model ARIMA yang sesuai untuk Y. Anda memulai dengan menentukan urutan differencing (D) perlu membuat stasioner seri dan menghilangkan fitur musiman musiman, mungkin bersamaan dengan transformasi yang menstabilkan varians seperti penebangan atau pengapuran. Jika Anda berhenti pada titik ini dan meramalkan bahwa rangkaian yang berbeda adalah konstan, Anda hanya memiliki model acak berjalan atau acak acak. Namun, rangkaian stationarized masih memiliki kesalahan autokorelasi, menunjukkan bahwa beberapa jumlah istilah AR (p 8805 1) dan beberapa istilah MA (q 8805 1) juga diperlukan dalam persamaan peramalan. Proses penentuan nilai p, d, dan q yang terbaik untuk rangkaian waktu tertentu akan dibahas di bagian catatan selanjutnya (yang tautannya berada di bagian atas halaman ini), namun pratinjau beberapa jenis Model ARIMA nonseasonal yang biasa dijumpai diberikan di bawah ini. ARIMA (1,0,0) model autoregresif orde pertama: jika seri stasioner dan autokorelasi, mungkin dapat diprediksi sebagai kelipatan dari nilai sebelumnya, ditambah konstanta. Persamaan peramalan dalam kasus ini adalah 8230 yang Y regresi pada dirinya sendiri tertinggal oleh satu periode. Ini adalah model konstanta 8220ARIMA (1,0,0) constant8221. Jika mean Y adalah nol, maka istilah konstan tidak akan disertakan. Jika koefisien kemiringan 981 1 positif dan kurang dari 1 besarnya (harus kurang dari 1 dalam besaran jika Y adalah stasioner), model tersebut menggambarkan perilaku rata-rata pada nilai periodisasi berikutnya yang diperkirakan akan menjadi 981 1 kali sebagai Jauh dari mean sebagai nilai periode ini. Jika 981 1 negatif, ia memprediksi perilaku rata-rata dengan alternasi tanda, yaitu juga memprediksi bahwa Y akan berada di bawah rata-rata periode berikutnya jika berada di atas rata-rata periode ini. Dalam model autoregresif orde kedua (ARIMA (2,0,0)), akan ada istilah Y t-2 di sebelah kanan juga, dan seterusnya. Bergantung pada tanda dan besaran koefisien, model ARIMA (2,0,0) bisa menggambarkan sistem yang pembalikan rata-rata terjadi dengan mode sinusoidal oscillating, seperti gerak massa pada pegas yang mengalami guncangan acak. . ARIMA (0,1,0) berjalan acak: Jika seri Y tidak stasioner, model yang paling sederhana untuk model ini adalah model jalan acak, yang dapat dianggap sebagai kasus pembatas model AR (1) dimana autoregresif Koefisien sama dengan 1, yaitu deret dengan reversi mean yang jauh lebih lambat. Persamaan prediksi untuk model ini dapat ditulis sebagai: di mana istilah konstan adalah perubahan periode-ke-periode rata-rata (yaitu drift jangka panjang) di Y. Model ini dapat dipasang sebagai model regresi yang tidak mencegat dimana Perbedaan pertama Y adalah variabel dependen. Karena hanya mencakup perbedaan nonseasonal dan istilah konstan, model ini diklasifikasikan sebagai model quotARIMA (0,1,0) dengan konstan. Model random-walk-without - drift akan menjadi ARIMA (0,1, 0) model tanpa ARIMA konstan (1,1,0) model autoregresif orde satu yang terdesentralisasi: Jika kesalahan model jalan acak diobot dengan autokorelasi, mungkin masalahnya dapat diperbaiki dengan menambahkan satu lag variabel dependen ke persamaan prediksi - - yaitu Dengan mengundurkan diri dari perbedaan pertama Y pada dirinya sendiri yang tertinggal satu periode. Ini akan menghasilkan persamaan prediksi berikut: yang dapat diatur ulang menjadi Ini adalah model autoregresif orde pertama dengan satu urutan perbedaan nonseasonal dan istilah konstan - yaitu. Model ARIMA (1,1,0). ARIMA (0,1,1) tanpa perataan eksponensial sederhana: Strategi lain untuk memperbaiki kesalahan autokorelasi dalam model jalan acak disarankan oleh model pemulusan eksponensial sederhana. Ingatlah bahwa untuk beberapa seri waktu nonstasioner (misalnya yang menunjukkan fluktuasi yang bising di sekitar rata-rata yang bervariasi secara perlahan), model jalan acak tidak berjalan sebaik rata-rata pergerakan nilai masa lalu. Dengan kata lain, daripada mengambil pengamatan terbaru sebagai perkiraan pengamatan berikutnya, lebih baik menggunakan rata-rata beberapa pengamatan terakhir untuk menyaring kebisingan dan memperkirakan secara lebih akurat mean lokal. Model pemulusan eksponensial sederhana menggunakan rata-rata pergerakan rata-rata tertimbang eksponensial untuk mencapai efek ini. Persamaan prediksi untuk model smoothing eksponensial sederhana dapat ditulis dalam sejumlah bentuk ekuivalen matematis. Salah satunya adalah bentuk koreksi yang disebut 8220error correction8221, dimana ramalan sebelumnya disesuaikan dengan kesalahan yang dibuatnya: Karena e t-1 Y t-1 - 374 t-1 menurut definisinya, ini dapat ditulis ulang sebagai : Yang merupakan persamaan peramalan ARIMA (0,1,1) - tanpa perkiraan konstan dengan 952 1 1 - 945. Ini berarti bahwa Anda dapat menyesuaikan smoothing eksponensial sederhana dengan menentukannya sebagai model ARIMA (0,1,1) tanpa Konstan, dan perkiraan koefisien MA (1) sesuai dengan 1-minus-alpha dalam formula SES. Ingatlah bahwa dalam model SES, rata-rata usia data dalam prakiraan 1 periode adalah 1 945. yang berarti bahwa mereka cenderung tertinggal dari tren atau titik balik sekitar 1 945 periode. Dengan demikian, rata-rata usia data dalam prakiraan 1-periode-depan model ARIMA (0,1,1) - tanpa konstan adalah 1 (1 - 952 1). Jadi, misalnya, jika 952 1 0,8, usia rata-rata adalah 5. Karena 952 1 mendekati 1, model ARIMA (0,1,1) - tanpa model konstan menjadi rata-rata bergerak jangka-panjang, dan sebagai 952 1 Pendekatan 0 menjadi model random-walk-without-drift. Apa cara terbaik untuk memperbaiki autokorelasi: menambahkan istilah AR atau menambahkan istilah MA Dalam dua model sebelumnya yang dibahas di atas, masalah kesalahan autokorelasi dalam model jalan acak diperbaiki dengan dua cara yang berbeda: dengan menambahkan nilai lag dari seri yang berbeda Ke persamaan atau menambahkan nilai tertinggal dari kesalahan perkiraan. Pendekatan mana yang terbaik Aturan praktis untuk situasi ini, yang akan dibahas lebih rinci nanti, adalah bahwa autokorelasi positif biasanya paling baik ditangani dengan menambahkan istilah AR ke model dan autokorelasi negatif biasanya paling baik ditangani dengan menambahkan MA istilah. Dalam deret waktu bisnis dan ekonomi, autokorelasi negatif sering muncul sebagai artefak differencing. (Secara umum, differencing mengurangi autokorelasi positif dan bahkan dapat menyebabkan perubahan dari autokorelasi positif ke negatif.) Jadi, model ARIMA (0,1,1), di mana perbedaannya disertai dengan istilah MA, lebih sering digunakan daripada Model ARIMA (1,1,0). ARIMA (0,1,1) dengan perataan eksponensial sederhana konstan dengan pertumbuhan: Dengan menerapkan model SES sebagai model ARIMA, Anda benar-benar mendapatkan fleksibilitas. Pertama, perkiraan koefisien MA (1) dibiarkan negatif. Ini sesuai dengan faktor pemulusan yang lebih besar dari 1 dalam model SES, yang biasanya tidak diizinkan oleh prosedur pemasangan model SES. Kedua, Anda memiliki pilihan untuk memasukkan istilah konstan dalam model ARIMA jika Anda mau, untuk memperkirakan tren nol rata-rata. Model ARIMA (0,1,1) dengan konstanta memiliki persamaan prediksi: Prakiraan satu periode dari model ini secara kualitatif serupa dengan model SES, kecuali bahwa lintasan perkiraan jangka panjang biasanya adalah Garis miring (kemiringannya sama dengan mu) bukan garis horizontal. ARIMA (0,2,1) atau (0,2,2) tanpa pemulusan eksponensial linier konstan: Model pemulusan eksponensial linier adalah model ARIMA yang menggunakan dua perbedaan nonseason dalam hubungannya dengan persyaratan MA. Perbedaan kedua dari seri Y bukan hanya perbedaan antara Y dan dirinya tertinggal dua periode, namun ini adalah perbedaan pertama dari perbedaan pertama - i. Perubahan perubahan Y pada periode t. Jadi, perbedaan kedua Y pada periode t sama dengan (Y t - Y t-1) - (Y t-1 - Y t-2) Y t - 2Y t-1 Y t-2. Perbedaan kedua dari fungsi diskrit sama dengan turunan kedua dari fungsi kontinyu: ia mengukur kuotasi kuadrat atau quotcurvaturequot dalam fungsi pada suatu titik waktu tertentu. Model ARIMA (0,2,2) tanpa konstan memprediksi bahwa perbedaan kedua dari rangkaian sama dengan fungsi linier dari dua kesalahan perkiraan terakhir: yang dapat disusun ulang sebagai: di mana 952 1 dan 952 2 adalah MA (1) dan MA (2) koefisien. Ini adalah model pemulusan eksponensial linear umum. Dasarnya sama dengan model Holt8217s, dan model Brown8217s adalah kasus khusus. Ini menggunakan rata-rata pergerakan tertimbang eksponensial untuk memperkirakan tingkat lokal dan tren lokal dalam rangkaian. Perkiraan jangka panjang dari model ini menyatu dengan garis lurus yang kemiringannya bergantung pada tren rata-rata yang diamati menjelang akhir rangkaian. ARIMA (1,1,2) tanpa perataan eksponensial eksponensial yang terfragmentasi. Model ini diilustrasikan pada slide yang menyertainya pada model ARIMA. Ini mengekstrapolasikan tren lokal di akhir seri namun meratakannya pada cakrawala perkiraan yang lebih panjang untuk memperkenalkan catatan konservatisme, sebuah praktik yang memiliki dukungan empiris. Lihat artikel di quotWhy the Damped Trend karyaquot oleh Gardner dan McKenzie dan artikel quotGolden Rulequot oleh Armstrong dkk. Untuk rinciannya. Umumnya disarankan untuk tetap berpegang pada model di mana setidaknya satu dari p dan q tidak lebih besar dari 1, yaitu jangan mencoba menyesuaikan model seperti ARIMA (2,1,2), karena hal ini cenderung menyebabkan overfitting. Dan isu-isu kuotom-faktorquot yang dibahas secara lebih rinci dalam catatan tentang struktur matematis model ARIMA. Implementasi Spreadsheet: Model ARIMA seperti yang dijelaskan di atas mudah diterapkan pada spreadsheet. Persamaan prediksi adalah persamaan linier yang mengacu pada nilai-nilai masa lalu dari rangkaian waktu asli dan nilai kesalahan masa lalu. Dengan demikian, Anda dapat membuat spreadsheet peramalan ARIMA dengan menyimpan data di kolom A, rumus peramalan pada kolom B, dan kesalahan (data minus prakiraan) di kolom C. Rumus peramalan pada sel biasa di kolom B hanya akan menjadi Sebuah ekspresi linier yang mengacu pada nilai-nilai pada baris-kolom sebelumnya kolom A dan C, dikalikan dengan koefisien AR atau MA yang sesuai yang disimpan di sel-sel di tempat lain pada spreadsheet. Dari pukul 8:00 PM CST Jumat, 24 Februari - 18:00 CST Sabtu, Feb 25, ni akan menjalani upgrade sistem yang bisa mengakibatkan gangguan layanan sementara. Kami menghargai kesabaran Anda saat kami meningkatkan pengalaman online kami. Melangkah Melampaui Microsoft Excel untuk Analisis dan Pelaporan Data Pengukuran Tanggal terbitan: 18, 2014 44 4.39 5 Cetak Karena ketersediaannya yang meluas, Microsoft Excel seringkali merupakan pilihan de facto para insinyur dan ilmuwan yang membutuhkan perangkat lunak untuk analisis data pengukuran dan manipulasi. Microsoft Excel sangat menyukai aplikasi uji dan pengukuran sederhana dan penggunaan finansial yang dirancangnya, di era ketika perusahaan dipaksa melakukan lebih banyak hal dengan lebih sedikit, memilih alat yang tepat untuk memaksimalkan efisiensi (dengan demikian mengurangi biaya) sangat penting. . Hanya karena Microsoft Excel sudah terinstal di komputer Anda tidak menjadikannya alat yang tepat untuk setiap pekerjaan. Perangkat lunak Instrumen DIAdem Nasional yang khusus dibuat untuk manajemen, inspeksi, analisis, dan pelaporan data teknik dan ilmiah yang diakuisisi atau disimulasikan menawarkan keuntungan dan skalabilitas efisiensi dengan fitur yang mengatasi keterbatasan Excel di sebagian besar aplikasi pasca-pengolahan data. Daftar Isi 1. Perbedaan dalam Blok Bangunan Mendasar: Sel versus Saluran Microsoft Excel menggunakan sel sebagai blok bangunan dasarnya.160 Sel membentuk barisan dan kolom untuk membuat spreadsheet, arsitektur yang ideal untuk anggaran dan neraca.160 Wikipedia , Aplikasi akuisisi data single-point misalnya, yang mengumpulkan satu titik data satu jam dalam satu hari sering dipetakan ke arsitektur ini dengan mudah karena masing-masing titik data memegang lebih penting bila ada lebih sedikit titik data yang dikumpulkan.160 Setiap data Point ada sebagai sel dalam spreadsheet dan harus dimanipulasi dengan menggunakan paradigma berbasis Excels. Sebagian besar aplikasi akuisisi data, bagaimanapun, bukanlah hal sepele ini.160 Aplikasi yang mengumpulkan lusinan saluran data pada tingkat mega sampel per detik (MSs) biasa terjadi.160 Dalam aplikasi ini, manipulasi data dan interaksi dilakukan pada sinyal atau saluran sebagai Keseluruhan.160 Ketika memanipulasi saluran di Excel sebagai kolom sel individual, kesatuan sinyal hilang.160 Meskipun keseluruhan kolom Excel dapat dimanipulasi pada satu waktu, ini lebih rumit dengan kolom yang lebih panjang.160 Selain itu, kolom seringkali berisi deskriptif. Informasi seperti nama atau unit di samping data numerik mentah.160 Dalam kasus ini, subkumpulan kolom harus dipilih (misalnya, kisaran A2: A99), memperkenalkan overhead dan potensi ketidakakuratan atau kesalahan. Pada Gambar 1. Excel digunakan untuk melakukan tugas teknik sederhana namun umum: rata-rata lima saluran suhu yang tersimpan di kolom untuk membuat kanal Rata-rata yang dihasilkan.160 Perhitungan rata-rata pertama-tama harus dilakukan dengan blok bangunan sel, lalu disalin (atau diisi) ke Semua sel di kolom resultan.160 Menggunakan DIAdem, yang menggunakan saluran sebagai blok bangunan dasarnya, saluran rata-rata semudah menyeret dan menjatuhkan saluran input ke fungsi Saluran Rata-Rata, seperti yang ditunjukkan pada Gambar 2.160 Butir data individual Masih dapat dimanipulasi dalam DIAdem bila diperlukan. Gambar 1 . Microsoft Excel menggunakan sel sebagai blok bangunan dasarnya.160 Bahkan analisis data sederhana pun harus diterapkan pada sel dan kemudian diulang untuk semua sel dalam kolom (saluran). Gambar 2. NI DIAdem beroperasi dengan blok bangunan a160channel.160 Rata-rata adalah sesederhana menyeret dan menjatuhkan seluruh saluran data alih-alih memanipulasi data poin individual yang tidak perlu. 2. Ratusan Perhitungan Analisis Teknik dan Ilmiah Meskipun jumlah formula yang tersedia untuk perhitungan berorientasi keuangan di Excel sangat luas, Anda harus mengkonfigurasi add-in opsional yang disebut Analisis Toolpak untuk mendapatkan akses ke beberapa perhitungan teknik dan statistik.160 Analisis Fungsi toolpak sangat terbatas, seperti yang ditunjukkan pada Gambar 3 dengan perhitungan teknik umum Fast Fourier Transform (FFT) .160 Secara umum, kemampuan analisis Excels seringkali tidak memenuhi persyaratan aplikasi ilmiah atau teknik.160 Untuk perluasan lebih lanjut, Excel menyediakan Mesin Visual Basic for Applications (VBA) yang hebat dan lingkungan pengeditan VBA yang sangat bagus yang memungkinkan Anda untuk menulis perhitungan teknik Anda sendiri dari awal ketika fungsi yang tidak ada dalam aplikasi tidak memadai untuk aplikasi Anda. Gambar 3. Microsoft Excel menyediakan serangkaian perhitungan berbasis keuangan yang lengkap dan memungkinkan para insinyur menulis kode mereka sendiri untuk memenuhi kebutuhan aplikasi mereka. Di DIAdem, ratusan perhitungan analisis teknik dan ilmiah dari penambahan sederhana ke manipulasi matriks kompleks dan analisis pesanan telah disertakan di lingkungan.160 Fungsi analisis di DIAdem tidak berbasis konfigurasi, pemrograman diperlukan untuk menjalankan analisis yang kompleks seperti Digital Filtering , Seperti yang ditunjukkan pada Gambar 4.160 Selain itu, fungsi analisis DIAdem mencakup preview hasil analisis yang lengkap sehingga Anda dapat menghindari perhitungan yang salah dengan memastikan bahwa Anda menggunakan parameter yang benar sebelum menjalankan setiap perhitungan. Gambar 4. DIAdem mencakup ratusan fungsi analisis yang spesifik untuk ilmuwan dan insinyur.160 Setiap perhitungan berbasis konfigurasi dan menyediakan pratinjau saluran resultan sehingga Anda dapat berinteraksi dengan parameter untuk memastikan akurasi dan mengurangi kesalahan. DIAdem juga mencakup kerangka kerja untuk membuat perhitungan khusus domain Anda sendiri yang disebut Manajer Perhitungan, dan ini mencakup antarmuka skrip Visual Basic terpadu untuk menyusun perhitungan DIAdem built-in atau menentukan penghitungan kustom Anda sendiri. 3. Memuat dan Memanipulasi Volume Data yang Besar Data kecepatan streaming aplikasi umum mencapai atau melebihi tingkat MS.160 Dalam sebuah aplikasi yang mengumpulkan satu saluran data tunggal pada 1 MS, total 1.000.000 titik data akan dikumpulkan dalam akuisisi satu detik . Dalam hitungan menit, miliaran data poin bisa disimpan ke gigabyte ruang harddisk. Ketika Microsoft Excel mencoba memuat file data yang berisi data dalam jumlah besar, ia mencoba memuat setiap titik data ke dalam memori.160 Dengan merilis versi 64-bit Microsoft Excel 2010, ini kurang merupakan batasan, karena Aplikasi memiliki ruang memori beralamatkan lebih besar Namun, memuat keseluruhan kumpulan data yang besar ke dalam Excel seringkali dapat memakan waktu beberapa menit karena banyaknya data yang perlu dimuat.160 Lebih jauh lagi, Excel menyimpan tidak hanya nilai numerik di setiap sel. Tetapi juga format numerik, format sel, rumus, tautan spreadsheet, hyperlink Internet, dan komentar.160 Fleksibilitas sel-sentris ini sangat ideal untuk spreadsheet bisnis yang visibilitas tingkat selnya penting, namun menambahkan overhead memori tambahan untuk kumpulan data dengan jutaan nilai . Untuk menghindari masalah memori potensial, Excel memberlakukan batas jumlah maksimum 160 dan kolom.160 Pengenalan Excel 2007 meningkatkan jumlah baris per lembar kerja dari 65.536 menjadi lebih dari 1.000.000 (2 20. tepatnya) dan totalnya Jumlah kolom dari 256 sampai 16.384 (2 14) .160 Menggunakan Gambar 5 dan 6. Kontras Mengekspos batasan baris dan kolom dengan kemampuan DIAdems untuk memanipulasi 500.000.000 baris (poin) hanya sebagai bagian dari batasannya.160 Gambar 5. Excel hanya bisa memuat lebih dari 1 juta baris data untuk kolom tertentu.160 Ini adalah batasan bagi para ilmuwan dan insinyur. Gambar 6. DIAdem dapat dengan mudah menangani kumpulan data yang sangat besar.160 Gambar ini menunjukkan contoh 500.000.000 (setengah miliaran) titik data di saluran - 500 kali jumlah maksimum baris yang diizinkan oleh Excel. Seperti ditunjukkan pada Gambar 5. Tingkat akuisisi 1 MS yang menggunakan satu saluran tunggal akan melebihi jumlah titik data yang dapat dimuat Excel hanya dalam waktu satu detik dari akuisisi.160 Banyak insinyur dan ilmuwan merasa dipaksa untuk membiarkan keterbatasan data mereka perangkat lunak pasca-pengolahan untuk menentukan Persyaratan akuisisi mereka dan juga mengurangi tingkat akuisisi atau akuisisi segmen di banyak file data, memperkenalkan mimpi buruk bagi pengelolaan data dan organisasi. DIAdem dirancang untuk memanipulasi data pengukuran baik dalam volume kecil maupun besar, dan dapat memproses hingga 2.000.000.000 titik data (2 31) per saluran di 65.536 (2 16) total saluran data.160 Selain itu, DIAdem menyertakan 1.60 pemuatan selektif, pengurangan dan pendaftaran data Fitur pembebanan yang dirancang khusus untuk bekerja dengan kumpulan data yang sangat besar.160 DIAdem dapat secara selektif memuat subkumpulan saluran data yang terdapat dalam file data, sedangkan Excel selalu mengimpor semua kolom dari file data.160 Jika Anda hanya perlu memuat 1 Saluran dari file data yang sangat besar dengan 10 saluran di dalamnya, hanya memuat 10 dari nilai data yang sebenarnya Anda butuhkan jauh lebih cepat dan lebih efisien daripada metode Excels memuat 100 data saat 90 diisikan.160 Saat file dimuat Dengan pengurangan data, DIAdem memuat data dari rentang baris yang dipilih dan juga mengembunkan setiap baris N ke dalam satu nilai representatif, sedangkan Excel selalu memuat semua baris data.160 Saat file didaftarkan dimuat, DI Adem menggunakan file data yang ada pada disk karena memori virtual di tempatDIAdem tidak memuat semua nilai dari file data sekaligus tapi malah mencatat bagaimana mengakses blok nilai data sesuai permintaan.160 Hal ini membuat daftar saluran yang dimuat hanya ada, Namun memungkinkan grafik dan pemeriksaan cepat kumpulan data sangat besar, seperti yang ditunjukkan pada Gambar 6. Lihat solusi pengguna tentang bagaimana DIAdem memproses sejumlah besar data untuk membantu memprediksi dan memantau aktivitas gempa. 4. Fleksibilitas dalam Format Penyimpanan File Aplikasi yang mengumpulkan dan menyimpan data pada tingkat streaming yang tinggi harus menulis data ke disk menggunakan format file berkemampuan streaming.160 Format file biner paling sering digunakan karena tidak termasuk biaya tambahan yang diperlukan untuk membuat file. Manusia dapat dibaca seperti file ASCII .160 Perbandingan format file yang umum, termasuk standar format biner terbuka untuk perangkat lunak Instrumen Nasional yang disebut Data Manajemen Teknis Streaming (TDMS), ditampilkan pada Tabel 1. 160160160160160 Tabel 1. Ada banyak pilihan format file yang tersedia, namun format file biner seperti TDMS adalah satu-satunya format yang mampu berkecepatan tinggi. Mungkin memerlukan toolkit atau add-on module. DIAdem cukup fleksibel untuk membaca format file ubahsuaian termasuk format file biner yang disesuaikan karena potongan kode modular yang disebut DataPlugins yang mengetahui cara mengurai dan menafsirkan isi file data.160 DataPlugins juga memformat ulang data yang dipecah dari file data tertentu ke dalam Struktur data yang umum di dalam DIAdem, yang memudahkan untuk membandingkan data yang diambil dari berbagai format file.160 Instrumen Nasional telah menerbitkan DataPlugins yang dapat didownload gratis untuk ratusan format file data yang paling umum digunakan, dan ada API yang diterbitkan untuk LabVIEW dan VBScript untuk Anda Untuk membuat DataPlugins untuk file data warisan Anda sendiri.160 Hal ini memungkinkan DIAdem menjadi modular dan cukup terukur untuk menangani pilihan format file terkini, lama, atau masa depan. Sebaliknya, sementara Excel dapat membaca file ASCII, biasanya sama sekali tidak dapat memuat data dari file biner.160 Bahkan saat Excel berhasil memuat file ASCII, ia memiliki kemampuan terbatas untuk menafsirkan secara benar struktur properti dan saluran dari file data. Sering kali, pemformatan ulang data impor ASCII yang perlu waktu diperlukan sebelum dapat digunakan sama sekali.160 Salah satu pengecualian untuk masalah ini adalah format file 160TDMS dari 160National Instruments, yang memuat Excel dengan format struktur, properti, dan Data dari file TDMS, menggunakan160 TDM Excel Add-In gratis. Kunjungi homepage TDMS untuk mempelajari lebih lanjut tentang format file TDMS untuk menyimpan data pengukuran ke disk. 5. Built-In Tools untuk Pengelolaan Data dan Tren Seiring waktu, biasanya menyimpan dan mencoba mengorganisir ratusan atau ribuan file data pada disk.160 File-file ini sering disimpan dengan cara yang berbeda dengan menggunakan format yang berbeda, dan bahkan dapat disimpan Di berbagai lokasi pada mesin lokal atau di jaringan. Jika Anda ingin data tren di beberapa file data menggunakan Microsoft Excel, Anda harus membuka setiap file data individual, menyalin kolom yang bersangkutan dan menempelkannya ke file master (gabungan), dan pindah ke file data berikutnya.160 Tren yang sama persis Saluran data di ratusan file data unik bisa memakan waktu berhari-hari atau berminggu-minggu. DIAdem dapat menyelesaikan tugas yang sama ini dalam hitungan detik.160 Dengan menggunakan DataPlugins, DIAdem dapat memuat format file yang berbeda ini ke struktur impor yang umum untuk analisis dan pelaporan yang seragam. Selanjutnya, DIAdem memasang teknologi yang disebut DataFinder Saya yang membantu Anda menemukan dan mengisolasi kumpulan data pasti dengan tepat yang sebenarnya, walaupun berada di berbagai file berbeda seperti yang ditunjukkan pada Gambar 7. 160 My DataFinder secara otomatis membuat indeks informasi deskriptif. Yang terdapat dalam file data yang dapat dicari di dalam DIAdem.160 Dengan menggunakan teknologi DIAdem dan DataFinder, Anda dapat dengan cepat menemukan semua file data yang ditulis oleh operator tertentu, menemukan semua tes yang gagal, atau bahkan mengidentifikasi setiap saluran data di semua file data yang disimpan. Menggunakan jenis sensor tertentu.160 Semakin banyak informasi yang Anda daftarkan dalam file data Anda, kemungkinan lebih banyak tersedia saat mencari data tertentu yang tersimpan di beberapa file dalam berbagai folder dan atau format file. Gambar 7. Dalam query ini, DataFinder telah menemukan saluran data di semua file data yang dikumpulkan menggunakan termokopel J-Type dan disimpan ke disk oleh Jennifer, operator. Lihat webcast yang menunjukkan DIAdem dan NI DataFinder untuk pengelolaan data, analisis, dan pelaporan. 6. Inspeksi Data dan Sinkronisasi Microsoft Excel memungkinkan pengguna untuk membuat diagram dasar dan grafik, namun grafik statis tidak memungkinkan Anda untuk sepenuhnya berinteraksi dan memeriksa data yang telah diukur dari waktu ke waktu.160 Sebagai contoh, tidak mungkin untuk memvisualisasikan data pengukuran berkorelasi Dan GPS160data menggunakan alat built-in di Excel. DIAdem menyertakan alat visualisasi yang kuat yang menampilkan area tampilan yang dapat disinkronkan secara ideal untuk memutar ulang ukuran yang terkoordinasi dengan video, model 3D, sistem sumbu, tampilan peta GPS, kontur, pemutaran suara, Dan lebih banyak lagi.160 Ini memungkinkan Anda untuk memutar ulang pengukuran yang disinkronkan dengan informasi lain untuk sepenuhnya memahami konteksnya.160 Alat visualisasi DIAdems juga memungkinkan Anda untuk dengan mudah memperbesar wilayah tertentu dari grafik, menyalin atau menghapus atau menginterpolasi rentang data, dan memeriksa Nilai pasti dari titik-titik tertentu secara grafis.160 Dengan menggunakan alat dinamis ini, mudah untuk mengidentifikasi daerah yang diminati atau menemukan outlier dalam kumpulan data yang lebih besar. Angka 8 . Dengan menggunakan DIAdem, Anda dapat sepenuhnya menyinkronkan pemutaran data pengukuran, data suara, koordinat GPS, video, dan lainnya. Template Pelaporan What-You-See-Is-What-You-Get (WYSIWYG) DIAdem memiliki mesin pelaporan yang kuat yang memanfaatkan template yang dapat digunakan kembali karena banyak insinyur menghasilkan laporan yang sama berulang kali dengan menggunakan kumpulan data yang berbeda.160 Template laporan WYSIWYG di DIAdem Menyimpan referensi ke data dalam memori dibandingkan dengan menyimpan nilai data sebenarnya. Untuk membuat laporan kumpulan data yang berbeda menggunakan kerangka laporan tersimpan yang sama, Anda cukup memuat data baru ke dalam memori dan kerangka laporan dimuat akan segera menampilkan 160 layar dengan nilai data yang baru dimuat.160 Anda kemudian dapat mengekspor resolusi tinggi yang telah selesai, terbitan Sudah melaporkan ke format pelaporan yang paling umum termasuk PDF, PowerPoint, HTML, gambar, dan banyak lagi. Di Excel, tampilan laporan disimpan bersamaan dengan data dalam file spreadsheet umum, yang membuat lebih sulit untuk menggunakan tampilan laporan tertentu untuk beberapa kumpulan data. 160 Gambar 9. DIAdem menampilkan laporan publikasi editor WYSIWYG yang siap diekspor akan terlihat identik dengan template edit-waktu mereka. 8. Interactive Automation Excel menyediakan lingkungan yang kuat untuk pengembangan macro.160 Dengan menggunakan mode perekaman, adalah mungkin untuk secara interaktif merekam makro yang memerlukan evaluasi atau perhitungan yang panjang.160 DIAdem serupa160 memiliki editor VBScript terintegrasi, editor dialog pengguna, dan sebuah Perekam script untuk secara interaktif menghasilkan skrip yang mengotomatisasi evaluasi atau perhitungan yang panjang. 160160Menggunakan scripting, seluruh lingkungan DIAdem dapat disesuaikan dan otomatis sehingga proses alur kerja data berulang yang digunakan untuk mengambil hari dapat dilakukan dalam hitungan menit.160 Ini benar-benar memaksimalkan efisiensi insinyur dan ilmuwan dan secara dramatis mengurangi waktu yang dibutuhkannya. Untuk mengubah data pengukuran mentah menjadi informasi yang dapat digunakan. 9. Excel Gratis, namun Terlalu Mahal untuk Menggunakan Microsoft Office digunakan oleh sekitar 80 perusahaan1.160 Banyak insinyur dan ilmuwan melihat Excel sebagai perangkat lunak bebas karena diinstal pada kebanyakan komputer perusahaan tanpa pertanyaan.160 Seringkali, ilmuwan dan insinyur mulai Gunakan Excel untuk analisis dan kebutuhan pelaporan mereka karena sudah familiar dan tersedia.160 Ketika mereka menghadapi keterbatasan Excels seperti yang dirangkum dalam Tabel 2. Mereka tinggal dengan pemrosesan manual yang berulang kali berulang-ulang atau menghabiskan waktu berjam-jam dan berminggu-minggu untuk mengembangkan dan memelihara kode makro khusus. Jika Anda memperkirakan bahwa biaya personil (termasuk gaji, asuransi, peralatan, dll) untuk satu insinyur dengan total 100.000 per tahun, biaya untuk membeli satu lisensi DIAdem Advanced dan satu minggu pelatihan akan disempurnakan setelah hanya 2,8 minggu kerja dari realisasi keuntungan produktivitas Lebih dari Microsoft Excel Seperti yang dijelaskan dalam dokumen ini, NI DIAdem dengan cepat membayar sendiri dengan mengatasi keterbatasan Excel dan memperkenalkan alat efisiensi tambahan untuk mengelola, menganalisis dan160 melaporkan data pengukuran.160160 Tabel 2. DIAdem akan meningkatkan efisiensi Anda dengan mengatasi keterbatasan Microsoft Excel. 10. Pelajari Lebih Lanjut dan Pindah ke DIAdem Hari Ini Gunakan sumber di bawah ini untuk mempelajari lebih lanjut tentang bergerak melampaui Excel ke alat yang lebih canggih untuk analisis dan pelaporan data pengukuran. Lihat webcast yang menyoroti manfaat DIAdems untuk pengelolaan data, analisis, dan pelaporan. Tonton enam video berdurasi 1 menit untuk mempelajari lebih lanjut tentang DIAdem. Download DIAdem dan jelajahi lingkungan dengan evaluasi 7 hari gratis. Berbicaralah kepada seorang ahli demo web gratis atau agar pertanyaan Anda dijawab dengan segera. Sebagian besar orang mengenal ungkapan ini, quotthis ini akan membunuh dua burung dengan satu batu batu. Jika tidak, fase mengacu pada pendekatan yang membahas dua tujuan dalam satu tindakan. (Sayangnya, ungkapan itu sendiri agak tidak menyenangkan, karena kebanyakan dari kita tidak ingin melempar batu pada hewan yang tidak berdosa) Hari ini saya akan membahas beberapa hal mendasar mengenai dua fitur hebat di SQL Server: indeks Columnstore (hanya tersedia di SQL Server Enterprise) dan SQL Query Store. Microsoft benar-benar menerapkan indeks Columnstore di SQL 2012 Enterprise, meskipun telah menyempurnakannya dalam dua rilis terakhir dari SQL Server. Microsoft memperkenalkan Query Store di SQL Server 2016. Jadi, apa saja fitur ini dan mengapa mereka penting Nah, saya punya demo yang akan mengenalkan kedua fitur tersebut dan menunjukkan bagaimana mereka dapat membantu kita. Sebelum saya melangkah lebih jauh, saya juga membahas fitur ini (dan fitur SQL 2016 lainnya) di artikel Majalah KODE saya tentang fitur baru SQL 2016. Sebagai pengantar dasar, indeks Columnstore dapat membantu mempercepat kueri yang memindai berdasarkan data dalam jumlah besar, dan Query Query melacak eksekusi query, rencana eksekusi, dan statistik runtime yang biasanya perlu Anda kumpulkan secara manual. Percayalah ketika saya mengatakannya, ini adalah fitur hebat. Untuk demo ini, saya akan menggunakan database demo Data Warehouse Microsoft Contoso. Ngomong ngomong, Contoso DW seperti kuota AdventureWorksquot yang sangat besar, dengan tabel berisi jutaan baris. (Tabel AdventureWorks terbesar berisi sekitar 100.000 baris paling banyak). Anda bisa mendownload database Contoso DW disini: microsoften-usdownloaddetails. aspxid18279. Contoso DW bekerja sangat baik saat Anda ingin menguji kinerja pada pertanyaan melawan tabel yang lebih besar. Contoso DW berisi tabel data warehouse standar yang disebut FactOnLineSales, dengan 12,6 juta baris. Itu tentu bukan tabel gudang data terbesar di dunia, tapi juga permainan anak-anak. Misalkan saya ingin meringkas jumlah penjualan produk untuk tahun 2009, dan memberi peringkat produk. Saya mungkin menanyakan tabel fakta dan bergabung ke tabel Dimensi Produk dan menggunakan fungsi RANK, seperti: Berikut adalah hasil parsial dari 10 baris teratas, oleh Total Sales. Di laptop saya (i7, 16 GB RAM), permintaan membutuhkan waktu 3-4 detik untuk dijalankan. Itu mungkin tidak tampak seperti akhir dunia, namun beberapa pengguna mungkin mengharapkan hasil hampir instan (seperti yang mungkin Anda lihat seketika saat menggunakan Excel dari kubus OLAP). Satu-satunya indeks yang saya miliki saat ini di tabel ini adalah indeks berkerumun pada kunci penjualan. Jika saya melihat rencana eksekusi, SQL Server membuat sebuah saran untuk menambahkan indeks penutup ke tabel: Sekarang, hanya karena SQL Server menyarankan sebuah indeks, tidak berarti Anda harus secara membabi buta membuat indeks pada setiap pesan kuota indeks kuota. Namun, dalam hal ini, SQL Server mendeteksi bahwa kita memfilter berdasarkan tahun, dan menggunakan Product Key dan Sales Amount. Jadi, SQL Server menyarankan indeks penutup, dengan DateKey sebagai bidang indeks kunci. Alasan kami menyebutnya indeks quotcoveringquot adalah karena SQL Server akan melakukan kuota sepanjang fieldquot non-key yang kami gunakan dalam query, quotfor the ridequot. Dengan cara itu, SQL Server tidak perlu menggunakan tabel atau indeks berkerumun di semua mesin database hanya dengan menggunakan indeks pengaitan untuk kueri. Meliputi indeks sangat populer di data pergudangan dan pelaporan database skenario tertentu, meskipun harganya terjangkau oleh mesin database. Catatan: Meliputi indeks telah ada sejak lama, jadi saya belum membuka indeks Columnstore dan Query Store. Jadi, saya akan menambahkan indeks penutupnya: Jika saya menjalankan kueri yang sama dengan saya, saya berlari beberapa saat yang lalu (yang mengumpulkan jumlah penjualan untuk setiap produk), kueri kadang tampaknya berjalan sekitar satu detik lebih cepat, dan saya mendapatkan Rencana eksekusi yang berbeda, yang menggunakan Indeks Seek dan bukan Index Scan (dengan menggunakan tombol tanggal pada indeks penutup untuk mengambil penjualan untuk tahun 2009). Jadi, sebelum Indeks Columnstore, ini bisa menjadi salah satu cara untuk mengoptimalkan kueri ini di banyak versi SQL Server yang lebih lama. Ini berjalan sedikit lebih cepat daripada yang pertama, dan saya mendapatkan rencana eksekusi dengan Index Seek daripada Index Scan. Namun, ada beberapa masalah: Dua operator eksekusi quotIndex Seekquot dan quotHash Match (Aggregate) mengutip keduanya pada dasarnya mengoperasikan quotrow oleh rowquot. Bayangkan ini dalam sebuah tabel dengan ratusan juta baris. Terkait, pikirkan isi tabel fakta: dalam kasus ini, satu nilai kunci tanggal dan atau satu nilai kunci produk dapat diulang di ratusan ribu baris (ingat, tabel fakta juga memiliki kunci untuk geografi, promosi, salesman , Dll.) Jadi, ketika quotIndex Seekquot dan quotHash Matchquot bekerja baris demi baris, mereka melakukannya atas nilai yang mungkin diulang di banyak baris lainnya. Ini biasanya terjadi di segelintir indeks SQL Server Columnstore, yang menawarkan skenario untuk meningkatkan kinerja kueri ini dengan cara yang menakjubkan. Tapi sebelum saya melakukannya, mari kita kembali ke masa lalu. Mari kembali ke tahun 2010, saat Microsoft memperkenalkan add-in untuk Excel yang dikenal sebagai PowerPivot. Banyak orang mungkin ingat melihat demo PowerPivot for Excel, di mana pengguna bisa membaca jutaan baris dari sumber data luar ke Excel. PowerPivot akan memampatkan data, dan menyediakan mesin untuk membuat Tabel Pivot dan Diagram Pivot yang tampil dengan kecepatan luar biasa terhadap data yang dikompres. PowerPivot menggunakan teknologi in-memory yang disebut Microsoft quotVertiPaqquot. Teknologi in-memory di PowerPivot pada dasarnya akan mengambil nilai kunci bisnis duplikat kunci utama dan memampatkannya ke satu vektor tunggal. Teknologi in-memory juga akan memilah-milah nilai-nilai ini secara paralel, dalam blok beberapa ratus sekaligus. Intinya adalah Microsoft memanggang sejumlah besar penyempurnaan kinerja ke dalam fitur memori VertiPaq yang bisa kita gunakan, langsung dari kotak pepatah. Mengapa saya mengambil jalan kecil ini menyusuri jalur memori Karena di SQL Server 2012, Microsoft menerapkan salah satu fitur terpenting dalam sejarah mesin database mereka: indeks Columnstore. Indeks benar-benar sebuah indeks hanya dalam nama: ini adalah cara untuk mengambil tabel SQL Server dan membuat kolom kolom terkompresi dalam memori yang memampatkan nilai kunci asing duplikat ke nilai vektor tunggal. Microsoft juga menciptakan kolam penyangga baru untuk membaca nilai vektor terkompresi ini secara paralel, menciptakan potensi peningkatan kinerja yang sangat besar. Jadi, saya akan membuat indeks kolom di atas meja, dan saya akan melihat seberapa jauh lebih baik (dan lebih efisien) kueri berjalan, versus kueri yang berjalan melawan indeks penutup. Jadi, saya akan membuat salinan duplikat FactOnlineSales (saya akan menamakannya FactOnlineSalesDetailNCCS), dan saya akan membuat indeks kolom di tabel duplikat sehingga saya tidak akan mengganggu tabel asli dan indeks penutupan dengan cara apa pun. Selanjutnya, saya akan membuat indeks kolom di tabel baru: Perhatikan beberapa hal: Saya telah menetapkan beberapa kolom kunci asing, serta Angka Penjualan. Ingatlah bahwa indeks kolom tidak seperti indeks toko-toko tradisional. Tidak ada quotkeyquot. Kami hanya menunjukkan kolom mana yang harus dikompres SQL Server dan ditempatkan di gudang data dalam memori. Untuk menggunakan analogi PowerPivot untuk Excel saat kita membuat indeks kolom, kita akan memberitahu SQL Server untuk melakukan hal yang sama seperti yang dilakukan PowerPivot saat kita mengimpor 20 juta baris ke Excel menggunakan PowerPivot Jadi, saya akan menjalankan kembali kueri, kali ini menggunakan Tabel factOnlineSalesDetailNCCS yang digandakan yang berisi indeks kolomstore. Permintaan ini berjalan seketika dalam waktu kurang dari satu detik. Dan saya juga bisa mengatakan bahwa meskipun tabel itu memiliki ratusan juta baris, buku itu tetap akan terbentang dari kutipan bulu mata yang pepatah. Kita bisa melihat rencana eksekusi (dan dalam beberapa saat, kita akan melakukannya), tapi sekarang saatnya meliput fitur Query Store. Bayangkan sejenak, bahwa kami menjalankan kedua pertanyaan semalam: kueri yang menggunakan tabel FactOnlineSales biasa (dengan indeks penutup) dan kemudian kueri yang menggunakan tabel duplikat dengan indeks Columnstore. Saat kita masuk keesokan paginya, kami ingin melihat rencana eksekusi untuk kedua pertanyaan saat mereka berlangsung, begitu pula dengan statistik eksekusi. Dengan kata lain, kami ingin melihat statistik yang sama bahwa kami dapat melihat apakah kami menjalankan kedua kueri secara interaktif di SQL Management Studio, menyerahkan TIME dan IO Statistics, dan melihat rencana eksekusi tepat setelah menjalankan kueri. Nah, itulah yang dilakukan oleh Toko Kueri agar kita dapat mengaktifkan (enable) Query Store untuk database, yang akan memicu SQL Server untuk menyimpan eksekusi query dan merencanakan statistik sehingga kita dapat melihatnya nanti. Jadi, saya akan mengaktifkan Query Store di database Contoso dengan perintah berikut (dan saya juga akan menghapus semua caching): Kemudian saya akan menjalankan dua query (dan quotpretendquot yang saya jalankan beberapa jam yang lalu): Sekarang mari kita berpura-pura berlari berjam-jam. Lalu. Menurut apa yang saya katakan, Query Store akan menangkap statistik eksekusi. Jadi bagaimana cara melihatnya Untungnya, itu cukup mudah. Jika saya memperluas basis data Contoso DW, saya akan melihat folder Query Store. Toko Kueri memiliki fungsionalitas yang luar biasa dan saya akan mencoba meliputnya dalam entri blog berikutnya. Tapi untuk saat ini, saya ingin melihat statistik eksekusi pada dua query, dan secara khusus memeriksa operator eksekusi untuk indeks kolomstore. Jadi, saya akan mengklik kanan pada Kuasa Mengonsumsi Sumber Daya Teratas dan menjalankan opsi itu. Itu memberi saya bagan seperti di bawah ini, di mana saya bisa melihat durasi eksekusi (dalam milidetik) untuk semua pertanyaan yang telah dieksekusi. Dalam contoh ini, Query 1 adalah query terhadap tabel asli dengan indeks penutup, dan Query 2 melawan tabel dengan indeks kolomstore. Angka tersebut tidak terletak pada indeks kolom kerja mengungguli indeks tablecovering asli dengan faktor hampir 7 banding 1. Saya dapat mengubah metrik untuk melihat konsumsi memori. Dalam kasus ini, perhatikan bahwa query 2 (query indeks kolomstore) menggunakan lebih banyak memori. Ini menunjukkan dengan jelas mengapa indeks columnstore mewakili teknologi kuotasi-memoriquot SQL Server memuat seluruh indeks kolom di memori, dan menggunakan kolam penyangga yang sama sekali berbeda dengan operator eksekusi yang ditingkatkan untuk memproses indeks. OK, jadi kita punya beberapa grafik untuk melihat statistik eksekusi kita bisa melihat rencana eksekusi (dan eksekusi operator) yang terkait dengan setiap eksekusi Ya, kita bisa Jika Anda klik pada baris vertikal untuk query yang menggunakan indeks kolomstore, Anda akan melihat eksekusi Rencanakan di bawah ini Hal pertama yang kita lihat adalah bahwa SQL Server melakukan pemindaian indeks kolom, dan itu mewakili hampir 100 dari biaya kueri. Anda mungkin berkata, quotWait sebentar, kueri pertama menggunakan indeks penutup dan melakukan pencarian indeks jadi bagaimana pemindaian indeks kolom bisa lebih cepat. Pertanyaan yang sah, dan untungnya ada sebuah jawaban. Bahkan ketika query pertama melakukan pencarian indeks, ia masih mengeksekusi quotrow oleh rowquot. Jika saya meletakkan mouse di atas operator pemindai indeks kolom, saya melihat tooltip (seperti yang ada di bawah), dengan satu pengaturan penting: Mode Eksekusi adalah BATCH (berlawanan dengan ROW), yaitu apa yang kami lakukan dengan kueri pertama yang menggunakan Meliputi indeks). Mode BATCH mengatakan bahwa SQL Server sedang memproses vektor terkompresi (untuk nilai kunci asing yang diduplikasi, seperti kunci produk dan kunci tanggal) dalam jumlah hampir 1.000, secara paralel. So SQL Server is still able to process the columnstore index much more efficiently. Additionally, if I place the mouse over the Hash Match (Aggregate) task, I also see that SQL Server is aggregating the columnstore index using Batch mode (although the operator itself represents such a tiny percent of the cost of the query) Finally, you might be asking, quotOK, so SQL Server compresses the values in the data, treats the values as vectors, and read them in blocks of almost a thousand values in parallel but my query only wanted data for 2009. So is SQL Server scanning over the entire set of dataquot Again, a good question. The answer is, quotNot reallyquot. Fortunately for us, the new columnstore index buffer pool performs another function called quotsegment eliminationquot. Basically, SQL Server will examine the vector values for the date key column in the columnstore index, and eliminate segments that are outside the scope of the year 2009. I39ll stop here. In subsequent blog posts I39ll cover both the columnstore index and Query Store in more detail. Essentially, what we39ve seen here today is that the Columnstore index can significantly speed up queries that scanaggregate over large amounts of data, and the Query Store will capture query executions and allow us to examine execution and performance statistics later. In the end, we39d like to produce a result set that shows the following. Notice three things: The columns essentially pivot all of the possible Return Reasons, after showing the sales amount The result set contains subtotals by the week ending (Sunday) date across all clients (where the Client is NULL) The result set contains a grand total row (where the Client and Date are both NULL) First, before I get into the SQL end we could use the dynamic pivotmatrix capability in SSRS. We would simply need to combine the two result sets by one column and then we could feed the results to the SSRS matrix control, which will spread the return reasons across the columns axis of the report. However, not everyone uses SSRS (though most people should). But even then, sometimes developers need to consume result sets in something other than a reporting tool. So for this example, let39s assume we want to generate the result set for a web grid page and possibly the developer wants to quotstrip outquot the subtotal rows (where I have a ResultSetNum value of 2 and 3) and place them in a summary grid. So bottom line, we need to generate the output above directly from a stored procedure. And as an added twist next week there could be Return Reason X and Y and Z. So we don39t know how many return reasons there could be. We simple want the query to pivot on the possible distinct values for Return Reason. Here is where the T-SQL PIVOT has a restriction we need to provide it the possible values. Since we won39t know that until run-time, we need to generate the query string dynamically using the dynamic SQL pattern. The dynamic SQL pattern involves generating the syntax, piece by piece, storing it in a string, and then executing the string at the end. Dynamic SQL can be tricky, as we have to embed syntax inside a string. But in this case, it our only true option if we want to handle a variable number of return reasons. I39ve always found that the best way to create a dynamic SQL solution is by figuring out what the quotidealquot generated-query would be at the end (in this case, given the Return reasons we know about).and then reverse-engineering it by piecing it together one part at a time. And so, here is the SQL we need if we knew those Return Reasons (A through D) were static and would not change. The query does the following: Combines the data from SalesData with the data from ReturnData, where we quothard-wirequot the word Sales as an Action Type form the Sales Table, and then use the Return Reason from the Return Data into the same ActionType column. That will give us a clean ActionType column on which to pivot. We are combining the two SELECT statements into a common table expression (CTE), which is basically a derived table subquery that we subsequently use in the next statement (to PIVOT) A PIVOT statement against the CTE, that sums the dollars for the Action Type being in one of the possible Action Type values. Note that this isn39t the final result set. We are placing this into a CTE that reads from the first CTE. The reason for this is because we want to do multiple groupings at the end. The final SELECT statement, that reads from the PIVOTCTE, and combines it with a subsequent query against the same PIVOTCTE, but where we also implement two groupings in the GROUPING SETS feature in SQL 2008: GROUPING by the Week End Date (dbo. WeekEndingDate) GROUPING for all rows () So if we knew with certainty that we39d never have more return reason codes, then that would be the solution. However, we need to account for other reason codes. So we need to generate that entire query above as one big string where we construct the possible return reasons as one comma separated list. I39m going to show the entire T-SQL code to generate (and execute) the desired query. And then I39ll break it out into parts and explain each step. So first, here39s the entire code to dynamically generate what I39ve got above. There are basically five steps we need to cover. Langkah 1 . we know that somewhere in the mix, we need to generate a string for this in the query: SalesAmount, Reason A, Reason B, Reason C, Reason D0160016001600160 What we can do is built a temporary common table expression that combines the hard wired quotSales Amountquot column with the unique list of possible reason codes. Once we have that in a CTE, we can use the nice little trick of FOR XML PATH(3939) to collapse those rows into a single string, put a comma in front of each row that the query reads, and then use STUFF to replace the first instance of a comma with an empty space. This is a trick that you can find in hundreds of SQL blogs. So this first part builds a string called ActionString that we can use further down. Langkah 2 . we also know that we39ll want to SUM the generatedpivoted reason columns, along with the standard sales column. So we39ll need a separate string for that, which I39ll call SUMSTRING. I39ll simply use the original ActionString, and then REPLACE the outer brackets with SUM syntax, plus the original brackets. Step 3: Now the real work begins. Using that original query as a model, we want to generate the original query (starting with the UNION of the two tables), but replacing any references to pivoted columns with the strings we dynamically generated above. Also, while not absolutely required, I39ve also created a variable to simply any carriage returnline feed combinations that we want to embed into the generated query (for readability). So we39ll construct the entire query into a variable called SQLPivotQuery. Langkah 4. We continue constructing the query again, concatenating the syntax we can quothard-wirequot with the ActionSelectString (that we generated dynamically to hold all the possible return reason values) Step 5 . Finally, we39ll generate the final part of the Pivot Query, that reads from the 2 nd common table expression (PIVOTCTE, from the model above) and generates the final SELECT to read from the PIVOTCTE and combine it with a 2 nd read against PIVOTCTE to implement the grouping sets. Finally, we can quotexecutequot the string using the SQL system stored proc spexecuteSQL So hopefully you can see that the process to following for this type of effort is Determine what the final query would be, based on your current set of data and values (i. e. built a query model) Write the necessary T-SQL code to generate that query model as a string. Arguably the most important part is determining the unique set of values on which you39ll PIVOT, and then collapsing them into one string using the STUFF function and the FOR XML PATH(3939) trick So whats on my mind today Well, at least 13 items Two summers ago, I wrote a draft BDR that focused (in part) on the role of education and the value of a good liberal arts background not just for the software industry but even for other industries as well. One of the themes of this particular BDR emphasized a pivotal and enlightened viewpoint from renowned software architect Allen Holub regarding liberal arts. Ill (faithfully) paraphrase his message: he highlighted the parallels between programming and studying history, by reminding everyone that history is reading and writing (and Ill add, identifying patterns), and software development is also reading and writing (and again, identifying patterns). And so I wrote an opinion piece that focused on this and other related topics. But until today, I never got around to either publishingposting it. Every so often Id think of revising it, and Id even sit down for a few minutes and make some adjustments to it. But then life in general would get in the way and Id never finish it. So what changed A few weeks ago, fellow CoDe Magazine columnist and industry leader Ted Neward wrote a piece in his regular column, Managed Coder , that caught my attention. The title of the article is On Liberal Arts. and I highly recommend that everyone read it. Ted discusses the value of a liberal arts background, the false dichotomy between a liberal arts background and success in software development, and the need to writecommunicate well. He talks about some of his own past encounters with HR personnel management regarding his educational background. He also emphasizes the need to accept and adapt to changes in our industry, as well as the hallmarks of a successful software professional (being reliable, planning ahead, and learning to get past initial conflict with other team members). So its a great read, as are Teds other CoDe articles and blog entries. It also got me back to thinking about my views on this (and other topics) as well, and finally motivated me to finish my own editorial. So, better late than never, here are my current Bakers Dozen of Reflections: I have a saying: Water freezes at 32 degrees . If youre in a trainingmentoring role, you might think youre doing everything in the world to help someone when in fact, theyre only feeling a temperature of 34 degrees and therefore things arent solidifying for them. Sometimes it takes just a little bit more effort or another ideachemical catalyst or a new perspective which means those with prior education can draw on different sources. Water freezes at 32 degrees . Some people can maintain high levels of concentration even with a room full of noisy people. Im not one of them occasionally I need some privacy to think through a critical issue. Some people describe this as you gotta learn to walk away from it. Stated another way, its a search for the rarefied air. This past week I spent hours in half-lit, quiet room with a whiteboard, until I fully understood a problem. It was only then that I could go talk with other developers about a solution. The message here isnt to preach how you should go about your business of solving problems but rather for everyone to know their strengths and what works, and use them to your advantage as much as possible. Some phrases are like fingernails on a chalkboard for me. Use it as a teaching moment is one. (Why is it like fingernails on a chalkboard Because if youre in a mentoring role, you should usually be in teaching moment mode anyway, however subtly). Heres another I cant really explain it in words, but I understand it. This might sound a bit cold, but if a person truly cant explain something in words, maybe they dont understand. Sure, a person can have a fuzzy sense of how something works I can bluff my way through describing how a digital camera works but the truth is that I dont really understand it all that well. There is a field of study known as epistemology (the study of knowledge). One of the fundamental bases of understanding whether its a camera or a design pattern - is the ability to establish context, to identify the chain of related events, the attributes of any components along the way, etc. Yes, understanding is sometimes very hard work, but diving into a topic and breaking it apart is worth the effort. Even those who eschew certification will acknowledge that the process of studying for certification tests will help to fill gaps in knowledge. A database manager is more likely to hire a database developer who can speak extemporaneously (and effortlessly) about transaction isolation levels and triggers, as opposed to someone who sort of knows about it but struggles to describe their usage. Theres another corollary here. Ted Neward recommends that developers take up public speaking, blogging, etc. I agree 100. The process of public speaking and blogging will practically force you to start thinking about topics and breaking down definitions that you might have otherwise taken for granted. A few years ago I thought I understood the T-SQL MERGE statement pretty well. But only after writing about it, speaking about, fielding questions from others who had perspectives that never occurred to me that my level of understanding increased exponentially. I know a story of a hiring manager who once interviewed an authordeveloper for a contract position. The hiring manager was contemptuous of publications in general, and barked at the applicant, So, if youre going to work here, would you rather be writing books or writing code Yes, Ill grant that in any industry there will be a few pure academics. But what the hiring manager missed was the opportunities for strengthening and sharpening skill sets. While cleaning out an old box of books, I came across a treasure from the 1980s: Programmers at Work. which contains interviews with a very young Bill Gates, Ray Ozzie, and other well-known names. Every interview and every insight is worth the price of the book. In my view, the most interesting interview was with Butler Lampson. who gave some powerful advice. To hell with computer literacy. Its absolutely ridiculous. Study mathematics. Learn to think. Read. Write. These things are of more enduring value. Learn how to prove theorems: A lot of evidence has accumulated over the centuries that suggests this skill is transferable to many other things. Butler speaks the truth . Ill add to that point learn how to play devils advocate against yourself. The more you can reality-check your own processes and work, the better off youll be. The great computer scientistauthor Allen Holub made the connection between software development and the liberal arts specifically, the subject of history. Here was his point: what is history Reading and writing. What is software development Among other things, reading and writing . I used to give my students T-SQL essay questions as practice tests. One student joked that I acted more like a law professor. Well, just like Coach Donny Haskins said in the movie Glory Road, my way is hard. I firmly believe in a strong intellectual foundation for any profession. Just like applications can benefit from frameworks, individuals and their thought processes can benefit from human frameworks as well. Thats the fundamental basis of scholarship. There is a story that back in the 1970s, IBM expanded their recruiting efforts in the major universities by focusing on the best and brightest of liberal arts graduates. Even then they recognized that the best readers and writers might someday become strong programmersystems analysts. (Feel free to use that story to any HR-type who insists that a candidate must have a computer science degree) And speaking of history: if for no other reason, its important to remember the history of product releases if Im doing work at a client site thats still using SQL Server 2008 or even (gasp) SQL Server 2005, I have to remember what features were implemented in the versions over time. Ever have a favorite doctor whom you liked because heshe explained things in plain English, gave you the straight truth, and earned your trust to operate on you Those are mad skills . and are the result of experience and HARD WORK that take years and even decades to cultivate. There are no guarantees of job success focus on the facts, take a few calculated risks when youre sure you can see your way to the finish line, let the chips fall where they may, and never lose sight of being just like that doctor who earned your trust. Even though some days I fall short, I try to treat my client and their data as a doctor would treat patients. Even though a doctor makes more money There are many clichs I detest but heres one I dont hate: There is no such thing as a bad question. As a former instructor, one thing that drew my ire was hearing someone criticize another person for asking a supposedly, stupid question. A question indicates a person acknowledges they have some gap in knowledge theyre looking to fill. Yes, some questions are better worded than others, and some questions require additional framing before they can be answered. But the journey from forming a question to an answer is likely to generate an active mental process in others. There are all GOOD things. Many good and fruitful discussions originate with a stupid question. I work across the board in SSIS, SSAS, SSRS, MDX, PPS, SharePoint, Power BI, DAX all the tools in the Microsoft BI stack. I still write some code from time to time. But guess what I still spend so much time doing writing T-SQL code to profile data as part of the discovery process. All application developers should have good T-SQL chops. Ted Neward writes (correctly) about the need to adapt to technology changes. Ill add to that the need to adapt to clientemployer changes. Companies change business rules. Companies acquire other companies (or become the target of an acquisition). Companies make mistakes in communicating business requirements and specifications. Yes, we can sometimes play a role in helping to manage those changes and sometimes were the fly, not the windshield. These sometimes cause great pain for everyone, especially the I. T. people. This is why the term fact of life exists we have to deal with it. Just like no developer writes bug-free code every time, no I. T. person deals well with change every single time. One of the biggest struggles Ive had in my 28 years in this industry is showing patience and restraint when changes are flying from many different directions. Here is where my prior suggestion about searching for the rarified air can help. If you can manage to assimilate changes into your thought process, and without feeling overwhelmed, odds are youll be a significant asset. In the last 15 months Ive had to deal with a huge amount of professional change. Its been very difficult at times, but Ive resolved that change will be the norm and Ive tried to tweak my own habits as best I can to cope with frequent (and uncertain) change. Its hard, very hard. But as coach Jimmy Duggan said in the movie A League of Their Own: Of course its hard. If it wasnt hard, everyone would do it. The hard, is what makes it great . A powerful message. Theres been talk in the industry over the last few years about conduct at professional conferences (and conduct in the industry as a whole). Many respected writers have written very good editorials on the topic. Heres my input, for what its worth. Its a message to those individuals who have chosen to behave badly: Dude, it shouldnt be that hard to behave like an adult. A few years ago, CoDe Magazine Chief Editor Rod Paddock made some great points in an editorial about Codes of Conduct at conferences. Its definitely unfortunate to have to remind people of what they should expect out of themselves. But the problems go deeper. A few years ago I sat on a five-person panel (3 women, 2 men) at a community event on Women in Technology. The other male stated that men succeed in this industry because the Y chromosome gives men an advantage in areas of performance. The individual who made these remarks is a highly respected technology expert, and not some bozo making dongle remarks at a conference or sponsoring a programming contest where first prize is a date with a bikini model. Our world is becoming increasingly polarized (just watch the news for five minutes), sadly with emotion often winning over reason. Even in our industry, recently I heard someone in a position of responsibility bash software tool XYZ based on a ridiculous premise and then give false praise to a competing tool. So many opinions, so many arguments, but heres the key: before taking a stand, do your homework and get the facts . Sometimes both sides are partly rightor wrong. Theres only one way to determine: get the facts. As Robert Heinlein wrote, Facts are your single clue get the facts Of course, once you get the facts, the next step is to express them in a meaningful and even compelling way. Theres nothing wrong with using some emotion in an intellectual debate but it IS wrong to replace an intellectual debate with emotion and false agenda. A while back I faced resistance to SQL Server Analysis Services from someone who claimed the tool couldnt do feature XYZ. The specifics of XYZ dont matter here. I spent about two hours that evening working up a demo to cogently demonstrate the original claim was false. In that example, it worked. I cant swear it will always work, but to me thats the only way. Im old enough to remember life at a teen in the 1970s. Back then, when a person lost hisher job, (often) it was because the person just wasnt cutting the mustard. Fast-forward to today: a sad fact of life is that even talented people are now losing their jobs because of the changing economic conditions. Theres never a full-proof method for immunity, but now more than ever its critical to provide a high level of what I call the Three Vs (value, versatility, and velocity) for your employerclients. I might not always like working weekends or very late at night to do the proverbial work of two people but then I remember there are folks out there who would give anything to be working at 1 AM at night to feed their families and pay their bills. Always be yourselfyour BEST self. Some people need inspiration from time to time. Heres mine: the great sports movie, Glory Road. If youve never watched it, and even if youre not a sports fan I can almost guarantee youll be moved like never before. And Ill close with this. If you need some major motivation, Ill refer to a story from 2006. Jason McElwain, a high school student with autism, came off the bench to score twenty points in a high school basketball game in Rochester New York. Heres a great YouTube video. His mother said it all . This is the first moment Jason has ever succeeded and is proud of himself. I look at autism as the Berlin Wall. He cracked it. To anyone who wanted to attend my session at todays SQL Saturday event in DC I apologize that the session had to be cancelled. I hate to make excuses, but a combination of getting back late from Detroit (client trip), a car thats dead (blown head gasket), and some sudden health issues with my wife have made it impossible for me to attend. Back in August, I did the same session (ColumnStore Index) for PASS as a webinar. You can go to this link to access the video (itll be streamed, as all PASS videos are streamed) The link does require that you fill out your name and email address, but thats it. And then you can watch the video. Feel free to contact me if you have questions, at kgoffkevinsgoff November 15, 2013 Getting started with Windows Azure and creating SQL Databases in the cloud can be a bit daunting, especially if youve never tried out any of Microsofts cloud offerings. Fortunately, Ive created a webcast to help people get started. This is an absolute beginners guide to creating SQL Databases under Windows Azure. It assumes zero prior knowledge of Azure. You can go to the BDBI Webcasts of this website and check out my webcast (dated 11102013). Or you can just download the webcast videos right here: here is part 1 and here is part 2. You can also download the slide deck here. November 03, 2013 Topic this week: SQL Server Snapshot Isolation Levels, added in SQL Server 2005. To this day, there are still many SQL developers, many good SQL developers who either arent aware of this feature, or havent had time to look at it. Hopefully this information will help. Companion webcast will be uploaded in the next day look for it in the BDBI Webcasts section of this blog. October 26, 2013 Im going to start a weekly post of T-SQL tips, covering many different versions of SQL Server over the years Heres a challenge many developers face. Ill whittle it down to a very simple example, but one where the pattern applies to many situations. Suppose you have a stored procedure that receives a single vendor ID and updates the freight for all orders with that vendor id. create procedure dbo. UpdateVendorOrders update Purchasing. PurchaseOrderHeader set Freight Freight 1 where VendorID VendorID Now, suppose we need to run this for a set of vendor IDs. Today we might run it for three vendors, tomorrow for five vendors, the next day for 100 vendors. We want to pass in the vendor IDs. If youve worked with SQL Server, you can probably guess where Im going with this. The big question is how do we pass a variable number of Vendor IDs Or, stated more generally, how do we pass an array, or a table of keys, to a procedure Something along the lines of exec dbo. UpdateVendorOrders SomeListOfVendors Over the years, developers have come up with different methods: Going all the way back to SQL Server 2000, developers might create a comma-separated list of vendor keys, and pass the CSV list as a varchar to the procedure. The procedure would shred the CSV varchar variable into a table variable and then join the PurchaseOrderHeader table to that table variable (to update the Freight for just those vendors in the table). I wrote about this in CoDe Magazine back in early 2005 (code-magazinearticleprint. aspxquickid0503071ampprintmodetrue. Tip 3) In SQL Server 2005, you could actually create an XML string of the vendor IDs, pass the XML string to the procedure, and then use XQUERY to shred the XML as a table variable. I also wrote about this in CoDe Magazine back in 2007 (code-magazinearticleprint. aspxquickid0703041ampprintmodetrue. Tip 12)Also, some developers will populate a temp table ahead of time, and then reference the temp table inside the procedure. All of these certainly work, and developers have had to use these techniques before because for years there was NO WAY to directly pass a table to a SQL Server stored procedure. Until SQL Server 2008 when Microsoft implemented the table type. This FINALLY allowed developers to pass an actual table of rows to a stored procedure. Now, it does require a few steps. We cant just pass any old table to a procedure. It has to be a pre-defined type (a template). So lets suppose we always want to pass a set of integer keys to different procedures. One day it might be a list of vendor keys. Next day it might be a list of customer keys. So we can create a generic table type of keys, one that can be instantiated for customer keys, vendor keys, etc. CREATE TYPE IntKeysTT AS TABLE ( IntKey int NOT NULL ) So Ive created a Table Typecalled IntKeysTT . Its defined to have one column an IntKey. Nowsuppose I want to load it with Vendors who have a Credit Rating of 1..and then take that list of Vendor keys and pass it to a procedure: DECLARE VendorList IntKeysTT INSERT INTO VendorList SELECT BusinessEntityID from Purchasing. Vendor WHERE CreditRating 1 So, I now have a table type variable not just any table variable, but a table type variable (that I populated the same way I would populate a normal table variable). Its in server memory (unless it needs to spill to tempDB) and is therefore private to the connectionprocess. OK, can I pass it to the stored procedure now Well, not yet we need to modify the procedure to receive a table type. Heres the code: create procedure dbo. UpdateVendorOrdersFromTT IntKeysTT IntKeysTT READONLY update Purchasing. PurchaseOrderHeader set Freight Freight 1 FROM Purchasing. PurchaseOrderHeader JOIN IntKeysTT TempVendorList ON PurchaseOrderHeader. VendorID Te mpVendorList. IntKey Notice how the procedure receives the IntKeysTT table type as a Table Type (again, not just a regular table, but a table type). It also receives it as a READONLY parameter. You CANNOT modify the contents of this table type inside the procedure. Usually you wont want to you simply want to read from it. Well, now you can reference the table type as a parameter and then utilize it in the JOIN statement, as you would any other table variable. Jadi begitulah. A bit of work to set up the table type, but in my view, definitely worth it. Additionally, if you pass values from , youre in luck. You can pass an ADO data table (with the same tablename property as the name of the Table Type) to the procedure. For developers who have had to pass CSV lists, XML strings, etc. to a procedure in the past, this is a huge benefit. Finally I want to talk about another approach people have used over the years. SQL Server Cursors. At the risk of sounding dogmatic, I strongly advise against Cursors, unless there is just no other way. Cursors are expensive operations in the server, For instance, someone might use a cursor approach and implement the solution this way: DECLARE VendorID int DECLARE dbcursor CURSOR FASTFORWARD FOR SELECT BusinessEntityID from Purchasing. Vendor where CreditRating 1 FETCH NEXT FROM dbcursor INTO VendorID WHILE FETCHSTATUS 0 EXEC dbo. UpdateVendorOrders VendorID FETCH NEXT FROM dbcursor INTO VendorID The best thing Ill say about this is that it works. And yes, getting something to work is a milestone. But getting something to work and getting something to work acceptably are two different things. Even if this process only takes 5-10 seconds to run, in those 5-10 seconds the cursor utilizes SQL Server resources quite heavily. Thats not a good idea in a large production environment. Additionally, the more the of rows in the cursor to fetch and the more the number of executions of the procedure, the slower it will be. When I ran both processes (the cursor approach and then the table type approach) against a small sampling of vendors (5 vendors), the processing times where 260 ms and 60 ms, respectively. So the table type approach was roughly 4 times faster. But then when I ran the 2 scenarios against a much larger of vendors (84 vendors), the different was staggering 6701 ms versus 207 ms, respectively. So the table type approach was roughly 32 times faster. Again, the CURSOR approach is definitely the least attractive approach. Even in SQL Server 2005, it would have been better to create a CSV list or an XML string (providing the number of keys could be stored in a scalar variable). But now that there is a Table Type feature in SQL Server 2008, you can achieve the objective with a feature thats more closely modeled to the way developers are thinking specifically, how do we pass a table to a procedure Now we have an answer Hope you find this feature help. Feel free to post a comment.
Kembalinya daytrader: dapatkah Anda mencari nafkah dengan menyalin investor lain Ini menjanjikan kombinasi kekayaan dan kebebasan yang tak tertahankan. Yang Anda butuhkan hanyalah komputer dan koneksi internet x2013 dan kemudian Anda bisa mendapatkan banyak uang dari kenyamanan rumah Anda. Inilah iming-imingnya perdagangan finansial untuk keuntungan. Seperti yang ditunjukkan oleh program BBC yang populer Jutaan Menit Telah ditunjukkan, mimpinya tampaknya terus berlanjut. Ini menarik bagi orang tua yang berharap bisa meremas beberapa perdagangan yang menguntungkan antara jalan sekolah. Dan itu sama-sama jalan keluar bagi mereka yang sama sekali tidak menginginkannya atau tidak cocok dengan dunia usaha di kantor. Kini dunia media sosial telah menambahkan sentuhan tambahan yang menarik bagi impian menjadi atasan Anda sendiri dan melakukan pembunuhan. Dengan x201ccopy tradingx201d x2013 yang memungkinkan Anda menirukan langkah investasi dari x201cprofessionalsx201d x2013, Anda dapat diduga...
Comments
Post a Comment