SAP HANA データベース

まとめ

項目 説明
リリース状態 一般提供
製品 Excel
Power BI (セマンティック モデル)
Power BI (データフロー)
ファブリック (データフロー Gen2)
Power Apps (データフロー)
Analysis Services
サポートされている認証の種類 基本
データベース
Windows
関数リファレンス ドキュメント SapHana.Database

Note

デプロイ スケジュールにより、またホスト固有の機能があることにより、ある製品に存在する機能が他の製品にはない場合があります。

前提条件

Web サイトにサインインしてドライバーをダウンロードするには、SAP アカウントが必要です。 不明な場合は、組織内の SAP 管理者に問い合わせてください。

Power BI Desktop または Excel で SAP HANA を使用するには、SAP HANA データ接続が正常に機能するように、SAP HANA ODBC ドライバーをローカルのクライアント コンピューターにインストールする必要があります。 SAP HANA クライアント ツールは、必要な ODBC ドライバーを含む SAP 開発ツールからダウンロードできます。 または、SAP ソフトウェア ダウンロード センターから入手することもできます。 ソフトウェア Portal で、Windows コンピューター用の SAP HANA CLIENT を検索します。 SAP ソフトウェア ダウンロード センターでは構造が頻繁に変更されるため、そのサイトを移動するためのより具体的なガイダンスはありません。 SAP HANA ODBC ドライバーをインストールする手順については、「Windows 64 ビットに SAP HANA ODBC ドライバーをインストール」を参照してください。

Excel で SAP HANA を使用するには、32 ビットまたは 64 ビットの SAP HANA ODBC ドライバーがローカル クライアント コンピューターにインストールされている必要があります (32 ビットまたは 64 ビットのどちらのバージョンの Excel を使用しているかによって異なります)。

この機能は、Office 2019 または Microsoft 365 サブスクリプションを使用している場合にのみ、Windows 用 Excel で使用できます。 Microsoft 365 サブスクライバーの場合は、Office の最新バージョンがインストールされていることを確認してください。

HANA 1.0 SPS 12rev122.09、2.0 SPS 3rev30、BW/4HANA 2.0 がサポートされています。

サポートされる機能

  • インポート
  • Direct Query (Power BI セマンティック モデル)
  • 詳細
    • SQL ステートメント

Power Query Desktop から SAP HANA データベースに接続する

Power Query Desktop から SAP HANA データベースに接続するには、次のようにします。

  1. Power BI Desktop で [データを取得]> > [SAP HANA データベース] の順に選択するか、Excel の [データ] リボンで [データベースから]> > [SAP HANA データベースから] の順に選択します。

  2. 接続先の SAP HANA サーバーの名前とポートを入力します。 次の図の例では、ポート 30015SAPHANATestServer を使用しています。

    Enter the SAP HANA server information.

    既定では、ポート番号は単一のコンテナー データベースをサポートするように設定されています。 SAP HANA データベースに複数のマルチテナント データベース コンテナーを含めることができる場合は、[Multi-container system database (30013)]\(マルチコンテナー システム データベース (30013)\) を選択します。 テナント データベースまたは既定値以外のインスタンス番号が指定されたデータベースに接続する場合は、[ポート] ドロップダウン メニューから [カスタム] を選択します。

    Power BI Desktop から SAP HANA データベースに接続している場合は、[インポート] または [DirectQuery] のどちらかを選択するオプションも表示されます。 この記事の例では、[インポート] を使用します。これは既定値 (かつ、Excel 用の唯一のモード) です。 Power BI Desktop で DirectQuery を使用してデータベースに接続する方法については、「Power BI で DirectQuery を使用して SAP HANA データ ソースに接続する」を参照してください。

    SQL ステートメントを入力したり、[詳細オプション] から列バインドを有効にしたりできます。 詳細については、「詳細オプションを使用した接続」を参照してください。

    すべてのオプションを入力したら、[OK] を選択します。

  3. データベースに初めてアクセスする場合は、認証用の資格情報を入力するように求められます。 この例では、SAP HANA サーバーでデータベース ユーザーの資格情報が必要であるため、[データベース] を選択し、ユーザー名とパスワードを入力します。 必要に応じて、サーバー証明書の情報を入力します。

    Enter the server credentials.

    また、サーバー証明書の検証が必要になる場合もあります。 サーバー証明書を検証する選択項目の使用方法について詳しくは、SAP HANA 暗号化の使用に関するページを参照してください。 Power BI Desktop と Excel では、サーバー証明書を検証する選択項目は既定で有効になっています。 ODBC データ ソース アドミニストレーターでこれらのオプションを既に設定している場合は、[サーバー証明書の検証] チェック ボックスをオフにします。 ODBC データ ソース管理者を使用して、これらの選択肢を設定する方法については、「ODBC クライアント アクセス許可用の SSL を SAP HANA に構成する」を参照してください。

    認証の詳細については、「データ ソースを使用した認証」を参照してください。

    必要な情報をすべて入力したら、[接続] を選択します。

  4. [ナビゲーター] ダイアログ ボックスでは、[データの変換] を選択して Power Query エディター内でデータを変換するか、[読み込み] を選択してデータを読み込むことができます。

Power Query Online から SAP HANA データベースに接続する

Power Query Online から SAP HANA データに接続するには、次のようにします。

  1. [データ ソース] ページで、[SAP HANA データベース] を選択します。

  2. 接続先の SAP HANA サーバーの名前とポートを入力します。 次の図の例では、ポート 30015SAPHANATestServer を使用しています。

  3. 必要に応じて、[詳細オプション] で SQL ステートメントを入力します。 詳細については、「詳細オプションを使用した接続」を参照してください。

  4. データベースへのアクセスに使用するオンプレミス データ ゲートウェイの名前を選択します。

    Note

    データがローカルかオンラインかにかかわらず、このコネクタではオンプレミス データ ゲートウェイを使用する必要があります。

  5. データへのアクセスに使用する認証の種類を選択します。 また、ユーザー名とパスワードを入力する必要もあります。

    Note

    現在、Power Query Online では基本認証のみがサポートされています。

  6. 暗号化された接続を使用している場合は、[暗号化された接続を使用する] を選択し、SSL 暗号化プロバイダーを選択します。 暗号化された接続を使用していない場合は、[暗号化された接続を使用する] をオフにします。 詳細については、「SAP HANA に対して暗号化を有効にする」を参照してください。

    SAP HANA database online sign-in.

  7. [次へ] を選択して続行します。

  8. [ナビゲーター] ダイアログ ボックスでは、[データの変換] を選択して Power Query エディター内でデータを変換するか、[読み込み] を選択してデータを読み込むことができます。

詳細オプションを使用して接続する

Power Query では、必要に応じてクエリに追加できる詳細オプションのセットが用意されています。

次の表は、Power Query で設定できるすべての詳細オプションの説明です。

詳細オプション 説明
SQL ステートメント 詳細については、「ネイティブ データベース クエリを使用してデータベースからデータをインポートする」を参照してください。
列バインドの有効化 データをフェッチする際、SAP HANA 結果セットの列に変数をバインドします。 メモリ使用率が若干高くなりますが、パフォーマンスを向上させる可能性があります。 このオプションは Power Query Desktop でのみ使用できます。 詳細については、「列バインドの有効化」を参照してください。
ConnectionTimeout サーバーへの接続思考を破棄するまでに待機時間を制御する期間。 既定値は 15 秒です。
CommandTimeOut キャンセルされる前にサーバー側のクエリを実行する期間を制御する期間。 既定値は 10 分です。

SAP HANA でサポートされている機能

次の一覧は、SAP HANA でサポートされている機能を示しています。 ここに記載されているすべての機能が、SAP HANA データベース コネクタのすべての実装でサポートされているわけではありません。

  • Power BI Desktop と SAP HANA データベース用 Excel コネクタの両方で、SAP ODBC ドライバーを使用して最適なユーザー エクスペリエンスが提供されます。

  • Power BI Desktop では、SAP HANA で DirectQuery とインポートの両方のオプションがサポートされています。

  • Power BI Desktop では、HANA 情報モデル (分析ビューや計算ビューなど) がサポートされており、ナビゲーションが最適化されています。

  • SAP HANA では、ネイティブ データベース クエリ SQL ステートメントで SQL コマンドを使用して、[ナビゲーター] エクスペリエンスが提供する分析/計算ビューに含まれていない HANA カタログ テーブルの行テーブルと列テーブルに接続することもできます。 ODBC コネクタを使用して、これらのテーブルに対してクエリを実行することもできます。

  • Power BI Desktop には、HANA モデル向けに最適化されたナビゲーションが含まれています。

  • Power BI Desktop は、SAP HANA の変数と入力パラメーターをサポートします。

  • Power BI Desktop は、HDI コンテナー ベースの計算ビューをサポートします。

  • SapHana.Database 関数で、接続とコマンド タイムアウトがサポートされるようになりました。 詳細情報: 詳細オプションを使用して接続

    • Power BI で HDI コンテナー ベースの計算ビューにアクセスするには、Power BI で使う HANA データベース ユーザーが、アクセスするビューを格納する HDI ランタイム コンテナーにアクセスするためのアクセス許可を持っていることを確認します。 このアクセス許可を付与するには、HDI コンテナーへのアクセスを許可するロールを作成します。 次に、Power BI で使用する HANA データベース ユーザーにロールを割り当てます。 (このユーザーには、通常どおり、_SYS_BI スキーマでシステム テーブルから読み取るためのアクセス許可も必要です)。データベース ロールを作成して割り当てる方法の詳細な手順については、SAP の公式ドキュメントを参照してください。 この SAP のブログ記事から始めることもできます。

    • 現在、HDI ベースの計算ビューに関連付けられている HANA 変数には、いくつかの制限があります。 これらの制限は、HANA 側のエラーが原因です。 まず、HDI コンテナー ベースの計算ビューの共有列に HANA 変数を適用することはできません。 この制限を解決するには、HANA 2 バージョン 37.02 以降または HANA 2 バージョン 42 以降にアップグレードします。 次に、変数とパラメーターの複数エントリの既定値は、現在 Power BI UI に表示されません。 SAP HANA でエラーが発生すると、この制限が発生しますが、SAP はまだ修正プログラムを発表していません。

列バインドの有効化

データ ソースからフェッチされたデータは、アプリケーションがこの目的のために割り当てた変数でアプリケーションに返されます。 これを行う前に、アプリケーションはこれらの変数を結果セットの列に関連付けるか、バインドする必要があります。概念的には、このプロセスはアプリケーション変数をステートメント パラメーターにバインドするのと同じです。 アプリケーションは、変数を結果セット列にバインドするときに、その変数 (アドレス、データ型など) をドライバーに記述します。 ドライバーは、そのステートメントに対して保持する構造体にこの情報を格納し、行がフェッチされたときに列から値を返す情報を使用します。

現在、Power Query Desktop を使用して SAP HANA データベースに接続する場合は、[列バインドの有効化] 詳細オプションを選択して列バインドを有効にすることができます。

Power Query 数式バーまたは詳細エディターで接続に EnableColumnBinding オプションを手動で追加することで、既存のクエリまたは Power Query Online で使用されるクエリで列バインドを有効にすることもできます。 次に例を示します。

SapHana.Database("myserver:30015", [Implementation = "2.0", EnableColumnBinding = true]),

EnableColumnBinding オプションを手動で追加する場合には、次のような制限があります。

  • 列バインドの有効化は、インポート モードと DirectQuery モードの両方で機能します。 ただし、この高度なオプションを使用するために既存の DirectQuery クエリを後付けすることはできません。 代わりに、この機能が正しく機能するためには、新しいクエリを作成する必要があります。
  • SAP HANA Server バージョン 2.0 以降では、列バインドは絶対的です。 一部の列をバインドできない場合、バインドは行われず、ユーザーはたとえば、 DataSource.Error: Column MEASURE_UNIQUE_NAME of type VARCHAR cannot be bound (20002 > 16384) などの例外を受信します。
  • SAP HANA バージョン 1.0 サーバーでは、列の長さが正しいとは限りません。 このコンテキストでは、 EnableColumnBinding は部分列バインドを許可します。 一部のクエリでは、これは列がバインドされていないことを意味する場合があります。 列がバインドされていない場合、パフォーマンス上の利点はありません。

SAP HANA データベース コネクターでのネイティブ クエリのサポート

Power Query SAP HANA データベース コネクターでは、ネイティブ クエリがサポートされています。 Power Queryでネイティブ クエリを使用する方法については、「ネイティブ データベース クエリ を使用してデータベースからデータをインポートする」を参照してください。

ネイティブ クエリでのクエリ フォールディング

Power Query SAP HANA データベース コネクターで、ネイティブ クエリでのクエリ フォールディングがサポートされるようになりました。 詳細については、「ネイティブ クエリのクエリ フォールディング」を参照してください。

Note

Power Query SAP HANA データベース コネクターでは、EnableFolding が true に設定されている場合、ネイティブ クエリは、重複する列名をサポートしません。

ネイティブ クエリのパラメーター

Power Query SAP HANA データベース コネクターで、ネイティブ クエリのパラメーターがサポートされるようになりました。 Value.NativeQuery 構文を使用して ネイティブ クエリでパラメーターを指定します。

他のコネクターとは異なり、SAP HANA データベース コネクターは、EnableFolding = True をサポートし、同時にパラメーターを指定します。

クエリでパラメーターを使用するには、プレースホルダーとして疑問符 (?) をコードに配置します。 パラメーターを指定するには、SqlType テキスト値と ValueSqlType に対する値を使用します。 Value は、任意の M 値を保持していますが、指定された SqlType の値に割り当てる必要があります。

パラメーターを指定する方法は複数あります。

  • 値のみをリストとして指定します。

    { “Seattle”, 1, #datetime(2022, 5, 27, 17, 43, 7) }
    
  • 値と型をリストとして指定します。

    { [ SqlType = "CHAR", Value = "M" ], 
       [ SqlType = "BINARY", Value = Binary.FromText("AKvN", BinaryEncoding.Base64) ], 
       [ SqlType = "DATE", Value = #date(2022, 5, 27) ] }
    
  • 次の 2 つを組み合わせます。

    { “Seattle”, 1, [ SqlType = "SECONDDATE", Value = #datetime(2022, 5, 27, 17, 43, 7) ] }
    

SqlType は、SAP HANA で定義されている標準の型名に従います。 たとえば、次の一覧には、使用される最も一般的な型が含まれています。

  • BIGINT
  • BINARY
  • BOOLEAN
  • CHAR
  • DATE
  • DECIMAL
  • DOUBLE
  • INTEGER
  • NVARCHAR
  • SECONDDATE
  • SHORTTEXT
  • SMALLDECIMAL
  • SMALLINT
  • TIME
  • TIMESTAMP
  • VARBINARY
  • VARCHAR

次の例では、パラメーター値の一覧を指定する方法を示します。

let
    Source = Value.NativeQuery(
        SapHana.Database(
            "myhanaserver:30015", 
            [Implementation = "2.0"]
        ), 
        "select ""VARCHAR_VAL"" as ""VARCHAR_VAL""
    from ""_SYS_BIC"".""DEMO/CV_ALL_TYPES""
    where ""VARCHAR_VAL"" = ? and ""DATE_VAL"" = ?
    group by ""VARCHAR_VAL""
    ", 
        {"Seattle", #date(1957, 6, 13)}, 
        [EnableFolding = true]
    )
in
    Source

次の例では、レコードの一覧を指定する (または値とレコードを混在させる) 方法を示します。

let
    Source = Value.NativeQuery(
        SapHana.Database(Server, [Implementation="2.0"]), 
    "select
        ""COL_VARCHAR"" as ""COL_VARCHAR"",
        ""ID"" as ""ID"",
        sum(""DECIMAL_MEASURE"") as ""DECIMAL_MEASURE""
    from ""_SYS_BIC"".""DEMO/CV_ALLTYPES""
    where
        ""COL_ALPHANUM"" = ? or
        ""COL_BIGINT"" = ? or
        ""COL_BINARY"" = ? or
        ""COL_BOOLEAN"" = ? or
        ""COL_DATE"" = ?
    group by 
        ""COL_ALPHANUM"",
        ""COL_BIGINT"",
        ""COL_BINARY"",
        ""COL_BOOLEAN"",
        ""COL_DATE"",
       {
            [ SqlType = "CHAR", Value = "M" ],                                                // COL_ALPHANUM - CHAR
            [ SqlType = "BIGINT", Value = 4 ],                                                // COL_BIGINT - BIGINT
            [ SqlType = "BINARY", Value = Binary.FromText("AKvN", BinaryEncoding.Base64) ],   // COL_BINARY - BINARY
            [ SqlType = "BOOLEAN", Value = true ],                                            // COL_BOOLEAN - BOOLEAN
            [ SqlType = "DATE", Value = #date(2022, 5, 27) ],                                 // COL_DATE - TYPE_DATE
        } ,
        [EnableFolding=false]
    )
in
    Source

動的属性のサポート

SAP HANA データベース コネクターが計算列を処理する方法が改善されました。 SAP HANA データベース コネクターは "キューブ" コネクターであり、"キューブ" 空間で発生する一部の操作 (項目の追加、列の折りたたみなど) があります。 このキューブ空間は、Power Query Desktop と Power Query Online のユーザー インターフェイスで、より一般的な "テーブル" アイコンを置き換える "キューブ" アイコンによって表示されます。

Screenshot of the left side of the current view in Power Query, emphasizing the cube icon at the top of the row number column.

以前は、テーブル列 (または内部的に列を追加する別の変換) を追加すると、クエリは "キューブ空間から削除" され、すべての操作はテーブル レベルで実行されます。 ある時点で、この削除によってクエリの折りたたみが停止する場合があります。 列を追加した後にキューブ操作を実行することはできなくなりました。

この変更により、追加された列はキューブ内で動的属性として扱われます。 この操作でクエリをキューブ空間に保持すると、列を追加した後でもキューブ操作を引き続き使用できるという利点があります。

Note

この新機能は、SAP HANA Server バージョン 2.0 以降の計算ビューに接続する場合にのみ使用できます。

次のサンプル クエリでは、この新機能を利用しています。 以前は、Cube.CollapseAndRemoveColumns を適用すると、「値はキューブではありません」という例外が発生していました。

let
    Source = SapHana.Database(“someserver:someport”, [Implementation="2.0"]),
    Contents = Source{[Name="Contents"]}[Data],
    SHINE_CORE_SCHEMA.sap.hana.democontent.epm.models = Contents{[Name="SHINE_CORE_SCHEMA.sap.hana.democontent.epm.models"]}[Data],
    PURCHASE_ORDERS1 = SHINE_CORE_SCHEMA.sap.hana.democontent.epm.models{[Name="PURCHASE_ORDERS"]}[Data],
    #"Added Items" = Cube.Transform(PURCHASE_ORDERS1,
        {
            {Cube.AddAndExpandDimensionColumn, "[PURCHASE_ORDERS]", {"[HISTORY_CREATEDAT].[HISTORY_CREATEDAT].Attribute", "[Product_TypeCode].[Product_TypeCode].Attribute", "[Supplier_Country].[Supplier_Country].Attribute"}, {"HISTORY_CREATEDAT", "Product_TypeCode", "Supplier_Country"}},
            {Cube.AddMeasureColumn, "Product_Price", "[Measures].[Product_Price]"}
        }),
    #"Inserted Year" = Table.AddColumn(#"Added Items", "Year", each Date.Year([HISTORY_CREATEDAT]), Int64.Type),
    #"Filtered Rows" = Table.SelectRows(#"Inserted Year", each ([Product_TypeCode] = "PR")),
    #"Added Conditional Column" = Table.AddColumn(#"Filtered Rows", "Region", each if [Supplier_Country] = "US" then "North America" else if [Supplier_Country] = "CA" then "North America" else if [Supplier_Country] = "MX" then "North America" else "Rest of world"),
    #"Filtered Rows1" = Table.SelectRows(#"Added Conditional Column", each ([Region] = "North America")),
    #"Collapsed and Removed Columns" = Cube.CollapseAndRemoveColumns(#"Filtered Rows1", {"HISTORY_CREATEDAT", "Product_TypeCode"})
in
    #"Collapsed and Removed Columns"

次のステップ

次の記事には、SAP HANA データベースに接続するときに役立つ可能性がある詳細情報が含まれています。