SQLとBIツールに独自のデータベースビューを使用する

英語版はこちら

Invantive SQLでは、リリース22.0.14から、データベースビュー(database-views)を定義・使用できるようになりました。データベースビューは、Invantive SQLおよびBIツールのエンドユーザーを対象としています。

この記事では、データベースビューの作成方法と使用方法を紹介し、Invantiveがドライバーに付属させているビュー(views)と比較します。

データベースビューの作成

データベースビューは、create [or replace] [force] viewステートメントを使用して作成できます。

以下のデータベースビューは、Exact Online内の2つの仕訳帳テーブル間の関係を定義し、XMLテーブルからマッチング有無(wel/niet matchen)の情報を、RESTテーブルの仕訳帳のすべての列に追加します。

create or replace force view testjoin
as
select coalesce(t1.code, t2.code_attr) code
,      t2.OWNBANKACCOUNT_GLPAYMENTINTRANSIT_MATCHING_ATTR
,      t1.Description
from   ExactOnlineREST..journals@eol t1
full
outer
join   ExactOnlineXML..journals@eol t2
on     t1.code = t2.code_attr

ビューの内容を取得する

新しいビューは、セッションの間、データディクショナリ(data dictionary)内のカタログDataDictionary、スキーマCustomの下に保存されます。そのため、完全な名前はDataDictionary.Custom.TESTJOINとなります。

ビューの作成、変更、削除の際には、そのビューがデータディクショナリにあることを指定する必要はありません。結局のところ、ビューが存在できる場所は1つしかないためです。一方、クエリでビューを参照する際には、DataDictionaryドライバーのエイリアスを使ってその出所を指定する必要があります。

したがって、ビューの内容は次のようなクエリで簡単に取得できます。

select *
from   testjoin@DataDictionary

現時点では、InvantiveデータベースのDataDictionaryConnectionStringプロパティで定義されたデータベースに、ビュー定義を永続的に保存する方法はありません。ただし、データベースを開く際にビュー定義を再読み込みすることは可能です。例えば、Invantive CloudではOn Startup SQLを使用して行えます。

ビューの定義は、Invantive Query Tool内でカーソルをビュー名に置いた状態でF4キーを押すことで取得できますが、データディクショナリビューSystemViewsを通じて常に取得することも可能です。

select PROVIDER_NAME
,      Name
,      QUERY
from   SYSTEMVIEWS@DataDictionary
where  PROVIDER_NAME = 'DataDictionary'

結果は次のようになります。

テーブル関数を反復処理するためのビュー

多くのプラットフォームでは、データへのアクセス手段としてテーブル関数が提供されています。これらのテーブル関数には1つ以上の必須パラメーターが必要な場合が多く、完全なデータセットを取得するには一連の値を反復処理する必要があります。

1つ以上の必須パラメーターを持つテーブル関数は、OData / Power BIでは使用できません。

ビューを使用すると、すべてのデータを取得するプロセスを簡素化できます。例えば、Teamleader Focusでは、連絡先の住所を取得するために、連絡先住所用のテーブル関数を1回評価する必要があります。これは、以下に示すようにビューを使用することで実現できます。

select d.*
,      p.* prefix with 'user_'
from   Teamleader.V2.Contacts p
join   Teamleader.V2.ContactAddressesByContactId(p.id) d

このようなビューを読み取ると、非常に多くのAPI呼び出しが発生する可能性がある点に注意してください。where句を使用したフィルターは、通常テーブル関数にアクセスする前に評価されるため、パフォーマンス上の理由から、ドライビングテーブル(上記の例ではContacten)の列値でフィルタリングすることをお勧めします。

複数のデータコンテナーにまたがるビュー

データベースビューが真価を発揮するのは、クエリが複数のデータコンテナーにまたがってデータを結合する場合です。これにより、多くの手作業を省くことができます。以下のクエリは、Exact Online管理内の取引先(relaties)とActiveCampaignを比較します。

create or replace force view compare_companies_across_data_containers_v
as
select coalesce(t1.name, t2.name) 
       name
       label 'Relatienaam'
,      t1.code 
       exact_online_code
       label 'Exact Online Relatienummer'
,      t2.id 
       active_campaign_id
       label 'ActiveCampaign ID'
from   AccountsIncremental@eol t1
full
outer
join   Accounts@ac t2
on     t2.name = t1.name

select *
from   COMPARE_COMPANIES_ACROSS_DATA_CONTAINERS_V@DataDictionary

結果として、取引先名ごとにExact OnlineおよびActiveCampaignでの番号を示す差分リストが得られます。

複数の国またはExact Onlineの複数契約にまたがるビュー

Exact Onlineは国ごとに別々の環境を持っています。例えば、部門(divisie)123123は、ベルギーとオランダでは異なる管理データとなります。ビューを使用することで、複数の国のすべての管理データを、例えばPower BIで一度に処理することが可能になります。Exact Onlineの契約ごとに、データベース内にデータコンテナーを作成してください。例えばエイリアスeolnlとeolbeを使用します。以下のクエリは、オランダとベルギーの取引先を結合する例です。

create or replace force view eolall_accounts_r
as
select *
from   AccountsIncremental@eolnl
--
-- Union allはunionより高速です。GUIDデータ型を持つId列は
-- 一意な値であるため、重複排除処理を省略できるためです。
--
union all
select *
from   AccountsIncremental@eolbe

select *
from   eolall_accounts_r@DataDictionary

このビューはスタートアップSQL(startup SQL)に設定できます。

エラーのあるビュー

ビューは作成時に構文の正しさがチェックされますが、実行はされません。forceオプションを指定すれば、構文エラーのあるSQLステートメントであっても作成することができます。選択(select)を行う時点で、構文と、現在アクティブなデータベースにおける有効性の両方がチェックされます。

Power BIでビューを使用する

データベースビューは、ドライバービュー(driver-views)と同様に、Power BI、Power Query、Azure Data Factoryで使用できます。ビュー定義はデータベースのOn Startup SQLに含めることをお勧めします。

以下で説明するようにキャッシュをクリアすると、ビューはテーブルの一覧に自動的に表示されます。

On Startup SQLで数十を超えるデータベースビューを定義すると、データベースを開く際の速度に明確な遅延が生じます。

Power BIにおける新しいビューバージョン

ビューが別のバージョンに置き換えられたり、新しいビューが追加されたりした場合、Invantive Bridge OnlineおよびInvantive App Online経由では、一般的に新しいバージョンが表示されないか、一部のみしか表示されません。新しい定義がPower BIに表示されるまでに1週間かかることがありますが、Invantive CloudのSQL Editorではすぐに表示されます。

Invantive Bridge OnlineとInvantive App Onlineは、大量のデータであってもパフォーマンスをできるだけ良好に保つため、いわゆる「キャッシュ(caching)」を非常に積極的に活用しています。

このキャッシュをリセットすることで、新しいバージョンのビューの読み込みを強制することができます。キャッシュの再設定を行うと、Exact Onlineの*Incrementalテーブルなどの増分テーブルの古いバージョンを含め、すべてのキャッシュ要素が削除されます。読み込みの際、最初の1回は目に見える遅延が発生しますが、その後は以前と同程度のパフォーマンスに戻ります。

Invantive Bridge Onlineのキャッシュを再設定するには、以下の手順を実行します。

  • Power BIまたはPowerBI.comの資格情報(credentials)で使用されているCloudユーザーを確認します。
  • そのCloudユーザーでBridge Onlineにログインします。
  • 右上のメニューを開きます。
  • 下の画像に示されているように「キャッシュのリセット(Cache resetten)」を選択します。
  • Power BIで利用可能なテーブルの一覧を読み込みます。
  • 新しい定義が表示されない場合は?
  • Bridge Online Monitoringで、該当する読み込みリクエストの「キャッシュから(Uit Cache)」にチェックが入っていないか確認してください。「キャッシュから」にチェックが入っている場合、キャッシュのリセットがうまくいかなかった可能性があります。再度キャッシュのリセットを試してください。

ドライバービュー(Driver-views)

データベースビューは、特定のドライバー用に用意された固定(同梱)のビューを、新しい機能で補完するものです。これらのドライバービューは、そのドライバーに属するテーブルのデータのみを結合できます。ドライバービューは、そのドライバーが対象とするプラットフォームの利用を簡素化しますが、変更することはできません。

データベースビューとドライバービューの違いは、以下の表のとおりです。

データベースビュー ドライバービュー
すべてのインストールで利用可能 いいえ はい
ユーザーによるカスタマイズ可否 はい いいえ
複数のデータコンテナーのテーブルを結合可能 はい いいえ
Views gebruiken om centraal te filteren voor Teamleader en Power BI
Startup SQL instelbaar voor alle Invantive Cloud-gebruikers
Activeren nieuwe versie view in Bridge Online
Wat zijn tabelfuncties en tabelfunctieparameters?
Teamleader Focus: decision maker
Itgeneor229 op ExactOnlineREST.PurchaseEntry.PurchaseEntryLines
SnelStart custom view niet in OData data set
Custom View niet zichtbaar in metadata
Persoonsgegevens uit Easyflex API ophalen
Versnellen rapport voorraadanalyse Exact Online
Lange Laadtijden DealPhaseHistories Tabel
Query op SQL view geeft itgendid300
Fout: itgensql056 bij opvragen uren en projecten
Itgenoda061 "The 'FromPeriod' parameter must be specified for filtering" bij Power BI-download Visma.net van ProjectTransactions
Foutmelding itgensql056/itgenboe070/itgenboe073 query over ontbrekende comma of ";"
Tabel voor PowerQuery in Excel vanuit Exact Online nodig met: aantal herinneringen, laatste herinnering en notities
Vernieuwprobleem: nieuwe versie view lijkt niet door te komen in PowerBI.com
Vernieuwprobleem: nieuwe versie view lijkt niet door te komen in PowerBI.com
OData parameters meegeven vanuit Azure Data Factory
EmployeeLeaveBalances exporteren
Tabel voor PowerQuery in Excel vanuit Exact Online nodig met: aantal herinneringen, laatste herinnering en notities
Mogelijkheid meerdere views op één databron op Invantive
Nieuwe Tix (Tixly) views worden niet zichtbaar
Sales forecast / verkoopprognose tabel benaderen
View Twinfield.Views.GeneralLedgerAccountMappingAccounts@tfd laadt alle records die vallen onder licentie
Dynamische filteren op datum in Startup SQL
Best practice om Budget en ReportingBalance te koppelen in Tableau?
Easyflex Data validatie ds_bi_declaratieregels
Best practice om Budget en ReportingBalance te koppelen in Tableau?
Zware performance issues Simplicate (hours)
Grote performancewinst bij real-time queries op gefilterde views met tabelfuncties
Data uit meerdere SnelStart-administraties real-time consolideren
Foutmelding itgenboe072: Can not add column ‘caWerkvoorbereider’ to ‘Bouw7.Project.Projects’
Foutmelding itgenboe072: Can not add column ‘caWerkvoorbereider’ to ‘Bouw7.Project.Projects’
Parameter meegeven aan Easyflex-tabelfunctie via Azure Data Factory
Waar vind ik journaalposten-tabel op Easyflex?
Waar vind ik journaalposten-tabel op Easyflex?
Itgensgr046 melding bij Aanroep Robaws data
Itgendid357 A value for the parameter 'creditnote_id' is required on table 'Teamleader.V1.creditnote_items'
Startup SQL tabellen laden niet in PowerBI
Startup SQL filter werkt niet
ProjectAssigmentBudget / Waarde capaciteitsplanning
Nmbrs Power BI aantal tabellen
Tabel PurchaseInvoiceLinesByPurchaseInvoiceId ontbreekt in OData-feed
Custom view in Hubspot niet zichtbaar
Custom view in Hubspot niet zichtbaar
Tabel DataDictionary.Custom.GENERALLEDGERBALANCESALL bestaat niet meer
Niet alle Nmbrs-tabellen beschreven zichtbaar in Power BI
Invantive cloud & monitoring enorm traag
Selecteren meerdere databases (SnelStart)
Tabel voor PowerQuery in Excel vanuit Exact Online nodig met: aantal herinneringen, laatste herinnering en notities
Hoe koppel ik zelf nieuwe API's aan Invantive SQL/Power BI en alle aangesloten platformen?
Documentatie Datamodel Snelstart komt niet overeen met (OAuth) tabellen in Power BI
Snel en met minder API-calls Exact Online uitlezen met de incrementele "sync API"-tabellen