2016-08-09 70 views
1

Ich habe ein freigegebenes Dataset für einen mobilen Bericht zu SSRS 2016. Das Dataset befindet sich in einer SSAS-Datenquelle und hat eine MDX-Abfrage, die vom Cube abgerufen werden kann.MDX-Abfrage im freigegebenen SSRS-Datenset mit falschem Datentyp

Der Primärschlüssel, der von der Abfrage zurückgezogen wird, ist ein Datum und wird als solches in SSAS formatiert; Wenn ich das Dataset jedoch in Mobile Report Publisher verwende, wird es nicht als Datumsdatentyp erkannt, sondern als Zeichenfolge. Das bedeutet, dass ich das Dataset nicht als Hauptserie für ein Zeitdiagramm verwenden kann, da es nicht glaubt, dass irgendetwas als Datum formatiert ist.

Das Folgende ist der Abschnitt von MDX, der das Problem verursacht.

SELECT 
{ 
[Unresolved], [Assigned to Provider], [Unresolved past due date], [Other past due date], [Provider past due date], 
[Company past due date], [Provider PDD Daily Change], [Company PDD Daily Change], [Other PDD Daily Change], [Company pre due date], [Company PRDD Daily Change] 
} ON COLUMNS, 
NONEMPTY(
{ 
    [Date Snapshot].[Date].[Date] 
}) ON ROWS 
FROM [Source] 
WHERE 
(FILTER([Date Snapshot].[YQMD].[Date], [Date Snapshot].[YQMD].CURRENTMEMBER.MEMBER_KEY >= '2015-08-15')) 

Antwort

1

Soweit ich verstehe - MDX-Abfragesprache mit dem Datentyp „Datum“ nicht enthält, daher wird es zu „String“ umgewandelt werden.

IBM support - MDX Data types

Wikipedia - MDX Data types

+0

Okay, das ist frustrierend, aber ich hätte, obwohl ich in der Lage sein würde, SSRS zu zwingen, es zu einem Datum zu konvertieren? – Fabian0510

+0

Ich denke, Sie sollten in der Lage sein, einfach ein berechnetes Feld zum Datensatz hinzuzufügen, wo Sie eine Formel haben, in der Sie den Zeichenfolgenwert in Datum (?) Konvertieren. –

+0

Ja, selbst die berechnete Kennzahl wird nicht als Datums-Datentyp bestätigt. – Fabian0510

0

ich das schon erlebt habe und in der Tablix-Zelle, wo ich einer dieser Tage, verwende ich den folgenden Ausdruck verwendet:

=format(cdate(Fields!Calendar_Day.Value),"dd MMM yy") 
0

landete ich das Einwickeln MDX in einer T-SQL-Abfrage mit OPENQUERY. Das ist klobig, vor allem, wenn ich einen Parameter übergeben musste, aber ich konnte die Ergebnismenge explizit in den gewünschten Datentyp konvertieren. Urgh.

+0

Ich würde deine Lösung nicht empfehlen ... siehe die anderen Antworten, die die Zeichenfolge mit der Funktion cdate konvertieren. Dies sollte eine gültige Option für die Verwendung mit SSRS sein und fügt nicht als Abhängigkeit Ihren SQL-Server ausführen. Die Daten müssen auch von Cube an SQL-Server an den Benutzer übergeben werden, der den Bericht ausführt. –

1

Ich hatte das gleiche Problem. Sie können durch die Schaffung eines Mitglied auf der MDX-Abfrage-Ebene unter Verwendung von VBA-Funktionen, um dieses gehen:

MIT MEMBER [Datum] AS CDate ([Datum Snapshot] [Datum] .CURRENTMEMBER.Name.)

SELECT. ..

Ihr Snapshot-Datum muss eines der vorgeschlagenen Formate haben. Wenn es funktioniert, sollte cdate() Funktion den Trick machen. SSRS Mobile Publisher erkennt es als Datum anstelle von Zeichenfolge.

2

Update: da SQL Server 2016 SP1 die Abhilfe erläuterte is no longer necessary und Daten richtig ohne besondere etwas zu tun anerkannt werden sollen:

diese neue Funktionalität zu testen, erstellen Sie eine einfache MDX-Abfrage der Abfrage-Designer verwenden, enthält ein Datumsfeld aus Ihrem Datenmodell. Wenn Sie dieses freigegebene Dataset mit Mobile Report Publisher konsumieren, erkennt es das Datumsfeld Ihrer Abfrage ordnungsgemäß, ohne dass eine zusätzliche berechnete Kennzahl erforderlich ist.

Der ursprüngliche Text der Antwort folgt:

Der Grund, warum dies geschieht, wird in der official Microsoft documentation erklärt:

Der Rückgabetyp Standard für Analysis Services Abfragen eine Zeichenfolge ist. Beim Erstellen eines Datasets im Reporting Services-Berichts-Generator wird der Zeichenfolgentyp berücksichtigt und auf dem Server gespeichert.

Wenn der JSON-Tabellenrenderer das Dataset verarbeitet, liest er jedoch den Wert der Spalte als Zeichenfolge und rendert Strings. Wenn dann SQL Server Mobile Report Publisher die Tabelle abruft, sieht sie auch nur Zeichenfolgen.

Die offizielle Abhilfe erklärt auch dort:

Die Abhilfe für dieses ist ein berechnetes Element hinzuzufügen, wenn Sie die Schaffung eines gemeinsamen Datensatzes in Report Builder sind.

Ein Beispiel für ein solches berechnetes Element (von here genommen):

cdate(format([Date].[Date].CURRENTMEMBER.MEMBER_VALUE, "yyyy-MM-dd")) 

Aber diese Abhilfe hat ein großes Problem (wie von Victor_Rocca in einem Kommentar auf der offiziellen Microsoft-Dokumentation angegeben):

Der Nachteil ist, dass es alle Termine angezeigt werden können, die in der Abfrage, nicht nur diejenigen, die einen Wert haben mit ihr verbundenen ausgewählt haben worden in Ihrem Cube (entfernt im Wesentlichen das nicht leere Verhalten von der MDX-Abfrage). Wenn Sie eine Vielzahl von Datensätzen über hinweg betrachten, könnte dies die Berichtsleistung erheblich beeinträchtigen.

Also ich denke, es gibt eine bessere Abhilfe, die ein berechnetes Feld im Datensatz schafft:

new dataset calculated field

mit einem Ausdruck wie dieser (der Name des Feldes unter der Annahme, ‚Datum‘ und dass es eindeutige Namen wie [Datum Snapshot]. [Datum]. [Datum]. & [2010-01-01T00: 00: 00] und [Datum Snapshot]. [Datum]. [Datum]. & [2010-12-31T00: 00: 00]:

=CDate(mid(Fields!Date("UniqueName"),33,10)) 

Auf diese Weise müssen Sie nicht manuell bearbeiten Ihr MDX und nicht leeres Verhalten wird beibehalten. Dieses neue Feld wird als Datum Datentyp in Mobile Report Publisher korrekt identifiziert:

date datatype

In jedem Fall Hilfe ist auf dem Weg nach this post basierend auf Informationen auf den letzten Pass Summit (Oktober 2016) erhalten, die Folgendes wird entwickelt:

Bessere Unterstützung für generierte MDX. Die Problemumgehung für das aktuelle Datum wird nicht länger benötigt und erleichtert jedem das Leben.

0

Der einzige Weg, ich es geschafft, MRP zu bekommen mein Datum als echtes Datum zu erkennen, durch die Zeit Navigator zu filtern, um eine berechnete Kennzahl wurde die Zugabe auf der Grundlage der MemberValue des Date Dimension.

z.:

WITH MEMBER [Measures].[Date2] AS ([_Reference Period].[Date].CurrentMember.MemberValue) 

Und danach, das Feld [Measures].[Date2] auf die Maßnahmen der Abfrage hinzu:

NON {. [Measures] [Date2]} SELECT ON COLUMNS, NON {([_ReferencePeriod ]. [Datum]. [Datum] .ALLMEMBERS * [Unternehmen]. [Unternehmen]. [Unternehmen] .ALLMEMBERS * [Vertrag]. [Typ]. [Typ] .ALLMEMBERS * [Angestellter]. [Geschlecht]. [Geschlecht ] .ALLMEMBERS * [Situationstyp]. [Situationstyp]. [Situationstyp] .ALLMEMBERS}} DIMENSION EIGENSCHAFTEN MEMBER_CAPTION, MEMBER_VALUE, MEMBER_UNIQUE_NAME AUF ZEILEN VON [QUELLE] CELL-EIGENSCHAFTEN WERT, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE , FONT_FLAGS