{"id":467,"date":"2020-12-28T22:00:23","date_gmt":"2020-12-28T21:00:23","guid":{"rendered":"https:\/\/www.csopro.de\/biblog\/?p=467"},"modified":"2021-02-14T13:00:02","modified_gmt":"2021-02-14T12:00:02","slug":"azure-cube-verarbeitung-von-on-premise","status":"publish","type":"post","link":"https:\/\/www.csopro.de\/biblog\/2020\/12\/azure-cube-verarbeitung-von-on-premise\/","title":{"rendered":"Azure Cube-Verarbeitung von on premise"},"content":{"rendered":"\n<p>In einem Projekt, in dem die gesamte Datenhaltung und Datenverarbeitung on premise war (SQL + SSIS), haben wir einen Azure Analysis Services-Cube benutzt.<\/p>\n\n\n\n<p>F\u00fcr die Verarbeitung dieses Cubes haben wir nach einfachen Wegen gesucht, wie wir die Cube-Verarbeitung von SSIS \/ SQL Agent aus anstarten k\u00f6nnten.<\/p>\n\n\n\n<p>Im Web findet man ja einiges zu Cube-Verarbeitung von Azure Analysis Services-Cubes (z.B. <a rel=\"noreferrer noopener\" href=\"https:\/\/medium.com\/ricoh-digital-services\/process-azure-analysis-services-models-with-azure-data-factory-v2-d7c6288f352c\" target=\"_blank\">Process Azure Analysis Services Models with Azure Data Factory v2<\/a> oder <a rel=\"noreferrer noopener\" href=\"https:\/\/azure.microsoft.com\/de-de\/blog\/automating-azure-analysis-services-processing-with-azure-functions\/\" target=\"_blank\">Automating Azure Analysis Services processing with Azure Functions<\/a>). Die erste Methode haben wir \u00fcbrigens in einem anderen Projekt (das Azure Data Factory verwendete) verwendet. Allerdings hat dies den Nachteil, dass die ADF Managed Service Identity als Administrator des Analysis Services eingetragen werden muss &#8211; also mehr Rechte braucht als eigentlich n\u00f6tig.<\/p>\n\n\n\n<p>Aber f\u00fcr unseren Fall wollten wir eine m\u00f6glichst einfache L\u00f6sung innerhalb SSIS.<\/p>\n\n\n\n<p>Zun\u00e4chst schauen wir uns an, wie wir einen On-Prem-Analysis-Services-Cube verarbeiten w\u00fcrden. Dazu reicht im SSIS eine Execute-SQL-Task mit folgenden Einstellungen:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Connection ist eine OLE DB-Connection, z.B. mit folgendem Connection-String: Data Source=&lt;ServerName&gt;;Initial Catalog=&lt;Cube-Datenbank-Name&gt;;Provider=MSOLAP.7;Integrated Security=SSPI; <\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2020\/12\/grafik.png\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" width=\"721\" height=\"623\" src=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2020\/12\/grafik.png\" alt=\"Beispiel f\u00fcr eine OLE DB Connection auf den Cube\" class=\"wp-image-468\" srcset=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2020\/12\/grafik.png 721w, https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2020\/12\/grafik-300x259.png 300w\" sizes=\"auto, (max-width: 721px) 100vw, 721px\" \/><\/a><figcaption>Connection auf SSAS<\/figcaption><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Im Feld &#8222;SQL-Statement&#8220; tr\u00e4gt man den SSAS-Befehl ein (den man sich z.B. im SQL Server Management Studio skripten lassen kann):<\/li><\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"json\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\"refresh\": \n{\"type\": \"full\",\n\"objects\": [\n{\"database\": \"NetzwerkControlling\"}\n]\n}\n}<\/pre>\n\n\n\n<p>F\u00fcr eine Verarbeitung eines Azure-Cubes k\u00f6nnen wir ganz genauso vorgehen. Nur der ConnectionString ist zu \u00e4ndern:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Als Data Source ist der Azure Analysis Service einzutragen, also irgendwie so: asazure:\/\/westeurope.asazure.windows.net\/&lt;Server&gt;<\/li><li>Wir m\u00fcssen einen User angeben, da wir nicht den User verwenden k\u00f6nnen, unter dem der Prozess on prem l\u00e4uft. Also sieht unser ConnectionString so aus:<br>Data Source=asazure:\/\/westeurope.asazure.windows.net\/&lt;Server&gt;;User ID=&lt;Username&gt;@&lt;Azure Active Directory&gt;;Initial Catalog=&lt;Cube-Datenbank-Name&gt;;Provider=MSOLAP.8;Persist Security Info=False;<\/li><li>Dann m\u00fcssen wir in dem Attribut Password der Connection das Passwort dieses Users mitgeben.<\/li><\/ul>\n\n\n\n<p>Nat\u00fcrlich wollen wir das Passwort nicht im plain text irgendwo stehen haben. Deswegen reichen wir das Passwort \u00fcber einen Paket-Parameter herein, den wir als sensitive (vertraulich) definieren. Dann k\u00f6nnen wir bei der Konfiguration im Katalog oder im SQL Server Agent das Passwort eintippen und es ist sicher in der SSISDB gespeichert:<\/p>\n\n\n\n<p>Im Paket sieht das so aus:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"379\" height=\"103\" src=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2020\/12\/grafik-3.png\" alt=\"\" class=\"wp-image-471\" srcset=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2020\/12\/grafik-3.png 379w, https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2020\/12\/grafik-3-300x82.png 300w\" sizes=\"auto, (max-width: 379px) 100vw, 379px\" \/><figcaption>Paket-Parameter &#8222;Passwort&#8220; &#8211; als vertraulich definiert<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2020\/12\/grafik-2.png\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" width=\"360\" height=\"328\" src=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2020\/12\/grafik-2.png\" alt=\"Eigenschaften der SSAS-Connection in SSIS\" class=\"wp-image-470\" srcset=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2020\/12\/grafik-2.png 360w, https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2020\/12\/grafik-2-300x273.png 300w\" sizes=\"auto, (max-width: 360px) 100vw, 360px\" \/><\/a><figcaption>Eigenschaften der SSAS-Connection in SSIS<\/figcaption><\/figure>\n\n\n\n<p>In diesem Fall habe ich sogar den Connection-String auch noch von au\u00dfen hereingereicht.<\/p>\n\n\n\n<p>Bei der Konfiguration im SQL Agent stellt man dann das Passwort ein:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"468\" height=\"261\" src=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2020\/12\/grafik-4.png\" alt=\"\" class=\"wp-image-472\" srcset=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2020\/12\/grafik-4.png 468w, https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2020\/12\/grafik-4-300x167.png 300w\" sizes=\"auto, (max-width: 468px) 100vw, 468px\" \/><figcaption>Konfiguration des Paket-Aufrufs im SQL Server Agent mit Passwort-Eingabe<\/figcaption><\/figure>\n\n\n\n<p>Damit k\u00f6nnen wir mit dem gleichen Code lokale und Azure-Analysis-Services-Cubes verarbeiten &#8211; lediglich den Connectionstring mussten wir anpassen und im Azure-Analysis-Services-Fall das Passwort mit angeben.<\/p>\n\n\n\n<p>Dies hat folgende Vorteile:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>einheitliche Code-Basis &#8211; ein Code f\u00fcr beides<\/li><li>Passwort sicher gespeichert<\/li><li>im Gegensatz zu obiger Azure Data Factory-Variante<ul><li>der User ben\u00f6tigt nur process-Rechte auf dem Cube<\/li><li>Der Aufruf ist automatisch synchron, so dass man Fehler einfach mitbekommt.<\/li><\/ul><\/li><\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In einem Projekt, in dem die gesamte Datenhaltung und Datenverarbeitung on premise war (SQL + SSIS), haben wir einen Azure Analysis Services-Cube benutzt. F\u00fcr die Verarbeitung dieses Cubes haben wir nach einfachen Wegen gesucht, wie wir die Cube-Verarbeitung von SSIS \/ SQL Agent aus anstarten k\u00f6nnten. Im Web findet man ja einiges zu Cube-Verarbeitung von &hellip; <a href=\"https:\/\/www.csopro.de\/biblog\/2020\/12\/azure-cube-verarbeitung-von-on-premise\/\" class=\"more-link\"><span class=\"screen-reader-text\">Azure Cube-Verarbeitung von on premise<\/span> weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[63,10,13],"tags":[60,59,61],"class_list":["post-467","post","type-post","status-publish","format-standard","hentry","category-azure-anaysis-services","category-integrationservices","category-sql-server-agent","tag-analysis-services","tag-azure","tag-cubeverarbeitung"],"_links":{"self":[{"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/posts\/467","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/comments?post=467"}],"version-history":[{"count":2,"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/posts\/467\/revisions"}],"predecessor-version":[{"id":498,"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/posts\/467\/revisions\/498"}],"wp:attachment":[{"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/media?parent=467"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/categories?post=467"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/tags?post=467"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}