次の方法で共有


予定表テーブルのデータ変換を実装する

データ翻訳を実装する場合は、予定表テーブルのテキストベースの列の翻訳サポートを追加できます。 これらの表には、月名または曜日の翻訳が含まれます。 このアプローチでは、日数や月数に言及したビジュアルを作成することができる。

月名や日名を表示するレポート ビジュアルを示すスクリーンショット。

翻訳されたバージョンを使用すると、サポートされている言語でビジュアルを読みやすくなります。

ローカライズされた月名や日名を表示するレポート ビジュアルを示すスクリーンショット。

予定表テーブル列の翻訳に関するこの記事の戦略では、Power Query と M クエリ言語を使用します。 Power Query には、Date.MonthName などの組み込み関数が用意されています。Date パラメーターを受け取り、テキストベースの予定表名を返します。 .pbix プロジェクトの既定の言語とロケールが en-US の場合、次の Power Query 関数呼び出しは 1 月というテキストベースの値に評価されます。

Date.MonthName( #date(2023, 1, 1) )

Date.MonthName 関数は、特定の言語とロケールを渡す 2 番目の省略可能な文字列パラメーターを受け取ります。

Date.MonthName( #date(2023, 1, 1), "en-US")

月名をフランス語に変換する場合は、fr-FR のテキスト値を渡すことができます。

Date.MonthName( #date(2022, 12, 1), "fr-FR")

予定表の翻訳テーブルを生成する

前の例で使用した Languages テーブルを確認します。 これには DefaultCulture 列が含まれています。

スクリーンショットは、既定のカルチャー列のある Language テーブルを示しています。

Power Query は、M という関数型クエリ言語に基づいて構築されています。その言語を使用すると、Languages テーブルの行を反復処理して、プロジェクトでサポートされている言語と既定のカルチャを確認できます。 Languages テーブルをそのソースとして使用するクエリを作成して、月または曜日名を含む予定表翻訳テーブルを生成できます。

図は、Power Query 変換のソースとして使用され、月名テーブルと曜日名テーブルを作成する Languages テーブルを示しています。

翻訳された月名テーブルを生成する M コードを次に示します。

let
  Source = #table( type table [ MonthNumber = Int64.Type ], List.Split({1..12},1)),
  Translations = Table.AddColumn( Source, "Translations",
    each
      [ MonthDate = #date( 2022, [ MonthNumber ], 1 ),
        Translations = List.Transform(Languages[DefaultCulture], each Date.MonthName( MonthDate, _ ) ),
        TranslationTable = Table.FromList( Translations, null ),
        TranslationsTranspose = Table.Transpose(TranslationTable),
        TranslationsColumns = Table.RenameColumns(
          TranslationsTranspose,
          List.Zip({ Table.ColumnNames( TranslationsTranspose ),
            List.Transform(Languages[Language],
            each "MonthNameTranslations" & _ ) })
          )
      ]
  ),
  ExpandedTranslations = Table.ExpandRecordColumn(Translations,
                                                  "Translations",
                                                  { "TranslationsColumns" },
                                                  { "TranslationsColumns" }),
  ColumnsCollection = List.Transform(Languages[Language], each "MonthNameTranslations" & _ ),
  ExpandedTranslationsColumns = Table.ExpandTableColumn(ExpandedTranslations,
                                                        "TranslationsColumns",
                                                        ColumnsCollection,
                                                        ColumnsCollection ),
  TypedColumnsCollection = List.Transform(ColumnsCollection, each {_, type text}),
  QueryOutput = Table.TransformColumnTypes(ExpandedTranslationsColumns, TypedColumnsCollection)
in
  QueryOutput

ヒント

プロジェクトに予定表翻訳テーブルを追加する必要がある場合は、常に ProductSalesMultiLanguage.pbix サンプルの M コードをコピーして貼り付けることができます。

Languages テーブルに英語、スペイン語、フランス語、ドイツ語の 4 行が含まれている場合、次のスクリーンショットに示すように、翻訳された月名テーブル クエリは 4 つの翻訳列を含むテーブルを生成します。

スクリーンショットは、翻訳済みの月名テーブルとそれによって作成されるテーブルを示しています。

同様に、翻訳済みの日名テーブルという名前のクエリでは、曜日名の翻訳を含むテーブルが生成されます。

スクリーンショットは、翻訳済みの日名テーブルとそれによって作成されるテーブルを示しています。

翻訳済の付きの名前テーブル翻訳済みの日名テーブルという 2 つのクエリは、汎用として書き込まれています。 ハードコーディングされた列名は含まれません。 これらのクエリでは、プロジェクトに対して言語を追加または削除するときに、今後の変更は必要ありません。 必要なのは、クエリのデータ行を更新することにあります。

スクリーンショットは、[並べ替え順序] ブロックで言語が選択された詳細エディターを示しています。

並べ替え値を構成する

これら 2 つのクエリを初めて実行すると、セマンティック モデルに 2 つのテーブルが作成され、名前は Translated Month Names TableTranslated Day Names Table。 言語ごとに翻訳列があります。 翻訳列ごとに並べ替え列を構成する必要があります:

  • 翻訳済みの月名の翻訳列を構成して、MonthNumber 列の並べ替えを使用します
  • 翻訳済みの日名テーブルの翻訳列を構成して、DayNumber 列の並べ替えを使用します

スクリーンショットは、月番号で並べ替えするように設定された月名の列を示しています。

翻訳テーブルの統合

次の手順では、2 つのテーブルを予定表テーブルを使用してデータ モデルに統合します。 予定表テーブルは、次のデータ分析式 (DAX) 式に基づく計算テーブルです。

スクリーンショットは、テーブルとその DAX コードを示しています。

カレンダー テーブルと ファクト テーブルの間にリレーションシップ (Salesなど) を作成するには、[日付] 列を使用して一対多リレーションシップを作成します。 予定表テーブルと 2 つの変換テーブルの間に作成されるリレーションシップは、MonthNumber 列と DayNumber 列に基づいています。

スクリーンショットは、予定表テーブルとリレーションシップを持つ

予定表テーブルで必要なリレーションシップを作成した後、2 つの予定表翻訳テーブルごとに新しいフィールド パラメーターを作成します。 予定表翻訳テーブルのフィールド パラメータを作成するのは、先に示した商品名やカテゴリー名のフィールド パラメータを作成するのと同じです。

スクリーンショットは、翻訳された月の名前テーブルのテーブル ビューを示しています。

これらの新しいフィールド パラメーター テーブルと Languages テーブルの間にリレーションシップを追加して、言語フィルター戦略が期待どおりに動作するようにします。

スクリーンショットは、複数の翻訳済みテーブルとリレーションシップにある

翻訳済みの月名翻訳済みの日名のフィールド パラメーターを作成した後は、デカルト ビジュアル、テーブル、マトリックスを使用してレポートでそれらを表示し始めることができます。

スクリーンショットは、ビジュアルの X 軸を示す日の値を示します。

すべてを設定したら、Languages アテーブルのレポート レベルのフィルターを使用して作業をテストし、言語を切り替え、月と曜日の名前の翻訳を期待どおりに検証できます。

スクリーンショットは、言語が選択されて、ビジュアルが選択を反映しているフィルターを示しています。